kubernetes/kops · error
error getting NodeName: %v
Error message
error getting NodeName: %v
What it means
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".
Source
Thrown at nodeup/pkg/model/kubelet.go:860
// kops-controller will set these labels.
c.NodeLabels = nil
if c.AuthorizationMode == "" {
c.AuthorizationMode = "Webhook"
}
if c.AuthenticationTokenWebhook == nil {
c.AuthenticationTokenWebhook = new(true)
}
return &c, nil
}
// buildControlPlaneKubeletKubeconfig builds a kubeconfig for the master kubelet, self-signing the kubelet cert
func (b *KubeletBuilder) buildControlPlaneKubeletKubeconfig(c *fi.NodeupModelBuilderContext) (fi.Resource, error) {
nodeName, err := b.NodeName()
if err != nil {
return nil, fmt.Errorf("error getting NodeName: %v", err)
}
certName := nodetasks.PKIXName{
CommonName: fmt.Sprintf("system:node:%s", nodeName),
Organization: []string{rbac.NodesGroup},
}
return b.BuildIssuedKubeconfig("kubelet", certName, c), nil
}
func (b *KubeletBuilder) buildKubeletServingCertificate(c *fi.NodeupModelBuilderContext) error {
name := "kubelet-server"
dir := b.PathSrvKubernetes()
var cert, key fi.Resource
if !b.HasAPIServer {
var err error
cert, key, err = b.GetBootstrapCert(name, fi.CertificateIDCA)
if err != nil {View on GitHub (pinned to 4c8573c808)
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.
Defensive patterns
Strategy: retry
Validate before calling
// probe IMDS before running nodeup
resp, err := http.Get("http://169.254.169.254/latest/meta-data/hostname")
if err != nil || resp.StatusCode != 200 {
return errors.New("IMDS unavailable; cannot build control-plane kubelet kubeconfig")
} Try / catch
nodeName, err := b.NodeName()
if err != nil {
return retryableError(fmt.Errorf("error getting NodeName: %v", err))
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- failed to load AWS config: %w
- failed to get local-ipv4 address from ec2 metadata: %w
- error building kubelet server cert: %v
- error building kubelet config: %v
- error loading AWS config: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/3e39ef5590db94ce.
Report an issue: GitHub.