Skip to content

Commit 1ae74aa

Browse files
authored
Merge pull request #5840 from twz123/dual-stack-node-ip-hard-failure
Make missing node IPs in dual-stack mode a hard error
2 parents 9ac7aee + efac0a7 commit 1ae74aa

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

pkg/component/worker/kubelet.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ func (k *Kubelet) Init(_ context.Context) (err error) {
7777
return nil
7878
}
7979

80-
func lookupNodeName(ctx context.Context, nodeName apitypes.NodeName) (ipv4 net.IP, ipv6 net.IP, _ error) {
81-
ipaddrs, err := net.DefaultResolver.LookupIPAddr(ctx, string(nodeName))
80+
func (k *Kubelet) lookupNodeName(ctx context.Context) (ipv4, ipv6 net.IP, _ error) {
81+
ipaddrs, err := net.DefaultResolver.LookupIPAddr(ctx, string(k.NodeName))
8282
if err != nil {
8383
return nil, nil, err
8484
}
@@ -117,15 +117,18 @@ func (k *Kubelet) Start(ctx context.Context) error {
117117
// but will only pick one for a single family. Do something similar as
118118
// kubelet, but for both IPv4 and IPv6.
119119
// https://github.com/kubernetes/kubernetes/blob/v1.34.2/pkg/kubelet/nodestatus/setters.go#L150-L178
120-
ipv4, ipv6, err := lookupNodeName(ctx, k.NodeName)
120+
ipv4, ipv6, err := k.lookupNodeName(ctx)
121+
if err == nil && (ipv4 == nil || ipv6 == nil) {
122+
err = fmt.Errorf("node name IP address lookup didn't return addresses for both families: IPv4: %s, IPv6: %s", ipv4, ipv6)
123+
}
121124
if err != nil {
122-
logrus.WithError(err).Errorf("failed to lookup %q", k.NodeName)
123-
} else if ipv4 != nil && ipv6 != nil {
124-
// The kubelet will perform some extra validations on the discovered IP
125-
// addresses in the private function k8s.io/kubernetes/pkg/kubelet.validateNodeIP
126-
// which won't be replicated here.
127-
args["--node-ip"] = ipv4.String() + "," + ipv6.String()
125+
return fmt.Errorf("failed to detect node IPs for %q: %w", k.NodeName, err)
128126
}
127+
128+
// The kubelet will perform some extra validations on the discovered IP
129+
// addresses in the private function k8s.io/kubernetes/pkg/kubelet.validateNodeIP
130+
// which won't be replicated here.
131+
args["--node-ip"] = ipv4.String() + "," + ipv6.String()
129132
}
130133

131134
switch runtime.GOOS {

0 commit comments

Comments
 (0)