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
876c7302
Commit
876c7302
authored
Oct 17, 2017
by
m1093782566
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
migrate ip cmd to netlink
parent
fa941058
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
13 additions
and
106 deletions
+13
-106
server.go
cmd/kube-proxy/app/server.go
+1
-1
server_others.go
cmd/kube-proxy/app/server_others.go
+2
-2
BUILD
pkg/proxy/ipvs/BUILD
+3
-1
netlink_linux.go
pkg/proxy/ipvs/netlink_linux.go
+3
-1
proxier.go
pkg/proxy/ipvs/proxier.go
+4
-29
proxier_test.go
pkg/proxy/ipvs/proxier_test.go
+0
-72
No files found.
cmd/kube-proxy/app/server.go
View file @
876c7302
...
...
@@ -429,7 +429,7 @@ func (s *ProxyServer) Run() error {
if
s
.
CleanupAndExit
{
encounteredError
:=
userspace
.
CleanupLeftovers
(
s
.
IptInterface
)
encounteredError
=
iptables
.
CleanupLeftovers
(
s
.
IptInterface
)
||
encounteredError
encounteredError
=
ipvs
.
CleanupLeftovers
(
s
.
execer
,
s
.
IpvsInterface
,
s
.
IptInterface
)
||
encounteredError
encounteredError
=
ipvs
.
CleanupLeftovers
(
s
.
IpvsInterface
,
s
.
IptInterface
)
||
encounteredError
if
encounteredError
{
return
errors
.
New
(
"encountered an error while tearing down rules."
)
}
...
...
cmd/kube-proxy/app/server_others.go
View file @
876c7302
...
...
@@ -153,7 +153,7 @@ func NewProxyServer(config *componentconfig.KubeProxyConfiguration, cleanupAndEx
userspace
.
CleanupLeftovers
(
iptInterface
)
// IPVS Proxier will generate some iptables rules,
// need to clean them before switching to other proxy mode.
ipvs
.
CleanupLeftovers
(
execer
,
ipvsInterface
,
iptInterface
)
ipvs
.
CleanupLeftovers
(
ipvsInterface
,
iptInterface
)
}
else
if
proxyMode
==
proxyModeIPVS
{
glog
.
V
(
0
)
.
Info
(
"Using ipvs Proxier."
)
proxierIPVS
,
err
:=
ipvs
.
NewProxier
(
...
...
@@ -213,7 +213,7 @@ func NewProxyServer(config *componentconfig.KubeProxyConfiguration, cleanupAndEx
iptables
.
CleanupLeftovers
(
iptInterface
)
// IPVS Proxier will generate some iptables rules,
// need to clean them before switching to other proxy mode.
ipvs
.
CleanupLeftovers
(
execer
,
ipvsInterface
,
iptInterface
)
ipvs
.
CleanupLeftovers
(
ipvsInterface
,
iptInterface
)
}
iptInterface
.
AddReloadFunc
(
proxier
.
Sync
)
...
...
pkg/proxy/ipvs/BUILD
View file @
876c7302
...
...
@@ -8,7 +8,9 @@ load(
go_test(
name = "go_default_test",
srcs = ["proxier_test.go"],
srcs = [
"proxier_test.go",
],
importpath = "k8s.io/kubernetes/pkg/proxy/ipvs",
library = ":go_default_library",
deps = [
...
...
pkg/proxy/ipvs/netlink_linux.go
View file @
876c7302
...
...
@@ -78,7 +78,9 @@ func (h *netlinkHandle) EnsureDummyDevice(devName string) (bool, error) {
// found dummy device
return
true
,
nil
}
dummy
:=
&
netlink
.
Dummy
{
netlink
.
LinkAttrs
{
Name
:
devName
}}
dummy
:=
&
netlink
.
Dummy
{
LinkAttrs
:
netlink
.
LinkAttrs
{
Name
:
devName
},
}
return
false
,
h
.
LinkAdd
(
dummy
)
}
...
...
pkg/proxy/ipvs/proxier.go
View file @
876c7302
...
...
@@ -738,7 +738,7 @@ func cleanupIptablesLeftovers(ipt utiliptables.Interface) (encounteredError bool
}
// CleanupLeftovers clean up all ipvs and iptables rules created by ipvs Proxier.
func
CleanupLeftovers
(
execer
utilexec
.
Interface
,
ipvs
utilipvs
.
Interface
,
ipt
utiliptables
.
Interface
)
(
encounteredError
bool
)
{
func
CleanupLeftovers
(
ipvs
utilipvs
.
Interface
,
ipt
utiliptables
.
Interface
)
(
encounteredError
bool
)
{
// Return immediately when ipvs interface is nil - Probably initialization failed in somewhere.
if
ipvs
==
nil
{
return
true
...
...
@@ -751,7 +751,8 @@ func CleanupLeftovers(execer utilexec.Interface, ipvs utilipvs.Interface, ipt ut
encounteredError
=
true
}
// Delete dummy interface created by ipvs Proxier.
err
=
deleteDummyDevice
(
execer
,
DefaultDummyDevice
)
nl
:=
NewNetLinkHandle
()
err
=
nl
.
DeleteDummyDevice
(
DefaultDummyDevice
)
if
err
!=
nil
{
encounteredError
=
true
}
...
...
@@ -945,7 +946,7 @@ func (proxier *Proxier) syncProxyRules() {
// End install iptables
// make sure dummy interface exists in the system where ipvs Proxier will bind service address on it
_
,
err
=
ensureDummyDevice
(
proxier
.
exec
,
DefaultDummyDevice
)
_
,
err
=
proxier
.
netlinkHandle
.
EnsureDummyDevice
(
DefaultDummyDevice
)
if
err
!=
nil
{
glog
.
Errorf
(
"Failed to create dummy interface: %s, error: %v"
,
DefaultDummyDevice
,
err
)
return
...
...
@@ -1520,32 +1521,6 @@ func openLocalPort(lp *utilproxy.LocalPort) (utilproxy.Closeable, error) {
return
socket
,
nil
}
const
cmdIP
=
"ip"
func
ensureDummyDevice
(
execer
utilexec
.
Interface
,
dummyDev
string
)
(
exist
bool
,
err
error
)
{
args
:=
[]
string
{
"link"
,
"add"
,
dummyDev
,
"type"
,
"dummy"
}
out
,
err
:=
execer
.
Command
(
cmdIP
,
args
...
)
.
CombinedOutput
()
if
err
!=
nil
{
// "exit status code 2" will be returned if the device already exists
if
ee
,
ok
:=
err
.
(
utilexec
.
ExitError
);
ok
{
if
ee
.
Exited
()
&&
ee
.
ExitStatus
()
==
2
{
return
true
,
nil
}
}
return
false
,
fmt
.
Errorf
(
"error creating dummy interface %q: %v: %s"
,
dummyDev
,
err
,
out
)
}
return
false
,
nil
}
func
deleteDummyDevice
(
execer
utilexec
.
Interface
,
dummyDev
string
)
error
{
args
:=
[]
string
{
"link"
,
"del"
,
dummyDev
}
out
,
err
:=
execer
.
Command
(
cmdIP
,
args
...
)
.
CombinedOutput
()
if
err
!=
nil
{
return
fmt
.
Errorf
(
"error deleting dummy interface %q: %v: %s"
,
dummyDev
,
err
,
out
)
}
return
nil
}
// ipvs Proxier fall back on iptables when it needs to do SNAT for engress packets
// It will only operate iptables *nat table.
// Create and link the kube postrouting chain for SNAT packets.
...
...
pkg/proxy/ipvs/proxier_test.go
View file @
876c7302
...
...
@@ -2213,75 +2213,3 @@ func Test_endpointsToEndpointsMap(t *testing.T) {
}
}
}
func
Test_ensureDummyDevice
(
t
*
testing
.
T
)
{
fcmd
:=
fakeexec
.
FakeCmd
{
CombinedOutputScript
:
[]
fakeexec
.
FakeCombinedOutputAction
{
// Success.
func
()
([]
byte
,
error
)
{
return
[]
byte
{},
nil
},
// Exists.
func
()
([]
byte
,
error
)
{
return
nil
,
&
fakeexec
.
FakeExitError
{
Status
:
2
}
},
},
}
fexec
:=
fakeexec
.
FakeExec
{
CommandScript
:
[]
fakeexec
.
FakeCommandAction
{
func
(
cmd
string
,
args
...
string
)
exec
.
Cmd
{
return
fakeexec
.
InitFakeCmd
(
&
fcmd
,
cmd
,
args
...
)
},
func
(
cmd
string
,
args
...
string
)
exec
.
Cmd
{
return
fakeexec
.
InitFakeCmd
(
&
fcmd
,
cmd
,
args
...
)
},
},
}
// Success.
exists
,
err
:=
ensureDummyDevice
(
&
fexec
,
DefaultDummyDevice
)
if
err
!=
nil
{
t
.
Errorf
(
"expected success, got %v"
,
err
)
}
if
exists
{
t
.
Errorf
(
"expected exists = false"
)
}
if
fcmd
.
CombinedOutputCalls
!=
1
{
t
.
Errorf
(
"expected 1 CombinedOutput() calls, got %d"
,
fcmd
.
CombinedOutputCalls
)
}
if
!
sets
.
NewString
(
fcmd
.
CombinedOutputLog
[
0
]
...
)
.
HasAll
(
"ip"
,
"link"
,
"add"
,
"kube-ipvs0"
,
"type"
,
"dummy"
)
{
t
.
Errorf
(
"wrong CombinedOutput() log, got %s"
,
fcmd
.
CombinedOutputLog
[
0
])
}
// Exists.
exists
,
err
=
ensureDummyDevice
(
&
fexec
,
DefaultDummyDevice
)
if
err
!=
nil
{
t
.
Errorf
(
"expected success, got %v"
,
err
)
}
if
!
exists
{
t
.
Errorf
(
"expected exists = true"
)
}
}
func
Test_deleteDummyDevice
(
t
*
testing
.
T
)
{
fcmd
:=
fakeexec
.
FakeCmd
{
CombinedOutputScript
:
[]
fakeexec
.
FakeCombinedOutputAction
{
// Success.
func
()
([]
byte
,
error
)
{
return
[]
byte
{},
nil
},
// Failure.
func
()
([]
byte
,
error
)
{
return
nil
,
&
fakeexec
.
FakeExitError
{
Status
:
1
}
},
},
}
fexec
:=
fakeexec
.
FakeExec
{
CommandScript
:
[]
fakeexec
.
FakeCommandAction
{
func
(
cmd
string
,
args
...
string
)
exec
.
Cmd
{
return
fakeexec
.
InitFakeCmd
(
&
fcmd
,
cmd
,
args
...
)
},
func
(
cmd
string
,
args
...
string
)
exec
.
Cmd
{
return
fakeexec
.
InitFakeCmd
(
&
fcmd
,
cmd
,
args
...
)
},
},
}
// Success.
err
:=
deleteDummyDevice
(
&
fexec
,
DefaultDummyDevice
)
if
err
!=
nil
{
t
.
Errorf
(
"expected success, got %v"
,
err
)
}
if
fcmd
.
CombinedOutputCalls
!=
1
{
t
.
Errorf
(
"expected 1 CombinedOutput() calls, got %d"
,
fcmd
.
CombinedOutputCalls
)
}
if
!
sets
.
NewString
(
fcmd
.
CombinedOutputLog
[
0
]
...
)
.
HasAll
(
"ip"
,
"link"
,
"del"
,
"kube-ipvs0"
)
{
t
.
Errorf
(
"wrong CombinedOutput() log, got %s"
,
fcmd
.
CombinedOutputLog
[
0
])
}
// Failure.
err
=
deleteDummyDevice
(
&
fexec
,
DefaultDummyDevice
)
if
err
==
nil
{
t
.
Errorf
(
"expected failure"
)
}
}
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