cilium/cilium · warning

clustermesh is not deployed

Error message

clustermesh is not deployed

What it means

The clustermesh-apiserver deployment lookup failed and no clustermesh Pod state exists, so the collector warns 'clustermesh is not deployed'. This is the multi-cluster feature check in cilium-cli status distinguishing an absent component from a broken one.

Source

Thrown at cilium-cli/status/k8s.go:613

						defer status.mutex.Unlock()
						status.CollectionError(err)
					}
				}

				return nil
			},
		},
		{
			name: defaults.ClusterMeshDeploymentName,
			task: func(_ context.Context) error {
				disabled, err := k.deploymentStatus(ctx, status, defaults.ClusterMeshDeploymentName)
				status.mutex.Lock()
				defer status.mutex.Unlock()

				status.SetDisabled(defaults.ClusterMeshDeploymentName, defaults.ClusterMeshDeploymentName, disabled)
				if err != nil {
					if _, ok := status.PodState[defaults.ClusterMeshDeploymentName]; !ok {
						status.AddAggregatedWarning(defaults.ClusterMeshDeploymentName, defaults.ClusterMeshDeploymentName, fmt.Errorf("clustermesh is not deployed"))
					} else {
						status.AddAggregatedError(defaults.ClusterMeshDeploymentName, defaults.ClusterMeshDeploymentName, err)
						status.CollectionError(err)
					}
				}

				// pod status for relay is only validated if the deployment exists
				if _, ok := status.PodState[defaults.ClusterMeshDeploymentName]; ok {
					err = k.podStatus(ctx, status, defaults.ClusterMeshDeploymentName, "k8s-app=clustermesh-apiserver", nil)
					if err != nil {
						status.mutex.Lock()
						defer status.mutex.Unlock()
						status.CollectionError(err)
					}
				}

				return nil
			},

View on GitHub (pinned to ac7b90affa)

Solutions

  1. If multi-cluster is wanted: `cilium clustermesh enable` then connect clusters with `cilium clustermesh connect`
  2. If not, ignore the warning — clustermesh is optional
  3. Verify absence with `kubectl -n kube-system get deploy clustermesh-apiserver`
  4. Ensure required `cluster.name` config differs per cluster before enabling

Example fix

// before
$ cilium status
⚠️ clustermesh is not deployed
// after
$ cilium clustermesh enable
$ cilium clustermesh connect --context cluster2
$ cilium status
✅ clustermesh-apiserver: Ok
Defensive patterns

Strategy: validation

Validate before calling

kubectl -n kube-system get deployment clustermesh-apiserver || echo 'clustermesh not enabled'

Prevention

When it happens

Trigger: Running `cilium-cli status` when deploymentStatus() for the clustermesh-apiserver Deployment errors (typically NotFound) and status.PodState lacks ClusterMeshDeploymentName.

Common situations: Single-cluster installs where clustermesh was never enabled (`clustermesh.useAPIServer=false` default); checking status after disconnecting/removing clustermesh; users running `cilium clustermesh status` before `cilium clustermesh enable`.

Related errors


AI-assisted analysis of cilium/cilium@ac7b90affa (2026-08-31). Data as JSON: /api/errors/76383b552f8a6051. Report an issue: GitHub.