Make kubelet always canonicalize the PodIPs

This commit is contained in:
Dan Winship
2025-02-11 17:43:17 -05:00
parent 6512de76ce
commit e31a3989fc
2 changed files with 20 additions and 9 deletions

View File

@@ -22,6 +22,7 @@ import (
goerrors "errors"
"fmt"
"io"
"net"
"net/http"
"net/url"
"os"
@@ -1988,23 +1989,27 @@ func (kl *Kubelet) generateAPIPodStatus(pod *v1.Pod, podStatus *kubecontainer.Po
// and use them for the Pod.Status.PodIPs and the Downward API environment variables
func (kl *Kubelet) sortPodIPs(podIPs []string) []string {
ips := make([]string, 0, 2)
var validPrimaryIP, validSecondaryIP func(ip string) bool
var validPrimaryIP, validSecondaryIP func(ip net.IP) bool
if len(kl.nodeIPs) == 0 || utilnet.IsIPv4(kl.nodeIPs[0]) {
validPrimaryIP = utilnet.IsIPv4String
validSecondaryIP = utilnet.IsIPv6String
validPrimaryIP = utilnet.IsIPv4
validSecondaryIP = utilnet.IsIPv6
} else {
validPrimaryIP = utilnet.IsIPv6String
validSecondaryIP = utilnet.IsIPv4String
validPrimaryIP = utilnet.IsIPv6
validSecondaryIP = utilnet.IsIPv4
}
for _, ip := range podIPs {
// We parse and re-stringify the IPs in case the values from CRI use an irregular format.
for _, ipStr := range podIPs {
ip := utilnet.ParseIPSloppy(ipStr)
if validPrimaryIP(ip) {
ips = append(ips, ip)
ips = append(ips, ip.String())
break
}
}
for _, ip := range podIPs {
for _, ipStr := range podIPs {
ip := utilnet.ParseIPSloppy(ipStr)
if validSecondaryIP(ip) {
ips = append(ips, ip)
ips = append(ips, ip.String())
break
}
}