diff --git a/pkg/cloudprovider/servicelb.go b/pkg/cloudprovider/servicelb.go index fd5b4e756528..8d1cea0739d3 100644 --- a/pkg/cloudprovider/servicelb.go +++ b/pkg/cloudprovider/servicelb.go @@ -285,8 +285,6 @@ func (k *k3s) getStatus(svc *core.Service) (*core.LoadBalancerStatus, error) { return nil, err } - sort.Strings(expectedIPs) - loadbalancer := &core.LoadBalancerStatus{} for _, ip := range expectedIPs { loadbalancer.Ingress = append(loadbalancer.Ingress, core.LoadBalancerIngress{ @@ -393,6 +391,9 @@ func filterByIPFamily(ips []string, svc *core.Service) ([]string, error) { } } + sort.Strings(ipv4Addresses) + sort.Strings(ipv6Addresses) + for _, ipFamily := range svc.Spec.IPFamilies { switch ipFamily { case core.IPv4Protocol: diff --git a/pkg/cloudprovider/servicelb_test.go b/pkg/cloudprovider/servicelb_test.go index f12baeb4938a..6a25ade126b8 100644 --- a/pkg/cloudprovider/servicelb_test.go +++ b/pkg/cloudprovider/servicelb_test.go @@ -1,6 +1,7 @@ package cloudprovider import ( + "math/rand" "reflect" "testing" @@ -8,8 +9,10 @@ import ( ) const ( - addrv4 = "1.2.3.4" - addrv6 = "2001:db8::1" + addrv4 = "1.2.3.4" + addrv4_2 = "2.3.4.5" + addrv6 = "2001:db8::1" + addrv6_2 = "3001:db8::1" ) func Test_UnitFilterByIPFamily(t *testing.T) { @@ -89,3 +92,22 @@ func Test_UnitFilterByIPFamily(t *testing.T) { }) } } + +func Test_UnitFilterByIPFamily_Ordering(t *testing.T) { + want := []string{addrv4, addrv4_2, addrv6, addrv6_2} + ips := []string{addrv4, addrv4_2, addrv6, addrv6_2} + rand.Shuffle(len(ips), func(i, j int) { + ips[i], ips[j] = ips[j], ips[i] + }) + svc := &core.Service{ + Spec: core.ServiceSpec{ + IPFamilies: []core.IPFamily{core.IPv4Protocol, core.IPv6Protocol}, + }, + } + + got, _ := filterByIPFamily(ips, svc) + + if !reflect.DeepEqual(got, want) { + t.Errorf("filterByIPFamily() = %+v\nWant = %+v", got, want) + } +}