mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Merge pull request #76732 from JieJhih/proxy/server
os exit when option is true
This commit is contained in:
		@@ -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.
 | 
			
		||||
@@ -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()
 | 
			
		||||
}
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -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
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -102,7 +102,6 @@ func newProxyServer(
 | 
			
		||||
			IptInterface:   iptInterface,
 | 
			
		||||
			IpvsInterface:  ipvsInterface,
 | 
			
		||||
			IpsetInterface: ipsetInterface,
 | 
			
		||||
			CleanupAndExit: cleanupAndExit,
 | 
			
		||||
		}, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -17,6 +17,7 @@ limitations under the License.
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"os"
 | 
			
		||||
@@ -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)
 | 
			
		||||
@@ -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.
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -24,6 +24,7 @@ import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net"
 | 
			
		||||
 | 
			
		||||
	// Enable pprof HTTP handlers.
 | 
			
		||||
	_ "net/http/pprof"
 | 
			
		||||
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user