kubernetes/kops · error
error querying Azure instance metadata: %v
Error message
error querying Azure instance metadata: %v
What it means
For Azure clusters, Build queries Azure instance metadata via azuremetadata.QueryComputeInstanceMetadata to build the providerID. Network or payload failures from the Azure IMDS are wrapped with this message.
Source
Thrown at nodeup/pkg/model/kubelet.go:132
{
// Set the provider ID to help speed node registration on large clusters
var providerID string
if b.CloudProvider() == kops.CloudProviderAWS {
config, err := awsconfig.LoadDefaultConfig(ctx)
if err != nil {
return fmt.Errorf("error loading AWS config: %v", err)
}
metadata := imds.NewFromConfig(config)
instanceIdentity, err := metadata.GetInstanceIdentityDocument(ctx, &imds.GetInstanceIdentityDocumentInput{})
if err != nil {
return err
}
providerID = fmt.Sprintf("aws:///%s/%s", instanceIdentity.AvailabilityZone, instanceIdentity.InstanceID)
} else if b.CloudProvider() == kops.CloudProviderAzure {
metadata, err := azuremetadata.QueryComputeInstanceMetadata(ctx)
if err != nil {
return fmt.Errorf("error querying Azure instance metadata: %v", err)
}
providerID = "azure://" + metadata.ResourceID
} else if b.CloudProvider() == kops.CloudProviderDO {
// The DO CCM resolves nodes by provider ID; its name-based fallback does not match
// our IP-based node names.
dropletID, err := dometadata.GetDropletID()
if err != nil {
return fmt.Errorf("error querying DigitalOcean droplet ID: %w", err)
}
providerID = "digitalocean://" + dropletID
}
t, err := b.buildKubeletComponentConfig(kubeletConfig, providerID)
if err != nil {
return err
}
c.AddTask(t)View on GitHub (pinned to 4c8573c808)
Solutions
- Verify the VM can reach 169.254.169.254 (no NSG/firewall blocking IMDS).
- Retry nodeup; Azure IMDS can be transiently throttled or unavailable.
- Check that the VM agent / Azure provider components are healthy on the node.
- Inspect the wrapped inner error for HTTP status or parse details.
Defensive patterns
Strategy: retry
Validate before calling
// before nodeup: probe Azure IMDS
resp, err := http.Get("http://169.254.169.254/metadata/instance?api-version=2021-02-01")
if err != nil || resp.StatusCode != 200 {
return errors.New("azure IMDS not reachable")
} Try / catch
if err := runNodeup(ctx); err != nil {
if strings.Contains(err.Error(), "error querying Azure instance metadata") {
// wait and retry; IMDS can throttle transiently
time.Sleep(30 * time.Second)
return runNodeup(ctx)
}
return err
} Prevention
- Do not block 169.254.169.254 with NSGs or host firewalls.
- Retry nodeup on transient IMDS throttling instead of rebuilding nodes.
- Ensure the Azure VM agent is running.
When it happens
Trigger: QueryComputeInstanceMetadata fails — the Azure Instance Metadata Service is unreachable, returns non-200, or returns an unparseable document.
Common situations: IMDS blocked by NSG/firewall rules, VM without metadata access, transient IMDS throttling/unavailability during node bootstrap.
Related errors
- error loading AWS config: %v
- error querying DigitalOcean droplet ID: %w
- failed to load AWS config: %w
- failed to get local-ipv4 address from ec2 metadata: %w
- getting local IP from metadata is not supported for cloud pr
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/420e34eea6d6cded.
Report an issue: GitHub.