Make EndpointSlice controller always canonicalize the IPs it writes out

This commit is contained in:
Dan Winship 2025-02-11 17:43:17 -05:00
parent 7259742e23
commit 29be52b3f7
3 changed files with 9 additions and 7 deletions

View File

@ -782,7 +782,7 @@ func TestSyncService(t *testing.T) {
Serving: ptr.To(true), Serving: ptr.To(true),
Terminating: ptr.To(false), Terminating: ptr.To(false),
}, },
Addresses: []string{"fd08::5678:0000:0000:9abc:def0"}, Addresses: []string{"fd08::5678:0:0:9abc:def0"},
TargetRef: &v1.ObjectReference{Kind: "Pod", Namespace: "default", Name: "pod1"}, TargetRef: &v1.ObjectReference{Kind: "Pod", Namespace: "default", Name: "pod1"},
NodeName: ptr.To("node-1"), NodeName: ptr.To("node-1"),
}, },

View File

@ -370,7 +370,7 @@ func TestReconcile1Pod(t *testing.T) {
expectedEndpointPerSlice: map[discovery.AddressType][]discovery.Endpoint{ expectedEndpointPerSlice: map[discovery.AddressType][]discovery.Endpoint{
discovery.AddressTypeIPv6: { discovery.AddressTypeIPv6: {
{ {
Addresses: []string{"1234::5678:0000:0000:9abc:def0"}, Addresses: []string{"1234::5678:0:0:9abc:def0"},
Conditions: discovery.EndpointConditions{ Conditions: discovery.EndpointConditions{
Ready: pointer.Bool(true), Ready: pointer.Bool(true),
Serving: pointer.Bool(true), Serving: pointer.Bool(true),
@ -398,7 +398,7 @@ func TestReconcile1Pod(t *testing.T) {
expectedEndpointPerSlice: map[discovery.AddressType][]discovery.Endpoint{ expectedEndpointPerSlice: map[discovery.AddressType][]discovery.Endpoint{
discovery.AddressTypeIPv6: { discovery.AddressTypeIPv6: {
{ {
Addresses: []string{"1234::5678:0000:0000:9abc:def0"}, Addresses: []string{"1234::5678:0:0:9abc:def0"},
Conditions: discovery.EndpointConditions{ Conditions: discovery.EndpointConditions{
Ready: pointer.Bool(true), Ready: pointer.Bool(true),
Serving: pointer.Bool(true), Serving: pointer.Bool(true),
@ -425,7 +425,7 @@ func TestReconcile1Pod(t *testing.T) {
expectedEndpointPerSlice: map[discovery.AddressType][]discovery.Endpoint{ expectedEndpointPerSlice: map[discovery.AddressType][]discovery.Endpoint{
discovery.AddressTypeIPv6: { discovery.AddressTypeIPv6: {
{ {
Addresses: []string{"1234::5678:0000:0000:9abc:def0"}, Addresses: []string{"1234::5678:0:0:9abc:def0"},
Conditions: discovery.EndpointConditions{ Conditions: discovery.EndpointConditions{
Ready: pointer.Bool(true), Ready: pointer.Bool(true),
Serving: pointer.Bool(true), Serving: pointer.Bool(true),

View File

@ -109,13 +109,15 @@ func getEndpointAddresses(podStatus v1.PodStatus, service *v1.Service, addressTy
addresses := []string{} addresses := []string{}
for _, podIP := range podStatus.PodIPs { for _, podIP := range podStatus.PodIPs {
isIPv6PodIP := utilnet.IsIPv6String(podIP.IP) // We parse and restringify the pod IP in case it is in an irregular format.
ip := utilnet.ParseIPSloppy(podIP.IP)
isIPv6PodIP := utilnet.IsIPv6(ip)
if isIPv6PodIP && addressType == discovery.AddressTypeIPv6 { if isIPv6PodIP && addressType == discovery.AddressTypeIPv6 {
addresses = append(addresses, podIP.IP) addresses = append(addresses, ip.String())
} }
if !isIPv6PodIP && addressType == discovery.AddressTypeIPv4 { if !isIPv6PodIP && addressType == discovery.AddressTypeIPv4 {
addresses = append(addresses, podIP.IP) addresses = append(addresses, ip.String())
} }
} }