{"record":{"id":"420e34eea6d6cded","repo":"kubernetes/kops","slug":"error-querying-azure-instance-metadata-v","errorCode":null,"errorMessage":"error querying Azure instance metadata: %v","messagePattern":"error querying Azure instance metadata: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nodeup/pkg/model/kubelet.go","lineNumber":132,"sourceCode":"\n\t{\n\t\t// Set the provider ID to help speed node registration on large clusters\n\t\tvar providerID string\n\t\tif b.CloudProvider() == kops.CloudProviderAWS {\n\t\t\tconfig, err := awsconfig.LoadDefaultConfig(ctx)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"error loading AWS config: %v\", err)\n\t\t\t}\n\t\t\tmetadata := imds.NewFromConfig(config)\n\t\t\tinstanceIdentity, err := metadata.GetInstanceIdentityDocument(ctx, &imds.GetInstanceIdentityDocumentInput{})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tproviderID = fmt.Sprintf(\"aws:///%s/%s\", instanceIdentity.AvailabilityZone, instanceIdentity.InstanceID)\n\t\t} else if b.CloudProvider() == kops.CloudProviderAzure {\n\t\t\tmetadata, err := azuremetadata.QueryComputeInstanceMetadata(ctx)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"error querying Azure instance metadata: %v\", err)\n\t\t\t}\n\t\t\tproviderID = \"azure://\" + metadata.ResourceID\n\t\t} else if b.CloudProvider() == kops.CloudProviderDO {\n\t\t\t// The DO CCM resolves nodes by provider ID; its name-based fallback does not match\n\t\t\t// our IP-based node names.\n\t\t\tdropletID, err := dometadata.GetDropletID()\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"error querying DigitalOcean droplet ID: %w\", err)\n\t\t\t}\n\t\t\tproviderID = \"digitalocean://\" + dropletID\n\t\t}\n\n\t\tt, err := b.buildKubeletComponentConfig(kubeletConfig, providerID)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tc.AddTask(t)","sourceCodeStart":114,"sourceCodeEnd":150,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/nodeup/pkg/model/kubelet.go#L114-L150","documentation":"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.","triggerScenarios":"QueryComputeInstanceMetadata fails — the Azure Instance Metadata Service is unreachable, returns non-200, or returns an unparseable document.","commonSituations":"IMDS blocked by NSG/firewall rules, VM without metadata access, transient IMDS throttling/unavailability during node bootstrap.","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."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// before nodeup: probe Azure IMDS\nresp, err := http.Get(\"http://169.254.169.254/metadata/instance?api-version=2021-02-01\")\nif err != nil || resp.StatusCode != 200 {\n    return errors.New(\"azure IMDS not reachable\")\n}","typeGuard":null,"tryCatchPattern":"if err := runNodeup(ctx); err != nil {\n    if strings.Contains(err.Error(), \"error querying Azure instance metadata\") {\n        // wait and retry; IMDS can throttle transiently\n        time.Sleep(30 * time.Second)\n        return runNodeup(ctx)\n    }\n    return err\n}","preventionTips":["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."],"tags":["nodeup","azure","metadata","kubelet"],"backgroundTag":"instance-metadata-unreachable","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}