kubernetes/kops · error

unexpected format for providerID %q

Error message

unexpected format for providerID %q

What it means

The GCE IPAM reconciler parsed the node's providerID but its path did not contain exactly two segments (<zone>/<instance>). The providerID parsed as a URL yet does not match the expected gce://project/zone/instance shape, so the components cannot be used.

Source

Thrown at cmd/kops-controller/controllers/gceipam.go:107

		}
		return ctrl.Result{}, err
	}

	if len(node.Spec.PodCIDRs) == 0 {
		// CCM Node Controller has not done its thing yet
		if node.Spec.ProviderID == "" {
			klog.Infof("node %q has empty provider ID", node.Name)
			return ctrl.Result{}, nil
		}

		// e.g. providerID: gce://example-project-id/us-west2-a/instance-id
		providerURL, err := url.Parse(node.Spec.ProviderID)
		if err != nil {
			return ctrl.Result{}, fmt.Errorf("parsing providerID %q: %w", node.Spec.ProviderID, err)
		}
		tokens := strings.Split(strings.Trim(providerURL.Path, "/"), "/")
		if len(tokens) != 2 {
			return ctrl.Result{}, fmt.Errorf("unexpected format for providerID %q", node.Spec.ProviderID)
		}
		project := providerURL.Host
		zone := tokens[0]
		instanceID := tokens[1]
		if project == "" || zone == "" || instanceID == "" {
			return ctrl.Result{}, fmt.Errorf("unexpected format for providerID %q", node.Spec.ProviderID)
		}

		instance, err := r.gceClient.Instances.Get(project, zone, instanceID).Context(ctx).Do()
		if err != nil {
			return ctrl.Result{}, fmt.Errorf("getting instance %s/%s/%s: %w", project, zone, instanceID, err)
		}

		var ipv6Addresses []string
		for _, nic := range instance.NetworkInterfaces {
			for _, ipv6AccessConfig := range nic.Ipv6AccessConfigs {
				if ipv6AccessConfig.ExternalIpv6 != "" {
					ipv6Address := fmt.Sprintf("%s/%d", ipv6AccessConfig.ExternalIpv6, ipv6AccessConfig.ExternalIpv6PrefixLength)

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Check the node's spec.providerID matches gce://PROJECT/ZONE/INSTANCE
  2. Regenerate the providerID by restarting the GCE cloud-controller-manager on that node
  3. Investigate what wrote the non-conforming providerID
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at cmd/kops-controller/controllers/gceipam.go:107 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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