kubernetes/kops · error

kOps IPAM controller is not supported on cloud %q

Error message

kOps IPAM controller is not supported on cloud %q

What it means

setupCloudIPAM only supports the IPAM controller on aws, gce, and metal clouds. When opt.Cloud holds any other value (e.g. openstack, azure, do, hetzner, or a typo), the switch hits the default branch and this error aborts startup. It is a deliberate unsupported-platform guard, not a transient failure.

Source

Thrown at cmd/kops-controller/main.go:422

		ipamController, err := controllers.NewAWSIPAMReconciler(ctx, mgr)
		if err != nil {
			return fmt.Errorf("creating aws IPAM controller: %w", err)
		}
		controller = ipamController
	case "gce":
		ipamController, err := controllers.NewGCEIPAMReconciler(mgr)
		if err != nil {
			return fmt.Errorf("creating gce IPAM controller: %w", err)
		}
		controller = ipamController
	case "metal":
		ipamController, err := controllers.NewMetalIPAMReconciler(ctx, mgr)
		if err != nil {
			return fmt.Errorf("creating metal IPAM controller: %w", err)
		}
		controller = ipamController
	default:
		return fmt.Errorf("kOps IPAM controller is not supported on cloud %q", opt.Cloud)
	}

	if err := controller.SetupWithManager(mgr); err != nil {
		return fmt.Errorf("registering IPAM controller: %w", err)
	}

	return nil
}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Remove/disable the kOps IPAM controller flag for this cloud (use the cloud's native IPAM instead)
  2. Correct --cloud to one of aws, gce, metal if the value was wrong or misspelled
  3. If IPAM support is genuinely needed on this cloud, pin to a kops version or patch that implements it
  4. Verify the controller startup config (feature flags/config) for leftover IPAM settings

Example fix

// before
extraArgs:
  enable-ipam-controller: "true"   # on openstack
// after
extraArgs: {}   # IPAM controller only supported on aws/gce/metal
Defensive patterns

Strategy: validation

Validate before calling

// check support before enabling
var ipamSupported = map[string]bool{"aws": true, "gce": true, "metal": true}
if !ipamSupported[opt.Cloud] {
	// skip enabling the IPAM controller for this cloud
}

Type guard

func ipamSupported(cloud string) bool {
	switch cloud {
	case "aws", "gce", "metal":
		return true
	}
	return false
}

Try / catch

if err := setupCloudIPAM(ctx, controllers, mgr, opt); err != nil {
	if strings.Contains(err.Error(), "not supported on cloud") {
		setupLog.Info("IPAM not supported on this cloud; skipping")
		return
	}
	setupLog.Error(err, "IPAM controller setup failed")
	os.Exit(1)
}

Prevention

When it happens

Trigger: kops-controller started with the IPAM controller enabled and --cloud set to a value other than aws, gce, or metal (including misspellings like 'AWS').

Common situations: Running kops-controller on openstack/azure/hetzner where kOps IPAM is not implemented; copy-pasted launch config carrying the IPAM flag across clouds; case mismatch ('AWS' vs 'aws').

Related errors


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