{"record":{"id":"3e39ef5590db94ce","repo":"kubernetes/kops","slug":"error-getting-nodename-v","errorCode":null,"errorMessage":"error getting NodeName: %v","messagePattern":"error getting NodeName: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nodeup/pkg/model/kubelet.go","lineNumber":860,"sourceCode":"\t// kops-controller will set these labels.\n\tc.NodeLabels = nil\n\n\tif c.AuthorizationMode == \"\" {\n\t\tc.AuthorizationMode = \"Webhook\"\n\t}\n\n\tif c.AuthenticationTokenWebhook == nil {\n\t\tc.AuthenticationTokenWebhook = new(true)\n\t}\n\n\treturn &c, nil\n}\n\n// buildControlPlaneKubeletKubeconfig builds a kubeconfig for the master kubelet, self-signing the kubelet cert\nfunc (b *KubeletBuilder) buildControlPlaneKubeletKubeconfig(c *fi.NodeupModelBuilderContext) (fi.Resource, error) {\n\tnodeName, err := b.NodeName()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error getting NodeName: %v\", err)\n\t}\n\tcertName := nodetasks.PKIXName{\n\t\tCommonName:   fmt.Sprintf(\"system:node:%s\", nodeName),\n\t\tOrganization: []string{rbac.NodesGroup},\n\t}\n\n\treturn b.BuildIssuedKubeconfig(\"kubelet\", certName, c), nil\n}\n\nfunc (b *KubeletBuilder) buildKubeletServingCertificate(c *fi.NodeupModelBuilderContext) error {\n\tname := \"kubelet-server\"\n\tdir := b.PathSrvKubernetes()\n\n\tvar cert, key fi.Resource\n\tif !b.HasAPIServer {\n\t\tvar err error\n\t\tcert, key, err = b.GetBootstrapCert(name, fi.CertificateIDCA)\n\t\tif err != nil {","sourceCodeStart":842,"sourceCodeEnd":878,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/nodeup/pkg/model/kubelet.go#L842-L878","documentation":"buildControlPlaneKubeletKubeconfig calls b.NodeName() to determine the node's name for the master kubelet's client certificate (system:node:<name>). If NodeName cannot be resolved (typically a failure querying the EC2 instance metadata service or an unset override), the error is wrapped as \"error getting NodeName: %v\".","triggerScenarios":"Building the kubelet kubeconfig on a control-plane node during nodeup Build while b.NodeName() returns an error — IMDS unreachable, metadata service throttling, or the configured NodeName source failing.","commonSituations":"Control-plane instance without IMDS (custom images with IMDS disabled), network policy/firewall blocking 169.254.169.254, or running nodeup manually outside a real instance.","solutions":["Ensure IMDS is enabled and reachable from the instance (re-enable if disabled in instance metadata options).","Check for IMDS hop-limit/iptables rules blocking metadata queries.","Re-run nodeup once the metadata service responds; transient IMDS failures resolve on retry.","If running nodeup out-of-band for tests, supply a NodeName override in NodeupConfig."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// probe IMDS before running nodeup\nresp, err := http.Get(\"http://169.254.169.254/latest/meta-data/hostname\")\nif err != nil || resp.StatusCode != 200 {\n\treturn errors.New(\"IMDS unavailable; cannot build control-plane kubelet kubeconfig\")\n}","typeGuard":null,"tryCatchPattern":"nodeName, err := b.NodeName()\nif err != nil {\n\treturn retryableError(fmt.Errorf(\"error getting NodeName: %v\", err))\n}","preventionTips":["Do not disable IMDS on control-plane instances","Allow retries with backoff in nodeup for transient metadata failures","Avoid host firewall rules blocking 169.254.169.254","Run nodeup only on real instances, not in containers without metadata"],"tags":["nodeup","kubelet","nodename","imds"],"backgroundTag":"nodename-resolution-failed","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"}