mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-10 12:32:03 +00:00
[Dual-stack] Fix generateAPIPodStatus() of kubelet handling Secondary IP
hostIPs order may not be be consistent. If secondary IP is before primary one, current logic adds primary IP twice into PodIPs, which leads to error: "may specify no more than one IP for each IP family". In this case, the second IP shouldn't be added. Co-authored-by: Antonio Ojea <antonio.ojea.garcia@gmail.com>
This commit is contained in:
parent
d2be69ac11
commit
985cf718a4
@ -1624,6 +1624,13 @@ func (kl *Kubelet) generateAPIPodStatus(pod *v1.Pod, podStatus *kubecontainer.Po
|
||||
if err != nil {
|
||||
klog.V(4).InfoS("Cannot get host IPs", "err", err)
|
||||
} else {
|
||||
if s.HostIP != "" {
|
||||
if utilnet.IPFamilyOfString(s.HostIP) != utilnet.IPFamilyOf(hostIPs[0]) {
|
||||
kl.recorder.Eventf(pod, v1.EventTypeWarning, "HostIPsIPFamilyMismatch",
|
||||
"Kubelet detected an IPv%s node IP (%s), but the cloud provider selected an IPv%s node IP (%s); pass an explicit `--node-ip` to kubelet to fix this.",
|
||||
utilnet.IPFamilyOfString(s.HostIP), s.HostIP, utilnet.IPFamilyOf(hostIPs[0]), hostIPs[0].String())
|
||||
}
|
||||
}
|
||||
s.HostIP = hostIPs[0].String()
|
||||
// HostNetwork Pods inherit the node IPs as PodIPs. They are immutable once set,
|
||||
// other than that if the node becomes dual-stack, we add the secondary IP.
|
||||
@ -1635,7 +1642,9 @@ func (kl *Kubelet) generateAPIPodStatus(pod *v1.Pod, podStatus *kubecontainer.Po
|
||||
}
|
||||
// Secondary IP is not set #105320
|
||||
if len(hostIPs) == 2 && len(s.PodIPs) == 1 {
|
||||
s.PodIPs = append(s.PodIPs, v1.PodIP{IP: hostIPs[1].String()})
|
||||
if utilnet.IPFamilyOfString(s.PodIPs[0].IP) != utilnet.IPFamilyOf(hostIPs[1]) {
|
||||
s.PodIPs = append(s.PodIPs, v1.PodIP{IP: hostIPs[1].String()})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3880,6 +3880,17 @@ func TestNodeAddressUpdatesGenerateAPIPodStatusHostNetworkPodIPs(t *testing.T) {
|
||||
{IP: "2001:db8::2"},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Update secondary after new secondary address dual-stack - reverse order",
|
||||
nodeIPs: []string{"2001:db8::2"},
|
||||
nodeAddresses: []v1.NodeAddress{
|
||||
{Type: v1.NodeInternalIP, Address: "10.0.0.1"},
|
||||
{Type: v1.NodeInternalIP, Address: "2001:db8::2"},
|
||||
},
|
||||
expectedPodIPs: []v1.PodIP{
|
||||
{IP: "2001:db8::2"},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testcases {
|
||||
|
Loading…
Reference in New Issue
Block a user