Skip to content

Commit dbb5438

Browse files
author
Lion-Wei
committed
fix kube-proxy cleanup
1 parent e2a7bd5 commit dbb5438

File tree

2 files changed

+34
-26
lines changed

2 files changed

+34
-26
lines changed

cmd/kube-proxy/app/server.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -801,11 +801,20 @@ func getConntrackMax(config kubeproxyconfig.KubeProxyConntrackConfiguration) (in
801801
return 0, nil
802802
}
803803

804-
// CleanupAndExit remove iptables rules and exit if success return nil
804+
// CleanupAndExit remove iptables rules and ipset/ipvs rules in ipvs proxy mode
805+
// and exit if success return nil
805806
func (s *ProxyServer) CleanupAndExit() error {
806-
encounteredError := userspace.CleanupLeftovers(s.IptInterface)
807-
encounteredError = iptables.CleanupLeftovers(s.IptInterface) || encounteredError
808-
encounteredError = ipvs.CleanupLeftovers(s.IpvsInterface, s.IptInterface, s.IpsetInterface, s.CleanupIPVS) || encounteredError
807+
// cleanup IPv6 and IPv4 iptables rules
808+
ipts := []utiliptables.Interface{
809+
utiliptables.New(s.execer, utiliptables.ProtocolIPv4),
810+
utiliptables.New(s.execer, utiliptables.ProtocolIPv6),
811+
}
812+
var encounteredError bool
813+
for _, ipt := range ipts {
814+
encounteredError = userspace.CleanupLeftovers(ipt) || encounteredError
815+
encounteredError = iptables.CleanupLeftovers(ipt) || encounteredError
816+
encounteredError = ipvs.CleanupLeftovers(s.IpvsInterface, ipt, s.IpsetInterface, s.CleanupIPVS) || encounteredError
817+
}
809818
if encounteredError {
810819
return errors.New("encountered an error while tearing down rules")
811820
}

cmd/kube-proxy/app/server_others.go

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -91,26 +91,6 @@ func newProxyServer(
9191
return nil, fmt.Errorf("unable to register configz: %s", err)
9292
}
9393

94-
hostname, err := utilnode.GetHostname(config.HostnameOverride)
95-
if err != nil {
96-
return nil, err
97-
}
98-
99-
client, eventClient, err := createClients(config.ClientConnection, master)
100-
if err != nil {
101-
return nil, err
102-
}
103-
104-
nodeIP := detectNodeIP(client, hostname, config.BindAddress)
105-
106-
protocol := utiliptables.ProtocolIPv4
107-
if utilsnet.IsIPv6(nodeIP) {
108-
klog.V(0).Infof("kube-proxy node IP is an IPv6 address (%s), assume IPv6 operation", nodeIP.String())
109-
protocol = utiliptables.ProtocolIPv6
110-
} else {
111-
klog.V(0).Infof("kube-proxy node IP is an IPv4 address (%s), assume IPv4 operation", nodeIP.String())
112-
}
113-
11494
var iptInterface utiliptables.Interface
11595
var ipvsInterface utilipvs.Interface
11696
var kernelHandler ipvs.KernelHandler
@@ -119,7 +99,6 @@ func newProxyServer(
11999
// Create a iptables utils.
120100
execer := exec.New()
121101

122-
iptInterface = utiliptables.New(execer, protocol)
123102
kernelHandler = ipvs.NewLinuxKernelHandler()
124103
ipsetInterface = utilipset.New(execer)
125104
canUseIPVS, err := ipvs.CanUseIPVSProxier(kernelHandler, ipsetInterface)
@@ -135,7 +114,6 @@ func newProxyServer(
135114
if cleanupAndExit {
136115
return &ProxyServer{
137116
execer: execer,
138-
IptInterface: iptInterface,
139117
IpvsInterface: ipvsInterface,
140118
IpsetInterface: ipsetInterface,
141119
}, nil
@@ -145,6 +123,27 @@ func newProxyServer(
145123
metrics.SetShowHidden()
146124
}
147125

126+
hostname, err := utilnode.GetHostname(config.HostnameOverride)
127+
if err != nil {
128+
return nil, err
129+
}
130+
131+
client, eventClient, err := createClients(config.ClientConnection, master)
132+
if err != nil {
133+
return nil, err
134+
}
135+
136+
nodeIP := detectNodeIP(client, hostname, config.BindAddress)
137+
protocol := utiliptables.ProtocolIPv4
138+
if utilsnet.IsIPv6(nodeIP) {
139+
klog.V(0).Infof("kube-proxy node IP is an IPv6 address (%s), assume IPv6 operation", nodeIP.String())
140+
protocol = utiliptables.ProtocolIPv6
141+
} else {
142+
klog.V(0).Infof("kube-proxy node IP is an IPv4 address (%s), assume IPv4 operation", nodeIP.String())
143+
}
144+
145+
iptInterface = utiliptables.New(execer, protocol)
146+
148147
// Create event recorder
149148
eventBroadcaster := record.NewBroadcaster()
150149
recorder := eventBroadcaster.NewRecorder(proxyconfigscheme.Scheme, v1.EventSource{Component: "kube-proxy", Host: hostname})

0 commit comments

Comments
 (0)