kubernetes-sigs/cloud-provider-azure

Node may be registered with empty ProviderId when there is something wrong in IMDS

feiskyer opened this issue · 1 comments

What happened:

When IMDS is not available, Node may be registered with empty ProviderId because there is no retrying in the following logic:

nodeModifiers, err := cnc.getNodeModifiersFromCloudProvider(ctx, curNode)
if err != nil {
utilruntime.HandleError(fmt.Errorf("failed to initialize node %s at cloudprovider: %w", node.Name, err))
return
}

providerID, err := cnc.nodeProvider.InstanceID(ctx, types.NodeName(node.Name))
if err == nil {
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
if n.Spec.ProviderID == "" {
n.Spec.ProviderID = providerID
}
})
} else {
// we should attempt to set providerID on node, but
// we can continue if we fail since we will attempt to set
// node addresses given the node name in getNodeAddressesByName
klog.Errorf("failed to set node provider id: %v", err)
}

What you expected to happen:

initializeNode should retry when ProviderID is empty. This could be done by returning an error in getNodeModifiersFromCloudProvider() and then retry when initializeNode gets an error when invoking getNodeModifiersFromCloudProvider.

How to reproduce it (as minimally and precisely as possible):

Anything else we need to know?:

Environment:

  • Kubernetes version (use kubectl version):
  • Cloud provider or hardware configuration:
  • OS (e.g: cat /etc/os-release):
  • Kernel (e.g. uname -a):
  • Install tools:
  • Network plugin and version (if this is a network-related bug):
  • Others:
jwtty commented

/assign @jwtty