mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 21:47:07 +00:00
Merge pull request #76732 from JieJhih/proxy/server
os exit when option is true
This commit is contained in:
commit
a0b8d1cbb8
@ -92,6 +92,7 @@ const (
|
|||||||
// proxyRun defines the interface to run a specified ProxyServer
|
// proxyRun defines the interface to run a specified ProxyServer
|
||||||
type proxyRun interface {
|
type proxyRun interface {
|
||||||
Run() error
|
Run() error
|
||||||
|
CleanupAndExit() error
|
||||||
}
|
}
|
||||||
|
|
||||||
// Options contains everything necessary to create and run a proxy server.
|
// Options contains everything necessary to create and run a proxy server.
|
||||||
@ -308,6 +309,11 @@ func (o *Options) Run() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if o.CleanupAndExit {
|
||||||
|
return proxyServer.CleanupAndExit()
|
||||||
|
}
|
||||||
|
|
||||||
o.proxyServer = proxyServer
|
o.proxyServer = proxyServer
|
||||||
return o.runLoop()
|
return o.runLoop()
|
||||||
}
|
}
|
||||||
@ -475,7 +481,6 @@ type ProxyServer struct {
|
|||||||
Conntracker Conntracker // if nil, ignored
|
Conntracker Conntracker // if nil, ignored
|
||||||
ProxyMode string
|
ProxyMode string
|
||||||
NodeRef *v1.ObjectReference
|
NodeRef *v1.ObjectReference
|
||||||
CleanupAndExit bool
|
|
||||||
CleanupIPVS bool
|
CleanupIPVS bool
|
||||||
MetricsBindAddress string
|
MetricsBindAddress string
|
||||||
EnableProfiling bool
|
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).
|
// 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 {
|
func (s *ProxyServer) Run() error {
|
||||||
// To help debugging, immediately log version
|
// To help debugging, immediately log version
|
||||||
klog.Infof("Version: %+v", version.Get())
|
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.
|
// TODO(vmarmol): Use container config for this.
|
||||||
var oomAdjuster *oom.OOMAdjuster
|
var oomAdjuster *oom.OOMAdjuster
|
||||||
@ -682,3 +678,15 @@ func getConntrackMax(config kubeproxyconfig.KubeProxyConntrackConfiguration) (in
|
|||||||
}
|
}
|
||||||
return 0, nil
|
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,
|
IptInterface: iptInterface,
|
||||||
IpvsInterface: ipvsInterface,
|
IpvsInterface: ipvsInterface,
|
||||||
IpsetInterface: ipsetInterface,
|
IpsetInterface: ipsetInterface,
|
||||||
CleanupAndExit: cleanupAndExit,
|
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ limitations under the License.
|
|||||||
package app
|
package app
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
@ -108,7 +109,6 @@ func TestProxyServerWithCleanupAndExit(t *testing.T) {
|
|||||||
assert.Nil(t, err, "unexpected error in NewProxyServer, addr: %s", addr)
|
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, "nil proxy server obj, addr: %s", addr)
|
||||||
assert.NotNil(t, proxyserver.IptInterface, "nil iptables intf, 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
|
// Clean up config for next test case
|
||||||
configz.Delete(kubeproxyconfig.GroupName)
|
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{}
|
type fakeProxyServerError struct{}
|
||||||
|
|
||||||
// Run runs the specified ProxyServer.
|
// 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) {
|
func TestAddressFromDeprecatedFlags(t *testing.T) {
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
|
@ -24,6 +24,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
// Enable pprof HTTP handlers.
|
// Enable pprof HTTP handlers.
|
||||||
_ "net/http/pprof"
|
_ "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
|
// We omit creation of pretty much everything if we run in cleanup mode
|
||||||
if cleanupAndExit {
|
if cleanupAndExit {
|
||||||
return &ProxyServer{CleanupAndExit: cleanupAndExit}, nil
|
return &ProxyServer{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
client, eventClient, err := createClients(config.ClientConnection, master)
|
client, eventClient, err := createClients(config.ClientConnection, master)
|
||||||
|
Loading…
Reference in New Issue
Block a user