Merge pull request #6097 from hazim1093/unique-addresses

Return unique addresses from service
This commit is contained in:
Kubernetes Prow Robot 2020-09-01 16:37:07 -07:00 committed by GitHub
commit 2d44f62e1b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 9 deletions

View file

@ -25,6 +25,7 @@ import (
"time"
"github.com/pkg/errors"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/klog/v2"
pool "gopkg.in/go-playground/pool.v3"
@ -339,26 +340,26 @@ func statusAddressFromService(service string, kubeClient clientset.Interface) ([
case apiv1.ServiceTypeClusterIP:
return []string{svc.Spec.ClusterIP}, nil
case apiv1.ServiceTypeNodePort:
addresses := []string{}
addresses := sets.NewString()
if svc.Spec.ExternalIPs != nil {
addresses = append(addresses, svc.Spec.ExternalIPs...)
addresses.Insert(svc.Spec.ExternalIPs...)
} else {
addresses = append(addresses, svc.Spec.ClusterIP)
addresses.Insert(svc.Spec.ClusterIP)
}
return addresses, nil
return addresses.List(), nil
case apiv1.ServiceTypeLoadBalancer:
addresses := []string{}
addresses := sets.NewString()
for _, ip := range svc.Status.LoadBalancer.Ingress {
if ip.IP == "" {
addresses = append(addresses, ip.Hostname)
addresses.Insert(ip.Hostname)
} else {
addresses = append(addresses, ip.IP)
addresses.Insert(ip.IP)
}
}
addresses = append(addresses, svc.Spec.ExternalIPs...)
addresses.Insert(svc.Spec.ExternalIPs...)
return addresses, nil
return addresses.List(), nil
}
return nil, fmt.Errorf("unable to extract IP address/es from service %v", service)

View file

@ -483,6 +483,34 @@ func TestRunningAddresessWithPublishService(t *testing.T) {
[]string{"10.0.0.1", "foo"},
false,
},
"service type LoadBalancer with same externalIP and ingress IP": {
testclient.NewSimpleClientset(
&apiv1.ServiceList{Items: []apiv1.Service{
{
ObjectMeta: metav1.ObjectMeta{
Name: "foo",
Namespace: apiv1.NamespaceDefault,
},
Spec: apiv1.ServiceSpec{
Type: apiv1.ServiceTypeLoadBalancer,
ExternalIPs: []string{"10.0.0.1"},
},
Status: apiv1.ServiceStatus{
LoadBalancer: apiv1.LoadBalancerStatus{
Ingress: []apiv1.LoadBalancerIngress{
{
IP: "10.0.0.1",
},
},
},
},
},
},
},
),
[]string{"10.0.0.1"},
false,
},
"invalid service type": {
testclient.NewSimpleClientset(
&apiv1.ServiceList{Items: []apiv1.Service{