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
3fdc343a
Commit
3fdc343a
authored
Nov 15, 2016
by
Mandar U Jog
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Handle Empty clusterCIDR
Empty clusterCIDR causes invalid rules generation. Fixes issue #36652
parent
d60d9f32
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
32 additions
and
3 deletions
+32
-3
proxier.go
pkg/proxy/iptables/proxier.go
+11
-3
proxier_test.go
pkg/proxy/iptables/proxier_test.go
+21
-0
No files found.
pkg/proxy/iptables/proxier.go
View file @
3fdc343a
...
...
@@ -250,6 +250,10 @@ func NewProxier(ipt utiliptables.Interface, sysctl utilsysctl.Interface, exec ut
nodeIP
=
net
.
ParseIP
(
"127.0.0.1"
)
}
if
len
(
clusterCIDR
)
==
0
{
glog
.
Warningf
(
"clusterCIDR not specified, unable to distinguish between internal and external traffic"
)
}
go
healthcheck
.
Run
()
var
throttle
flowcontrol
.
RateLimiter
...
...
@@ -1221,13 +1225,17 @@ func (proxier *Proxier) syncProxyRules() {
}
// First rule in the chain redirects all pod -> external vip traffic to the
// Service's ClusterIP instead. This happens whether or not we have local
// endpoints.
// endpoints; only if clusterCIDR is specified
if
len
(
proxier
.
clusterCIDR
)
>
0
{
args
=
[]
string
{
"-A"
,
string
(
svcXlbChain
),
"-m"
,
"comment"
,
"--comment"
,
fmt
.
Sprintf
(
`"Redirect pods trying to reach external loadbalancer VIP to clusterIP"`
),
"-s"
,
proxier
.
clusterCIDR
,
"-j"
,
string
(
svcChain
),
}
writeLine
(
natRules
,
args
...
)
}
writeLine
(
natRules
,
append
(
args
,
"-s"
,
proxier
.
clusterCIDR
,
"-j"
,
string
(
svcChain
))
...
)
numLocalEndpoints
:=
len
(
localEndpointChains
)
if
numLocalEndpoints
==
0
{
...
...
@@ -1300,7 +1308,7 @@ func (proxier *Proxier) syncProxyRules() {
glog
.
V
(
3
)
.
Infof
(
"Restoring iptables rules: %s"
,
lines
)
err
=
proxier
.
iptables
.
RestoreAll
(
lines
,
utiliptables
.
NoFlushTables
,
utiliptables
.
RestoreCounters
)
if
err
!=
nil
{
glog
.
Errorf
(
"Failed to execute iptables-restore: %v
"
,
err
)
glog
.
Errorf
(
"Failed to execute iptables-restore: %v
\n
Rules:
\n
%s"
,
err
,
lines
)
// Revert new local ports.
revertPorts
(
replacementPortsMap
,
proxier
.
portsMap
)
return
...
...
pkg/proxy/iptables/proxier_test.go
View file @
3fdc343a
...
...
@@ -696,9 +696,22 @@ func TestOnlyLocalLoadBalancing(t *testing.T) {
}
}
func
TestOnlyLocalNodePortsNoClusterCIDR
(
t
*
testing
.
T
)
{
ipt
:=
iptablestest
.
NewFake
()
fp
:=
NewFakeProxier
(
ipt
)
// set cluster CIDR to empty before test
fp
.
clusterCIDR
=
""
onlyLocalNodePorts
(
t
,
fp
,
ipt
)
}
func
TestOnlyLocalNodePorts
(
t
*
testing
.
T
)
{
ipt
:=
iptablestest
.
NewFake
()
fp
:=
NewFakeProxier
(
ipt
)
onlyLocalNodePorts
(
t
,
fp
,
ipt
)
}
func
onlyLocalNodePorts
(
t
*
testing
.
T
,
fp
*
Proxier
,
ipt
*
iptablestest
.
FakeIPTables
)
{
shouldLBTOSVCRuleExist
:=
len
(
fp
.
clusterCIDR
)
>
0
svcName
:=
"svc1"
svcIP
:=
net
.
IPv4
(
10
,
20
,
30
,
41
)
...
...
@@ -724,10 +737,18 @@ func TestOnlyLocalNodePorts(t *testing.T) {
errorf
(
fmt
.
Sprintf
(
"Failed to find jump to lb chain %v"
,
lbChain
),
kubeNodePortRules
,
t
)
}
svcChain
:=
string
(
servicePortChainName
(
svc
,
strings
.
ToLower
(
string
(
api
.
ProtocolTCP
))))
lbRules
:=
ipt
.
GetRules
(
lbChain
)
if
hasJump
(
lbRules
,
nonLocalEpChain
,
""
,
""
)
{
errorf
(
fmt
.
Sprintf
(
"Found jump from lb chain %v to non-local ep %v"
,
lbChain
,
nonLocalEp
),
lbRules
,
t
)
}
if
hasJump
(
lbRules
,
svcChain
,
""
,
""
)
!=
shouldLBTOSVCRuleExist
{
prefix
:=
"Did not find "
if
!
shouldLBTOSVCRuleExist
{
prefix
=
"Found "
}
errorf
(
fmt
.
Sprintf
(
"%s jump from lb chain %v to svc %v"
,
prefix
,
lbChain
,
svcChain
),
lbRules
,
t
)
}
if
!
hasJump
(
lbRules
,
localEpChain
,
""
,
""
)
{
errorf
(
fmt
.
Sprintf
(
"Didn't find jump from lb chain %v to local ep %v"
,
lbChain
,
nonLocalEp
),
lbRules
,
t
)
}
...
...
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