Skip to content

Commit

Permalink
Merge pull request kubernetes#76732 from JieJhih/proxy/server
Browse files Browse the repository at this point in the history
os exit when option is true
  • Loading branch information
k8s-ci-robot committed Apr 27, 2019
2 parents e5dd452 + 94731c5 commit a0b8d1c
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 14 deletions.
30 changes: 19 additions & 11 deletions cmd/kube-proxy/app/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ const (
// proxyRun defines the interface to run a specified ProxyServer
type proxyRun interface {
Run() error
CleanupAndExit() error
}

// Options contains everything necessary to create and run a proxy server.
Expand Down Expand Up @@ -308,6 +309,11 @@ func (o *Options) Run() error {
if err != nil {
return err
}

if o.CleanupAndExit {
return proxyServer.CleanupAndExit()
}

o.proxyServer = proxyServer
return o.runLoop()
}
Expand Down Expand Up @@ -475,7 +481,6 @@ type ProxyServer struct {
Conntracker Conntracker // if nil, ignored
ProxyMode string
NodeRef *v1.ObjectReference
CleanupAndExit bool
CleanupIPVS bool
MetricsBindAddress string
EnableProfiling bool
Expand Down Expand Up @@ -524,19 +529,10 @@ func createClients(config componentbaseconfig.ClientConnectionConfiguration, mas
}

// Run runs the specified ProxyServer. This should never exit (unless CleanupAndExit is set).
// TODO: At the moment, Run() cannot return a nil error, otherwise it's caller will never exit. Update callers of Run to handle nil errors.
func (s *ProxyServer) Run() error {
// To help debugging, immediately log version
klog.Infof("Version: %+v", version.Get())
// remove iptables rules and exit
if s.CleanupAndExit {
encounteredError := userspace.CleanupLeftovers(s.IptInterface)
encounteredError = iptables.CleanupLeftovers(s.IptInterface) || encounteredError
encounteredError = ipvs.CleanupLeftovers(s.IpvsInterface, s.IptInterface, s.IpsetInterface, s.CleanupIPVS) || encounteredError
if encounteredError {
return errors.New("encountered an error while tearing down rules")
}
return nil
}

// TODO(vmarmol): Use container config for this.
var oomAdjuster *oom.OOMAdjuster
Expand Down Expand Up @@ -682,3 +678,15 @@ func getConntrackMax(config kubeproxyconfig.KubeProxyConntrackConfiguration) (in
}
return 0, nil
}

// CleanupAndExit remove iptables rules and exit if success return nil
func (s *ProxyServer) CleanupAndExit() error {
encounteredError := userspace.CleanupLeftovers(s.IptInterface)
encounteredError = iptables.CleanupLeftovers(s.IptInterface) || encounteredError
encounteredError = ipvs.CleanupLeftovers(s.IpvsInterface, s.IptInterface, s.IpsetInterface, s.CleanupIPVS) || encounteredError
if encounteredError {
return errors.New("encountered an error while tearing down rules")
}

return nil
}
1 change: 0 additions & 1 deletion cmd/kube-proxy/app/server_others.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,6 @@ func newProxyServer(
IptInterface: iptInterface,
IpvsInterface: ipvsInterface,
IpsetInterface: ipsetInterface,
CleanupAndExit: cleanupAndExit,
}, nil
}

Expand Down
12 changes: 11 additions & 1 deletion cmd/kube-proxy/app/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ limitations under the License.
package app

import (
"errors"
"fmt"
"io/ioutil"
"os"
Expand Down Expand Up @@ -108,7 +109,6 @@ func TestProxyServerWithCleanupAndExit(t *testing.T) {
assert.Nil(t, err, "unexpected error in NewProxyServer, addr: %s", addr)
assert.NotNil(t, proxyserver, "nil proxy server obj, addr: %s", addr)
assert.NotNil(t, proxyserver.IptInterface, "nil iptables intf, addr: %s", addr)
assert.True(t, proxyserver.CleanupAndExit, "false CleanupAndExit, addr: %s", addr)

// Clean up config for next test case
configz.Delete(kubeproxyconfig.GroupName)
Expand Down Expand Up @@ -540,6 +540,11 @@ func (s *fakeProxyServerLongRun) Run() error {
}
}

// CleanupAndExit runs in the specified ProxyServer.
func (s *fakeProxyServerLongRun) CleanupAndExit() error {
return nil
}

type fakeProxyServerError struct{}

// Run runs the specified ProxyServer.
Expand All @@ -550,6 +555,11 @@ func (s *fakeProxyServerError) Run() error {
}
}

// CleanupAndExit runs in the specified ProxyServer.
func (s *fakeProxyServerError) CleanupAndExit() error {
return errors.New("mocking error from ProxyServer.CleanupAndExit()")
}

func TestAddressFromDeprecatedFlags(t *testing.T) {
testCases := []struct {
name string
Expand Down
3 changes: 2 additions & 1 deletion cmd/kube-proxy/app/server_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"errors"
"fmt"
"net"

// Enable pprof HTTP handlers.
_ "net/http/pprof"

Expand Down Expand Up @@ -63,7 +64,7 @@ func newProxyServer(config *proxyconfigapi.KubeProxyConfiguration, cleanupAndExi

// We omit creation of pretty much everything if we run in cleanup mode
if cleanupAndExit {
return &ProxyServer{CleanupAndExit: cleanupAndExit}, nil
return &ProxyServer{}, nil
}

client, eventClient, err := createClients(config.ClientConnection, master)
Expand Down

0 comments on commit a0b8d1c

Please sign in to comment.