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

  1. Ensure IMDS is enabled and reachable from the instance (re-enable if disabled in instance metadata options).
  2. Check for IMDS hop-limit/iptables rules blocking metadata queries.
  3. Re-run nodeup once the metadata service responds; transient IMDS failures resolve on retry.
  4. 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

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


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/3e39ef5590db94ce. Report an issue: GitHub.