From 34922226fdcad7fa696ccb6ade398ef408b82b65 Mon Sep 17 00:00:00 2001 From: Brian Ketelsen Date: Sun, 7 Sep 2014 23:27:43 -0700 Subject: [PATCH] allow proxy to accept a listen address. fixes #1220 --- cmd/proxy/proxy.go | 3 ++- pkg/proxy/proxier.go | 11 +++++++---- pkg/proxy/proxier_test.go | 12 ++++++------ 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/cmd/proxy/proxy.go b/cmd/proxy/proxy.go index adfcf3babc..b5132eea42 100644 --- a/cmd/proxy/proxy.go +++ b/cmd/proxy/proxy.go @@ -33,6 +33,7 @@ var ( configFile = flag.String("configfile", "/tmp/proxy_config", "Configuration file for the proxy") master = flag.String("master", "", "The address of the Kubernetes API server (optional)") etcdServerList util.StringList + address = flag.String("address", "0.0.0.0", "The address for the proxy server to serve on (set to 0.0.0.0 or \"\" for all interfaces)") ) func init() { @@ -84,7 +85,7 @@ func main() { glog.Infof("Using configuration file %s", *configFile) loadBalancer := proxy.NewLoadBalancerRR() - proxier := proxy.NewProxier(loadBalancer) + proxier := proxy.NewProxier(loadBalancer, *address) // Wire proxier to handle changes to services serviceConfig.RegisterHandler(proxier) // And wire loadBalancer to handle changes to endpoints to services diff --git a/pkg/proxy/proxier.go b/pkg/proxy/proxier.go index 408136f740..788002d9fa 100644 --- a/pkg/proxy/proxier.go +++ b/pkg/proxy/proxier.go @@ -43,13 +43,16 @@ type Proxier struct { loadBalancer LoadBalancer mu sync.Mutex // protects serviceMap serviceMap map[string]*serviceInfo + address string } -// NewProxier returns a new Proxier given a LoadBalancer. -func NewProxier(loadBalancer LoadBalancer) *Proxier { +// NewProxier returns a new Proxier given a LoadBalancer and an +// address on which to listen +func NewProxier(loadBalancer LoadBalancer, address string) *Proxier { return &Proxier{ loadBalancer: loadBalancer, serviceMap: make(map[string]*serviceInfo), + address: address, } } @@ -152,7 +155,7 @@ var unusedPortLock sync.Mutex func (proxier *Proxier) addServiceOnUnusedPort(service string) (string, error) { unusedPortLock.Lock() defer unusedPortLock.Unlock() - l, err := net.Listen("tcp", ":0") + l, err := net.Listen("tcp", fmt.Sprintf("%s:0", proxier.address)) if err != nil { return "", err } @@ -194,7 +197,7 @@ func (proxier *Proxier) OnUpdate(services []api.Service) { proxier.StopProxy(service.ID) } glog.Infof("Adding a new service %s on port %d", service.ID, service.Port) - listener, err := net.Listen("tcp", fmt.Sprintf(":%d", service.Port)) + listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", proxier.address, service.Port)) if err != nil { glog.Infof("Failed to start listening for %s on %d", service.ID, service.Port) continue diff --git a/pkg/proxy/proxier_test.go b/pkg/proxy/proxier_test.go index f15a1831db..04a224799d 100644 --- a/pkg/proxy/proxier_test.go +++ b/pkg/proxy/proxier_test.go @@ -79,7 +79,7 @@ func TestProxy(t *testing.T) { lb.OnUpdate([]api.Endpoints{ {JSONBase: api.JSONBase{ID: "echo"}, Endpoints: []string{net.JoinHostPort("127.0.0.1", port)}}}) - p := NewProxier(lb) + p := NewProxier(lb, "127.0.0.1") proxyPort, err := p.addServiceOnUnusedPort("echo") if err != nil { @@ -92,7 +92,7 @@ func TestProxyStop(t *testing.T) { lb := NewLoadBalancerRR() lb.OnUpdate([]api.Endpoints{{JSONBase: api.JSONBase{ID: "echo"}, Endpoints: []string{net.JoinHostPort("127.0.0.1", port)}}}) - p := NewProxier(lb) + p := NewProxier(lb, "127.0.0.1") proxyPort, err := p.addServiceOnUnusedPort("echo") if err != nil { @@ -115,7 +115,7 @@ func TestProxyUpdateDelete(t *testing.T) { lb := NewLoadBalancerRR() lb.OnUpdate([]api.Endpoints{{JSONBase: api.JSONBase{ID: "echo"}, Endpoints: []string{net.JoinHostPort("127.0.0.1", port)}}}) - p := NewProxier(lb) + p := NewProxier(lb, "127.0.0.1") proxyPort, err := p.addServiceOnUnusedPort("echo") if err != nil { @@ -137,7 +137,7 @@ func TestProxyUpdateDeleteUpdate(t *testing.T) { lb := NewLoadBalancerRR() lb.OnUpdate([]api.Endpoints{{JSONBase: api.JSONBase{ID: "echo"}, Endpoints: []string{net.JoinHostPort("127.0.0.1", port)}}}) - p := NewProxier(lb) + p := NewProxier(lb, "127.0.0.1") proxyPort, err := p.addServiceOnUnusedPort("echo") if err != nil { @@ -164,7 +164,7 @@ func TestProxyUpdatePort(t *testing.T) { lb := NewLoadBalancerRR() lb.OnUpdate([]api.Endpoints{{JSONBase: api.JSONBase{ID: "echo"}, Endpoints: []string{net.JoinHostPort("127.0.0.1", port)}}}) - p := NewProxier(lb) + p := NewProxier(lb, "127.0.0.1") proxyPort, err := p.addServiceOnUnusedPort("echo") if err != nil { @@ -197,7 +197,7 @@ func TestProxyUpdatePortLetsGoOfOldPort(t *testing.T) { lb := NewLoadBalancerRR() lb.OnUpdate([]api.Endpoints{{JSONBase: api.JSONBase{ID: "echo"}, Endpoints: []string{net.JoinHostPort("127.0.0.1", port)}}}) - p := NewProxier(lb) + p := NewProxier(lb, "127.0.0.1") proxyPort, err := p.addServiceOnUnusedPort("echo") if err != nil {