From 4b9b7ec2f97114b4a67b6f4920a450ec1d7d63d3 Mon Sep 17 00:00:00 2001 From: Justin Santa Barbara Date: Sat, 23 May 2015 16:37:27 -0400 Subject: [PATCH] Continue to support (deprecated) publicIPs Not doing so breaks e2e tests and people that may be using them, even though we will eventually want to stop supporting this now that we have better alternatives for typical use cases (NodePort) --- pkg/proxy/proxier.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pkg/proxy/proxier.go b/pkg/proxy/proxier.go index 70530d7f0ad..7f36e63b63d 100644 --- a/pkg/proxy/proxier.go +++ b/pkg/proxy/proxier.go @@ -44,6 +44,8 @@ type serviceInfo struct { loadBalancerStatus api.LoadBalancerStatus sessionAffinityType api.ServiceAffinity stickyMaxAgeMinutes int + // Deprecated, but required for back-compat (including e2e) + deprecatedPublicIPs []string } func logTimeout(err error) bool { @@ -287,6 +289,7 @@ func (proxier *Proxier) OnUpdate(services []api.Service) { } info.portalIP = serviceIP info.portalPort = servicePort.Port + info.deprecatedPublicIPs = service.Spec.DeprecatedPublicIPs // Deep-copy in case the service instance changes info.loadBalancerStatus = *api.LoadBalancerStatusDeepCopy(&service.Status.LoadBalancer) info.nodePort = servicePort.NodePort @@ -324,6 +327,9 @@ func sameConfig(info *serviceInfo, service *api.Service, port *api.ServicePort) if !info.portalIP.Equal(net.ParseIP(service.Spec.PortalIP)) { return false } + if !ipsEqual(info.deprecatedPublicIPs, service.Spec.DeprecatedPublicIPs) { + return false + } if !api.LoadBalancerStatusEqual(&info.loadBalancerStatus, &service.Status.LoadBalancer) { return false } @@ -350,6 +356,12 @@ func (proxier *Proxier) openPortal(service ServicePortName, info *serviceInfo) e if err != nil { return err } + for _, publicIP := range info.deprecatedPublicIPs { + err = proxier.openOnePortal(net.ParseIP(publicIP), info.portalPort, info.protocol, proxier.listenIP, info.proxyPort, service) + if err != nil { + return err + } + } for _, ingress := range info.loadBalancerStatus.Ingress { if ingress.IP != "" { err = proxier.openOnePortal(net.ParseIP(ingress.IP), info.portalPort, info.protocol, proxier.listenIP, info.proxyPort, service) @@ -469,6 +481,9 @@ func (proxier *Proxier) openNodePort(nodePort int, protocol api.Protocol, proxyI func (proxier *Proxier) closePortal(service ServicePortName, info *serviceInfo) error { // Collect errors and report them all at the end. el := proxier.closeOnePortal(info.portalIP, info.portalPort, info.protocol, proxier.listenIP, info.proxyPort, service) + for _, publicIP := range info.deprecatedPublicIPs { + el = append(el, proxier.closeOnePortal(net.ParseIP(publicIP), info.portalPort, info.protocol, proxier.listenIP, info.proxyPort, service)...) + } for _, ingress := range info.loadBalancerStatus.Ingress { if ingress.IP != "" { el = append(el, proxier.closeOnePortal(net.ParseIP(ingress.IP), info.portalPort, info.protocol, proxier.listenIP, info.proxyPort, service)...)