Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
b749902b
Commit
b749902b
authored
Mar 31, 2016
by
Dan Williams
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kubenet: set bridge promiscuous mode based on hairpinMode
Closes:
https://github.com/kubernetes/kubernetes/issues/23657
Closes:
https://github.com/kubernetes/kubernetes/issues/20475
parent
e8dc9eae
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
65 additions
and
37 deletions
+65
-37
docker_test.go
pkg/kubelet/dockertools/docker_test.go
+2
-1
manager_test.go
pkg/kubelet/dockertools/manager_test.go
+2
-1
kubelet.go
pkg/kubelet/kubelet.go
+13
-12
kubelet_test.go
pkg/kubelet/kubelet_test.go
+2
-1
cni.go
pkg/kubelet/network/cni/cni.go
+2
-1
cni_test.go
pkg/kubelet/network/cni/cni_test.go
+3
-2
exec.go
pkg/kubelet/network/exec/exec.go
+2
-1
exec_test.go
pkg/kubelet/network/exec/exec_test.go
+9
-8
kubenet_linux.go
pkg/kubelet/network/kubenet/kubenet_linux.go
+18
-2
kubenet_unsupported.go
pkg/kubelet/network/kubenet/kubenet_unsupported.go
+2
-1
plugins.go
pkg/kubelet/network/plugins.go
+6
-5
plugins_test.go
pkg/kubelet/network/plugins_test.go
+2
-1
runonce_test.go
pkg/kubelet/runonce_test.go
+2
-1
No files found.
pkg/kubelet/dockertools/docker_test.go
View file @
b749902b
...
@@ -32,6 +32,7 @@ import (
...
@@ -32,6 +32,7 @@ import (
cadvisorapi
"github.com/google/cadvisor/info/v1"
cadvisorapi
"github.com/google/cadvisor/info/v1"
"k8s.io/kubernetes/cmd/kubelet/app/options"
"k8s.io/kubernetes/cmd/kubelet/app/options"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/apis/componentconfig"
"k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/credentialprovider"
"k8s.io/kubernetes/pkg/credentialprovider"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
...
@@ -650,7 +651,7 @@ func TestFindContainersByPod(t *testing.T) {
...
@@ -650,7 +651,7 @@ func TestFindContainersByPod(t *testing.T) {
},
},
}
}
fakeClient
:=
NewFakeDockerClient
()
fakeClient
:=
NewFakeDockerClient
()
np
,
_
:=
network
.
InitNetworkPlugin
([]
network
.
NetworkPlugin
{},
""
,
nettest
.
NewFakeHost
(
nil
))
np
,
_
:=
network
.
InitNetworkPlugin
([]
network
.
NetworkPlugin
{},
""
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
// image back-off is set to nil, this test should not pull images
// image back-off is set to nil, this test should not pull images
containerManager
:=
NewFakeDockerManager
(
fakeClient
,
&
record
.
FakeRecorder
{},
nil
,
nil
,
&
cadvisorapi
.
MachineInfo
{},
options
.
GetDefaultPodInfraContainerImage
(),
0
,
0
,
""
,
containertest
.
FakeOS
{},
np
,
nil
,
nil
,
nil
)
containerManager
:=
NewFakeDockerManager
(
fakeClient
,
&
record
.
FakeRecorder
{},
nil
,
nil
,
&
cadvisorapi
.
MachineInfo
{},
options
.
GetDefaultPodInfraContainerImage
(),
0
,
0
,
""
,
containertest
.
FakeOS
{},
np
,
nil
,
nil
,
nil
)
for
i
,
test
:=
range
tests
{
for
i
,
test
:=
range
tests
{
...
...
pkg/kubelet/dockertools/manager_test.go
View file @
b749902b
...
@@ -37,6 +37,7 @@ import (
...
@@ -37,6 +37,7 @@ import (
"k8s.io/kubernetes/cmd/kubelet/app/options"
"k8s.io/kubernetes/cmd/kubelet/app/options"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/apis/componentconfig"
"k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/client/record"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
containertest
"k8s.io/kubernetes/pkg/kubelet/container/testing"
containertest
"k8s.io/kubernetes/pkg/kubelet/container/testing"
...
@@ -105,7 +106,7 @@ func createTestDockerManager(fakeHTTPClient *fakeHTTP, fakeDocker *FakeDockerCli
...
@@ -105,7 +106,7 @@ func createTestDockerManager(fakeHTTPClient *fakeHTTP, fakeDocker *FakeDockerCli
}
}
fakeRecorder
:=
&
record
.
FakeRecorder
{}
fakeRecorder
:=
&
record
.
FakeRecorder
{}
containerRefManager
:=
kubecontainer
.
NewRefManager
()
containerRefManager
:=
kubecontainer
.
NewRefManager
()
networkPlugin
,
_
:=
network
.
InitNetworkPlugin
([]
network
.
NetworkPlugin
{},
""
,
nettest
.
NewFakeHost
(
nil
))
networkPlugin
,
_
:=
network
.
InitNetworkPlugin
([]
network
.
NetworkPlugin
{},
""
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
dockerManager
:=
NewFakeDockerManager
(
dockerManager
:=
NewFakeDockerManager
(
fakeDocker
,
fakeDocker
,
fakeRecorder
,
fakeRecorder
,
...
...
pkg/kubelet/kubelet.go
View file @
b749902b
...
@@ -356,7 +356,17 @@ func NewMainKubelet(
...
@@ -356,7 +356,17 @@ func NewMainKubelet(
}
}
glog
.
Infof
(
"Using node IP: %q"
,
klet
.
nodeIP
.
String
())
glog
.
Infof
(
"Using node IP: %q"
,
klet
.
nodeIP
.
String
())
}
}
if
plug
,
err
:=
network
.
InitNetworkPlugin
(
networkPlugins
,
networkPluginName
,
&
networkHost
{
klet
});
err
!=
nil
{
if
mode
,
err
:=
effectiveHairpinMode
(
componentconfig
.
HairpinMode
(
hairpinMode
),
containerRuntime
,
configureCBR0
,
networkPluginName
);
err
!=
nil
{
// This is a non-recoverable error. Returning it up the callstack will just
// lead to retries of the same failure, so just fail hard.
glog
.
Fatalf
(
"Invalid hairpin mode: %v"
,
err
)
}
else
{
klet
.
hairpinMode
=
mode
}
glog
.
Infof
(
"Hairpin mode set to %q"
,
klet
.
hairpinMode
)
if
plug
,
err
:=
network
.
InitNetworkPlugin
(
networkPlugins
,
networkPluginName
,
&
networkHost
{
klet
},
klet
.
hairpinMode
);
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
else
{
}
else
{
klet
.
networkPlugin
=
plug
klet
.
networkPlugin
=
plug
...
@@ -375,15 +385,6 @@ func NewMainKubelet(
...
@@ -375,15 +385,6 @@ func NewMainKubelet(
klet
.
podCache
=
kubecontainer
.
NewCache
()
klet
.
podCache
=
kubecontainer
.
NewCache
()
klet
.
podManager
=
kubepod
.
NewBasicPodManager
(
kubepod
.
NewBasicMirrorClient
(
klet
.
kubeClient
))
klet
.
podManager
=
kubepod
.
NewBasicPodManager
(
kubepod
.
NewBasicMirrorClient
(
klet
.
kubeClient
))
if
mode
,
err
:=
effectiveHairpinMode
(
componentconfig
.
HairpinMode
(
hairpinMode
),
containerRuntime
,
configureCBR0
);
err
!=
nil
{
// This is a non-recoverable error. Returning it up the callstack will just
// lead to retries of the same failure, so just fail hard.
glog
.
Fatalf
(
"Invalid hairpin mode: %v"
,
err
)
}
else
{
klet
.
hairpinMode
=
mode
}
glog
.
Infof
(
"Hairpin mode set to %q"
,
klet
.
hairpinMode
)
// Initialize the runtime.
// Initialize the runtime.
switch
containerRuntime
{
switch
containerRuntime
{
case
"docker"
:
case
"docker"
:
...
@@ -499,7 +500,7 @@ func NewMainKubelet(
...
@@ -499,7 +500,7 @@ func NewMainKubelet(
// effectiveHairpinMode determines the effective hairpin mode given the
// effectiveHairpinMode determines the effective hairpin mode given the
// configured mode, container runtime, and whether cbr0 should be configured.
// configured mode, container runtime, and whether cbr0 should be configured.
func
effectiveHairpinMode
(
hairpinMode
componentconfig
.
HairpinMode
,
containerRuntime
string
,
configureCBR0
bool
)
(
componentconfig
.
HairpinMode
,
error
)
{
func
effectiveHairpinMode
(
hairpinMode
componentconfig
.
HairpinMode
,
containerRuntime
string
,
configureCBR0
bool
,
networkPlugin
string
)
(
componentconfig
.
HairpinMode
,
error
)
{
// The hairpin mode setting doesn't matter if:
// The hairpin mode setting doesn't matter if:
// - We're not using a bridge network. This is hard to check because we might
// - We're not using a bridge network. This is hard to check because we might
// be using a plugin. It matters if --configure-cbr0=true, and we currently
// be using a plugin. It matters if --configure-cbr0=true, and we currently
...
@@ -514,7 +515,7 @@ func effectiveHairpinMode(hairpinMode componentconfig.HairpinMode, containerRunt
...
@@ -514,7 +515,7 @@ func effectiveHairpinMode(hairpinMode componentconfig.HairpinMode, containerRunt
glog
.
Warningf
(
"Hairpin mode set to %q but container runtime is %q, ignoring"
,
hairpinMode
,
containerRuntime
)
glog
.
Warningf
(
"Hairpin mode set to %q but container runtime is %q, ignoring"
,
hairpinMode
,
containerRuntime
)
return
componentconfig
.
HairpinNone
,
nil
return
componentconfig
.
HairpinNone
,
nil
}
}
if
hairpinMode
==
componentconfig
.
PromiscuousBridge
&&
!
configureCBR0
{
if
hairpinMode
==
componentconfig
.
PromiscuousBridge
&&
!
configureCBR0
&&
networkPlugin
!=
"kubenet"
{
// This is not a valid combination. Users might be using the
// This is not a valid combination. Users might be using the
// default values (from before the hairpin-mode flag existed) and we
// default values (from before the hairpin-mode flag existed) and we
// should keep the old behavior.
// should keep the old behavior.
...
...
pkg/kubelet/kubelet_test.go
View file @
b749902b
...
@@ -37,6 +37,7 @@ import (
...
@@ -37,6 +37,7 @@ import (
"k8s.io/kubernetes/pkg/api/resource"
"k8s.io/kubernetes/pkg/api/resource"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apis/componentconfig"
"k8s.io/kubernetes/pkg/capabilities"
"k8s.io/kubernetes/pkg/capabilities"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
"k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/client/record"
...
@@ -128,7 +129,7 @@ func newTestKubelet(t *testing.T) *TestKubelet {
...
@@ -128,7 +129,7 @@ func newTestKubelet(t *testing.T) *TestKubelet {
kubelet
.
nodeName
=
testKubeletHostname
kubelet
.
nodeName
=
testKubeletHostname
kubelet
.
runtimeState
=
newRuntimeState
(
maxWaitForContainerRuntime
)
kubelet
.
runtimeState
=
newRuntimeState
(
maxWaitForContainerRuntime
)
kubelet
.
runtimeState
.
setNetworkState
(
nil
)
kubelet
.
runtimeState
.
setNetworkState
(
nil
)
kubelet
.
networkPlugin
,
_
=
network
.
InitNetworkPlugin
([]
network
.
NetworkPlugin
{},
""
,
nettest
.
NewFakeHost
(
nil
))
kubelet
.
networkPlugin
,
_
=
network
.
InitNetworkPlugin
([]
network
.
NetworkPlugin
{},
""
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
if
tempDir
,
err
:=
ioutil
.
TempDir
(
"/tmp"
,
"kubelet_test."
);
err
!=
nil
{
if
tempDir
,
err
:=
ioutil
.
TempDir
(
"/tmp"
,
"kubelet_test."
);
err
!=
nil
{
t
.
Fatalf
(
"can't make a temp rootdir: %v"
,
err
)
t
.
Fatalf
(
"can't make a temp rootdir: %v"
,
err
)
}
else
{
}
else
{
...
...
pkg/kubelet/network/cni/cni.go
View file @
b749902b
...
@@ -25,6 +25,7 @@ import (
...
@@ -25,6 +25,7 @@ import (
"github.com/appc/cni/libcni"
"github.com/appc/cni/libcni"
cnitypes
"github.com/appc/cni/pkg/types"
cnitypes
"github.com/appc/cni/pkg/types"
"github.com/golang/glog"
"github.com/golang/glog"
"k8s.io/kubernetes/pkg/apis/componentconfig"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/kubelet/dockertools"
"k8s.io/kubernetes/pkg/kubelet/dockertools"
"k8s.io/kubernetes/pkg/kubelet/network"
"k8s.io/kubernetes/pkg/kubelet/network"
...
@@ -93,7 +94,7 @@ func getDefaultCNINetwork(pluginDir, vendorCNIDirPrefix string) (*cniNetwork, er
...
@@ -93,7 +94,7 @@ func getDefaultCNINetwork(pluginDir, vendorCNIDirPrefix string) (*cniNetwork, er
return
nil
,
fmt
.
Errorf
(
"No valid networks found in %s"
,
pluginDir
)
return
nil
,
fmt
.
Errorf
(
"No valid networks found in %s"
,
pluginDir
)
}
}
func
(
plugin
*
cniNetworkPlugin
)
Init
(
host
network
.
Host
)
error
{
func
(
plugin
*
cniNetworkPlugin
)
Init
(
host
network
.
Host
,
hairpinMode
componentconfig
.
HairpinMode
)
error
{
plugin
.
host
=
host
plugin
.
host
=
host
return
nil
return
nil
}
}
...
...
pkg/kubelet/network/cni/cni_test.go
View file @
b749902b
...
@@ -34,6 +34,7 @@ import (
...
@@ -34,6 +34,7 @@ import (
"k8s.io/kubernetes/cmd/kubelet/app/options"
"k8s.io/kubernetes/cmd/kubelet/app/options"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/apis/componentconfig"
"k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/client/record"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
containertest
"k8s.io/kubernetes/pkg/kubelet/container/testing"
containertest
"k8s.io/kubernetes/pkg/kubelet/container/testing"
...
@@ -144,7 +145,7 @@ func newTestDockerManager() (*dockertools.DockerManager, *dockertools.FakeDocker
...
@@ -144,7 +145,7 @@ func newTestDockerManager() (*dockertools.DockerManager, *dockertools.FakeDocker
fakeDocker
:=
dockertools
.
NewFakeDockerClient
()
fakeDocker
:=
dockertools
.
NewFakeDockerClient
()
fakeRecorder
:=
&
record
.
FakeRecorder
{}
fakeRecorder
:=
&
record
.
FakeRecorder
{}
containerRefManager
:=
kubecontainer
.
NewRefManager
()
containerRefManager
:=
kubecontainer
.
NewRefManager
()
networkPlugin
,
_
:=
network
.
InitNetworkPlugin
([]
network
.
NetworkPlugin
{},
""
,
nettest
.
NewFakeHost
(
nil
))
networkPlugin
,
_
:=
network
.
InitNetworkPlugin
([]
network
.
NetworkPlugin
{},
""
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
dockerManager
:=
dockertools
.
NewFakeDockerManager
(
dockerManager
:=
dockertools
.
NewFakeDockerManager
(
fakeDocker
,
fakeDocker
,
fakeRecorder
,
fakeRecorder
,
...
@@ -174,7 +175,7 @@ func TestCNIPlugin(t *testing.T) {
...
@@ -174,7 +175,7 @@ func TestCNIPlugin(t *testing.T) {
installPluginUnderTest
(
t
,
testVendorCNIDirPrefix
,
testNetworkConfigPath
,
vendorName
,
pluginName
)
installPluginUnderTest
(
t
,
testVendorCNIDirPrefix
,
testNetworkConfigPath
,
vendorName
,
pluginName
)
np
:=
probeNetworkPluginsWithVendorCNIDirPrefix
(
path
.
Join
(
testNetworkConfigPath
,
pluginName
),
testVendorCNIDirPrefix
)
np
:=
probeNetworkPluginsWithVendorCNIDirPrefix
(
path
.
Join
(
testNetworkConfigPath
,
pluginName
),
testVendorCNIDirPrefix
)
plug
,
err
:=
network
.
InitNetworkPlugin
(
np
,
"cni"
,
NewFakeHost
(
nil
))
plug
,
err
:=
network
.
InitNetworkPlugin
(
np
,
"cni"
,
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatalf
(
"Failed to select the desired plugin: %v"
,
err
)
t
.
Fatalf
(
"Failed to select the desired plugin: %v"
,
err
)
}
}
...
...
pkg/kubelet/network/exec/exec.go
View file @
b749902b
...
@@ -66,6 +66,7 @@ import (
...
@@ -66,6 +66,7 @@ import (
"github.com/golang/glog"
"github.com/golang/glog"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apis/componentconfig"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/kubelet/network"
"k8s.io/kubernetes/pkg/kubelet/network"
utilexec
"k8s.io/kubernetes/pkg/util/exec"
utilexec
"k8s.io/kubernetes/pkg/util/exec"
...
@@ -104,7 +105,7 @@ func ProbeNetworkPlugins(pluginDir string) []network.NetworkPlugin {
...
@@ -104,7 +105,7 @@ func ProbeNetworkPlugins(pluginDir string) []network.NetworkPlugin {
return
execPlugins
return
execPlugins
}
}
func
(
plugin
*
execNetworkPlugin
)
Init
(
host
network
.
Host
)
error
{
func
(
plugin
*
execNetworkPlugin
)
Init
(
host
network
.
Host
,
hairpinMode
componentconfig
.
HairpinMode
)
error
{
err
:=
plugin
.
validate
()
err
:=
plugin
.
validate
()
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
...
...
pkg/kubelet/network/exec/exec_test.go
View file @
b749902b
...
@@ -29,6 +29,7 @@ import (
...
@@ -29,6 +29,7 @@ import (
"testing"
"testing"
"text/template"
"text/template"
"k8s.io/kubernetes/pkg/apis/componentconfig"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/kubelet/network"
"k8s.io/kubernetes/pkg/kubelet/network"
nettest
"k8s.io/kubernetes/pkg/kubelet/network/testing"
nettest
"k8s.io/kubernetes/pkg/kubelet/network/testing"
...
@@ -134,7 +135,7 @@ func TestSelectPlugin(t *testing.T) {
...
@@ -134,7 +135,7 @@ func TestSelectPlugin(t *testing.T) {
installPluginUnderTest
(
t
,
""
,
testPluginPath
,
pluginName
,
nil
)
installPluginUnderTest
(
t
,
""
,
testPluginPath
,
pluginName
,
nil
)
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
pluginName
,
nettest
.
NewFakeHost
(
nil
))
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
pluginName
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"Failed to select the desired plugin: %v"
,
err
)
t
.
Errorf
(
"Failed to select the desired plugin: %v"
,
err
)
}
}
...
@@ -156,7 +157,7 @@ func TestSelectVendoredPlugin(t *testing.T) {
...
@@ -156,7 +157,7 @@ func TestSelectVendoredPlugin(t *testing.T) {
installPluginUnderTest
(
t
,
vendor
,
testPluginPath
,
pluginName
,
nil
)
installPluginUnderTest
(
t
,
vendor
,
testPluginPath
,
pluginName
,
nil
)
vendoredPluginName
:=
fmt
.
Sprintf
(
"%s/%s"
,
vendor
,
pluginName
)
vendoredPluginName
:=
fmt
.
Sprintf
(
"%s/%s"
,
vendor
,
pluginName
)
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
vendoredPluginName
,
nettest
.
NewFakeHost
(
nil
))
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
vendoredPluginName
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"Failed to select the desired plugin: %v"
,
err
)
t
.
Errorf
(
"Failed to select the desired plugin: %v"
,
err
)
}
}
...
@@ -177,7 +178,7 @@ func TestSelectWrongPlugin(t *testing.T) {
...
@@ -177,7 +178,7 @@ func TestSelectWrongPlugin(t *testing.T) {
installPluginUnderTest
(
t
,
""
,
testPluginPath
,
pluginName
,
nil
)
installPluginUnderTest
(
t
,
""
,
testPluginPath
,
pluginName
,
nil
)
wrongPlugin
:=
"abcd"
wrongPlugin
:=
"abcd"
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
wrongPlugin
,
nettest
.
NewFakeHost
(
nil
))
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
wrongPlugin
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
if
plug
!=
nil
||
err
==
nil
{
if
plug
!=
nil
||
err
==
nil
{
t
.
Errorf
(
"Expected to see an error. Wrong plugin selected."
)
t
.
Errorf
(
"Expected to see an error. Wrong plugin selected."
)
}
}
...
@@ -205,7 +206,7 @@ func TestPluginValidation(t *testing.T) {
...
@@ -205,7 +206,7 @@ func TestPluginValidation(t *testing.T) {
}
}
f
.
Close
()
f
.
Close
()
_
,
err
=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
pluginName
,
nettest
.
NewFakeHost
(
nil
))
_
,
err
=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
pluginName
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
if
err
==
nil
{
if
err
==
nil
{
// we expected an error here because validation would have failed
// we expected an error here because validation would have failed
t
.
Errorf
(
"Expected non-nil value."
)
t
.
Errorf
(
"Expected non-nil value."
)
...
@@ -223,7 +224,7 @@ func TestPluginSetupHook(t *testing.T) {
...
@@ -223,7 +224,7 @@ func TestPluginSetupHook(t *testing.T) {
installPluginUnderTest
(
t
,
""
,
testPluginPath
,
pluginName
,
nil
)
installPluginUnderTest
(
t
,
""
,
testPluginPath
,
pluginName
,
nil
)
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
pluginName
,
nettest
.
NewFakeHost
(
nil
))
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
pluginName
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
err
=
plug
.
SetUpPod
(
"podNamespace"
,
"podName"
,
kubecontainer
.
ContainerID
{
Type
:
"docker"
,
ID
:
"dockerid2345"
})
err
=
plug
.
SetUpPod
(
"podNamespace"
,
"podName"
,
kubecontainer
.
ContainerID
{
Type
:
"docker"
,
ID
:
"dockerid2345"
})
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -251,7 +252,7 @@ func TestPluginTearDownHook(t *testing.T) {
...
@@ -251,7 +252,7 @@ func TestPluginTearDownHook(t *testing.T) {
installPluginUnderTest
(
t
,
""
,
testPluginPath
,
pluginName
,
nil
)
installPluginUnderTest
(
t
,
""
,
testPluginPath
,
pluginName
,
nil
)
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
pluginName
,
nettest
.
NewFakeHost
(
nil
))
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
pluginName
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
err
=
plug
.
TearDownPod
(
"podNamespace"
,
"podName"
,
kubecontainer
.
ContainerID
{
Type
:
"docker"
,
ID
:
"dockerid2345"
})
err
=
plug
.
TearDownPod
(
"podNamespace"
,
"podName"
,
kubecontainer
.
ContainerID
{
Type
:
"docker"
,
ID
:
"dockerid2345"
})
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -279,7 +280,7 @@ func TestPluginStatusHook(t *testing.T) {
...
@@ -279,7 +280,7 @@ func TestPluginStatusHook(t *testing.T) {
installPluginUnderTest
(
t
,
""
,
testPluginPath
,
pluginName
,
nil
)
installPluginUnderTest
(
t
,
""
,
testPluginPath
,
pluginName
,
nil
)
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
pluginName
,
nettest
.
NewFakeHost
(
nil
))
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
pluginName
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
ip
,
err
:=
plug
.
GetPodNetworkStatus
(
"namespace"
,
"name"
,
kubecontainer
.
ContainerID
{
Type
:
"docker"
,
ID
:
"dockerid2345"
})
ip
,
err
:=
plug
.
GetPodNetworkStatus
(
"namespace"
,
"name"
,
kubecontainer
.
ContainerID
{
Type
:
"docker"
,
ID
:
"dockerid2345"
})
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -315,7 +316,7 @@ func TestPluginStatusHookIPv6(t *testing.T) {
...
@@ -315,7 +316,7 @@ func TestPluginStatusHookIPv6(t *testing.T) {
}
}
installPluginUnderTest
(
t
,
""
,
testPluginPath
,
pluginName
,
execTemplate
)
installPluginUnderTest
(
t
,
""
,
testPluginPath
,
pluginName
,
execTemplate
)
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
pluginName
,
nettest
.
NewFakeHost
(
nil
))
plug
,
err
:=
network
.
InitNetworkPlugin
(
ProbeNetworkPlugins
(
testPluginPath
),
pluginName
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Errorf
(
"InitNetworkPlugin() failed: %v"
,
err
)
t
.
Errorf
(
"InitNetworkPlugin() failed: %v"
,
err
)
}
}
...
...
pkg/kubelet/network/kubenet/kubenet_linux.go
View file @
b749902b
...
@@ -22,6 +22,7 @@ import (
...
@@ -22,6 +22,7 @@ import (
"fmt"
"fmt"
"net"
"net"
"strings"
"sync"
"sync"
"syscall"
"syscall"
"time"
"time"
...
@@ -31,6 +32,7 @@ import (
...
@@ -31,6 +32,7 @@ import (
"github.com/appc/cni/libcni"
"github.com/appc/cni/libcni"
"github.com/golang/glog"
"github.com/golang/glog"
"k8s.io/kubernetes/pkg/apis/componentconfig"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/kubelet/dockertools"
"k8s.io/kubernetes/pkg/kubelet/dockertools"
"k8s.io/kubernetes/pkg/kubelet/network"
"k8s.io/kubernetes/pkg/kubelet/network"
...
@@ -38,7 +40,6 @@ import (
...
@@ -38,7 +40,6 @@ import (
utilexec
"k8s.io/kubernetes/pkg/util/exec"
utilexec
"k8s.io/kubernetes/pkg/util/exec"
utilsets
"k8s.io/kubernetes/pkg/util/sets"
utilsets
"k8s.io/kubernetes/pkg/util/sets"
utilsysctl
"k8s.io/kubernetes/pkg/util/sysctl"
utilsysctl
"k8s.io/kubernetes/pkg/util/sysctl"
"strings"
)
)
const
(
const
(
...
@@ -61,6 +62,7 @@ type kubenetNetworkPlugin struct {
...
@@ -61,6 +62,7 @@ type kubenetNetworkPlugin struct {
mu
sync
.
Mutex
//Mutex for protecting podCIDRs map and netConfig
mu
sync
.
Mutex
//Mutex for protecting podCIDRs map and netConfig
execer
utilexec
.
Interface
execer
utilexec
.
Interface
nsenterPath
string
nsenterPath
string
hairpinMode
componentconfig
.
HairpinMode
}
}
func
NewPlugin
()
network
.
NetworkPlugin
{
func
NewPlugin
()
network
.
NetworkPlugin
{
...
@@ -71,8 +73,9 @@ func NewPlugin() network.NetworkPlugin {
...
@@ -71,8 +73,9 @@ func NewPlugin() network.NetworkPlugin {
}
}
}
}
func
(
plugin
*
kubenetNetworkPlugin
)
Init
(
host
network
.
Host
)
error
{
func
(
plugin
*
kubenetNetworkPlugin
)
Init
(
host
network
.
Host
,
hairpinMode
componentconfig
.
HairpinMode
)
error
{
plugin
.
host
=
host
plugin
.
host
=
host
plugin
.
hairpinMode
=
hairpinMode
plugin
.
cniConfig
=
&
libcni
.
CNIConfig
{
plugin
.
cniConfig
=
&
libcni
.
CNIConfig
{
Path
:
[]
string
{
DefaultCNIDir
},
Path
:
[]
string
{
DefaultCNIDir
},
}
}
...
@@ -281,6 +284,19 @@ func (plugin *kubenetNetworkPlugin) SetUpPod(namespace string, name string, id k
...
@@ -281,6 +284,19 @@ func (plugin *kubenetNetworkPlugin) SetUpPod(namespace string, name string, id k
return
err
return
err
}
}
// Put the container bridge into promiscuous mode to force it to accept hairpin packets.
// TODO: Remove this once the kernel bug (#20096) is fixed.
// TODO: check and set promiscuous mode with netlink once vishvananda/netlink supports it
if
plugin
.
hairpinMode
==
componentconfig
.
PromiscuousBridge
{
output
,
err
:=
plugin
.
execer
.
Command
(
"ip"
,
"link"
,
"show"
,
"dev"
,
BridgeName
)
.
CombinedOutput
()
if
err
!=
nil
||
strings
.
Index
(
string
(
output
),
"PROMISC"
)
<
0
{
_
,
err
:=
plugin
.
execer
.
Command
(
"ip"
,
"link"
,
"set"
,
BridgeName
,
"promisc"
,
"on"
)
.
CombinedOutput
()
if
err
!=
nil
{
return
fmt
.
Errorf
(
"Error setting promiscuous mode on %s: %v"
,
BridgeName
,
err
)
}
}
}
// The first SetUpPod call creates the bridge; ensure shaping is enabled
// The first SetUpPod call creates the bridge; ensure shaping is enabled
if
plugin
.
shaper
==
nil
{
if
plugin
.
shaper
==
nil
{
plugin
.
shaper
=
bandwidth
.
NewTCShaper
(
BridgeName
)
plugin
.
shaper
=
bandwidth
.
NewTCShaper
(
BridgeName
)
...
...
pkg/kubelet/network/kubenet/kubenet_unsupported.go
View file @
b749902b
...
@@ -21,6 +21,7 @@ package kubenet
...
@@ -21,6 +21,7 @@ package kubenet
import
(
import
(
"fmt"
"fmt"
"k8s.io/kubernetes/pkg/apis/componentconfig"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/kubelet/network"
"k8s.io/kubernetes/pkg/kubelet/network"
)
)
...
@@ -33,7 +34,7 @@ func NewPlugin() network.NetworkPlugin {
...
@@ -33,7 +34,7 @@ func NewPlugin() network.NetworkPlugin {
return
&
kubenetNetworkPlugin
{}
return
&
kubenetNetworkPlugin
{}
}
}
func
(
plugin
*
kubenetNetworkPlugin
)
Init
(
host
network
.
Host
)
error
{
func
(
plugin
*
kubenetNetworkPlugin
)
Init
(
host
network
.
Host
,
hairpinMode
componentconfig
.
HairpinMode
)
error
{
return
fmt
.
Errorf
(
"Kubenet is not supported in this build"
)
return
fmt
.
Errorf
(
"Kubenet is not supported in this build"
)
}
}
...
...
pkg/kubelet/network/plugins.go
View file @
b749902b
...
@@ -26,6 +26,7 @@ import (
...
@@ -26,6 +26,7 @@ import (
"github.com/golang/glog"
"github.com/golang/glog"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apis/componentconfig"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
kubecontainer
"k8s.io/kubernetes/pkg/kubelet/container"
utilerrors
"k8s.io/kubernetes/pkg/util/errors"
utilerrors
"k8s.io/kubernetes/pkg/util/errors"
utilexec
"k8s.io/kubernetes/pkg/util/exec"
utilexec
"k8s.io/kubernetes/pkg/util/exec"
...
@@ -51,7 +52,7 @@ const (
...
@@ -51,7 +52,7 @@ const (
type
NetworkPlugin
interface
{
type
NetworkPlugin
interface
{
// Init initializes the plugin. This will be called exactly once
// Init initializes the plugin. This will be called exactly once
// before any other methods are called.
// before any other methods are called.
Init
(
host
Host
)
error
Init
(
host
Host
,
hairpinMode
componentconfig
.
HairpinMode
)
error
// Called on various events like:
// Called on various events like:
// NET_PLUGIN_EVENT_POD_CIDR_CHANGE
// NET_PLUGIN_EVENT_POD_CIDR_CHANGE
...
@@ -104,11 +105,11 @@ type Host interface {
...
@@ -104,11 +105,11 @@ type Host interface {
}
}
// InitNetworkPlugin inits the plugin that matches networkPluginName. Plugins must have unique names.
// InitNetworkPlugin inits the plugin that matches networkPluginName. Plugins must have unique names.
func
InitNetworkPlugin
(
plugins
[]
NetworkPlugin
,
networkPluginName
string
,
host
Host
)
(
NetworkPlugin
,
error
)
{
func
InitNetworkPlugin
(
plugins
[]
NetworkPlugin
,
networkPluginName
string
,
host
Host
,
hairpinMode
componentconfig
.
HairpinMode
)
(
NetworkPlugin
,
error
)
{
if
networkPluginName
==
""
{
if
networkPluginName
==
""
{
// default to the no_op plugin
// default to the no_op plugin
plug
:=
&
NoopNetworkPlugin
{}
plug
:=
&
NoopNetworkPlugin
{}
if
err
:=
plug
.
Init
(
host
);
err
!=
nil
{
if
err
:=
plug
.
Init
(
host
,
hairpinMode
);
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
return
plug
,
nil
return
plug
,
nil
...
@@ -133,7 +134,7 @@ func InitNetworkPlugin(plugins []NetworkPlugin, networkPluginName string, host H
...
@@ -133,7 +134,7 @@ func InitNetworkPlugin(plugins []NetworkPlugin, networkPluginName string, host H
chosenPlugin
:=
pluginMap
[
networkPluginName
]
chosenPlugin
:=
pluginMap
[
networkPluginName
]
if
chosenPlugin
!=
nil
{
if
chosenPlugin
!=
nil
{
err
:=
chosenPlugin
.
Init
(
host
)
err
:=
chosenPlugin
.
Init
(
host
,
hairpinMode
)
if
err
!=
nil
{
if
err
!=
nil
{
allErrs
=
append
(
allErrs
,
fmt
.
Errorf
(
"Network plugin %q failed init: %v"
,
networkPluginName
,
err
))
allErrs
=
append
(
allErrs
,
fmt
.
Errorf
(
"Network plugin %q failed init: %v"
,
networkPluginName
,
err
))
}
else
{
}
else
{
...
@@ -155,7 +156,7 @@ type NoopNetworkPlugin struct {
...
@@ -155,7 +156,7 @@ type NoopNetworkPlugin struct {
const
sysctlBridgeCallIptables
=
"net/bridge/bridge-nf-call-iptables"
const
sysctlBridgeCallIptables
=
"net/bridge/bridge-nf-call-iptables"
func
(
plugin
*
NoopNetworkPlugin
)
Init
(
host
Host
)
error
{
func
(
plugin
*
NoopNetworkPlugin
)
Init
(
host
Host
,
hairpinMode
componentconfig
.
HairpinMode
)
error
{
// Set bridge-nf-call-iptables=1 to maintain compatibility with older
// Set bridge-nf-call-iptables=1 to maintain compatibility with older
// kubernetes versions to ensure the iptables-based kube proxy functions
// kubernetes versions to ensure the iptables-based kube proxy functions
// correctly. Other plugins are responsible for setting this correctly
// correctly. Other plugins are responsible for setting this correctly
...
...
pkg/kubelet/network/plugins_test.go
View file @
b749902b
...
@@ -19,12 +19,13 @@ package network
...
@@ -19,12 +19,13 @@ package network
import
(
import
(
"testing"
"testing"
"k8s.io/kubernetes/pkg/apis/componentconfig"
nettest
"k8s.io/kubernetes/pkg/kubelet/network/testing"
nettest
"k8s.io/kubernetes/pkg/kubelet/network/testing"
)
)
func
TestSelectDefaultPlugin
(
t
*
testing
.
T
)
{
func
TestSelectDefaultPlugin
(
t
*
testing
.
T
)
{
all_plugins
:=
[]
NetworkPlugin
{}
all_plugins
:=
[]
NetworkPlugin
{}
plug
,
err
:=
InitNetworkPlugin
(
all_plugins
,
""
,
nettest
.
NewFakeHost
(
nil
))
plug
,
err
:=
InitNetworkPlugin
(
all_plugins
,
""
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatalf
(
"Unexpected error in selecting default plugin: %v"
,
err
)
t
.
Fatalf
(
"Unexpected error in selecting default plugin: %v"
,
err
)
}
}
...
...
pkg/kubelet/runonce_test.go
View file @
b749902b
...
@@ -24,6 +24,7 @@ import (
...
@@ -24,6 +24,7 @@ import (
cadvisorapi
"github.com/google/cadvisor/info/v1"
cadvisorapi
"github.com/google/cadvisor/info/v1"
cadvisorapiv2
"github.com/google/cadvisor/info/v2"
cadvisorapiv2
"github.com/google/cadvisor/info/v2"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/apis/componentconfig"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
"k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/client/record"
cadvisortest
"k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
cadvisortest
"k8s.io/kubernetes/pkg/kubelet/cadvisor/testing"
...
@@ -78,7 +79,7 @@ func TestRunOnce(t *testing.T) {
...
@@ -78,7 +79,7 @@ func TestRunOnce(t *testing.T) {
}
}
kb
.
containerManager
=
cm
.
NewStubContainerManager
()
kb
.
containerManager
=
cm
.
NewStubContainerManager
()
kb
.
networkPlugin
,
_
=
network
.
InitNetworkPlugin
([]
network
.
NetworkPlugin
{},
""
,
nettest
.
NewFakeHost
(
nil
))
kb
.
networkPlugin
,
_
=
network
.
InitNetworkPlugin
([]
network
.
NetworkPlugin
{},
""
,
nettest
.
NewFakeHost
(
nil
)
,
componentconfig
.
HairpinNone
)
if
err
:=
kb
.
setupDataDirs
();
err
!=
nil
{
if
err
:=
kb
.
setupDataDirs
();
err
!=
nil
{
t
.
Errorf
(
"Failed to init data dirs: %v"
,
err
)
t
.
Errorf
(
"Failed to init data dirs: %v"
,
err
)
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment