Multicluster Kubernetes in 2026: Federation Is Dead, Now What?
For years, the industry chased the dream of a "single pane of glass" for Kubernetes—a way to treat a dozen clusters across three clouds as one giant pool of resources. This was the promise of Kubefed. It failed because it tried to be a meta-orchestrator that wrapped native resources in complex "Federated" versions, creating a massive abstraction tax that broke every existing Helm chart and GitOps pipeline.
In 2026, the paradigm has shifted. We no longer "federate" clusters; we propagate resources or virtualize nodes. The goal is no longer a single logical cluster, but a coordinated fleet of independent clusters.
The Modern Blueprint: Hub-and-Spoke Propagation
The gold standard for enterprise multi-cluster management is now the Hub-and-Spoke Propagation pattern. Instead of a wrapper, the Hub (e.g., Karmada) acts as a native Kubernetes API server that accepts standard apps/v1 Deployment or v1 Service objects and replicates them to member clusters based on a set of policies.
[ Developer / GitOps ]
|
v
[ Hub Control Plane (Karmada) ] <--- [ Propagation Policies ]
|
+-----------------------+-----------------------+
| | |
v v v
[ Member Cluster A ] [ Member Cluster B ] [ Member Cluster C ]
(Prod-US-East) (Prod-EU-West) (DR-Region)
| | |
+-----------+-----------+-----------+-----------+
| |
[ Network Mesh ] <--- [ Submariner / Cilium ]
(L3/L4 Tunneling & Cross-Cluster Pod IP Routing)
Technical Mechanics: Resource Propagation
The critical distinction in this architecture is that the member clusters never see "Federated" objects. They receive 1:1 copies of the native YAML. The logic of where and how many replicas go to each cluster is decoupled into a PropagationPolicy.
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
name: api-gateway-policy
spec:
resourceSelector:
matchLabels:
app: api-gateway
placement:
clusterWeights:
- clusterNames: [ "us-east-1" ]
weight: 70
- clusterNames: [ "eu-west-1" ]
weight: 30
replicaScheduling:
- replicaRange: [ 1, 10 ]
clusterNames: [ "us-east-1" ]
Solving the Service Discovery Gap
Multi-cluster networking is the primary failure point of most deployments. While tools like Submariner or Cilium ClusterMesh handle the L3 routing (making Pod IPs routable across clusters), you still need a way to resolve foo.svc.cluster.local to a pod in a different cluster.
Modern blueprints use EndpointSlice Synchronization. The Hub monitors the EndpointSlices of a service in all member clusters and mirrors them back to every cluster. This allows a pod in Cluster A to send traffic to a pod in Cluster B using a native Kubernetes Service name.
apiVersion: networking.karmada.io/v1alpha1
kind: MultiClusterService
metadata:
name: global-api-service
spec:
serviceSelector:
matchLabels:
app: api-gateway
# Synchronizes EndpointSlices across all selected clusters
syncPolicy:
type: AllClusters
Alternative Pattern: Transparent Virtualization
For teams that cannot afford a dedicated Hub control plane, Virtual Node patterns (via Liqo or Admiralty) provide a "transparent" experience. Instead of propagating resources, these tools project the capacity of a remote cluster into the local cluster as a VirtualNode.
When the local scheduler finds no room for a pod, the pod is scheduled onto the Virtual Node. The tool then mutates the pod and executes it on the remote cluster, leaving a "Proxy Pod" (placeholder) on the local cluster to maintain API consistency.
Production Realities
Multi-cluster is not a "free" win; it introduces specific failure modes that differ from single-cluster ops:
- The State Gravity Problem: While
Deploymentspropagate instantly,PersistentVolumeClaims(PVCs) do not. Data is bound to a specific zone/region. Attempting to "fail over" a stateful app without a cross-region storage replication layer (like Rook/Ceph or cloud-native mirroring) will result in a pod that is "Running" but cannot mount its disk. - The Split-Brain Risk: If the Hub loses connectivity to a member cluster, the cluster continues to run the last known good state. However, if the Hub then propagates a "Delete" command that is queued and delayed, you risk inconsistent state across your fleet.
- Latency-Induced Cascades: Cross-cluster service calls introduce milliseconds of latency. If your microservices have tight timeouts (e.g., 50ms), moving a dependency to a remote cluster can trigger a cascade of 504 Gateway Timeouts across your entire call graph.
Who Should Skip This
You should NOT implement a multi-cluster federation/propagation pattern if:
- Your workload fits in a single region: If you can solve your availability needs with 3 AZs, the complexity of a multi-cluster hub is an unnecessary operational tax.
- You lack a dedicated Platform Team: Managing the Hub control plane, the Network Mesh, and the Propagation Policies requires a level of expertise and monitoring that will overwhelm a generalist DevOps engineer.
- Your app is highly stateful: If your app relies on low-latency access to a massive shared database, the "distributed cluster" model is a lie; you are still bound by the location of your data.