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
- Remove/disable the kOps IPAM controller flag for this cloud (use the cloud's native IPAM instead)
- Correct --cloud to one of aws, gce, metal if the value was wrong or misspelled
- If IPAM support is genuinely needed on this cloud, pin to a kops version or patch that implements it
- 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
- Only set the IPAM controller flag on aws/gce/metal deployments
- Audit launch templates/config for copied flags across environments
- Use exact lowercase cloud names ('aws', not 'AWS')
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
- identifier for cloud %q not implemented
- clientset is not initialized
- must specify cloud
- creating aws IPAM controller: %w
- creating gce IPAM controller: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/0cb197d3028878d2.
Report an issue: GitHub.