Share a target group across two clusters - Amazon EKS
Services or capabilities described in AWS documentation might vary by Region. To see the differences applicable to the AWS European Sovereign Cloud Region, see the AWS European Sovereign Cloud User Guide.

Help improve this page

To contribute to this user guide, choose the Edit this page on GitHub link that is located in the right pane of every page.

Share a target group across two clusters

The following example shares one target group between two clusters. The first cluster owns the Application Load Balancer through an Ingress, and the second cluster joins the shared target group through a manually created TargetGroupBinding. Before you begin, review Configure multi-cluster target groups to understand how MultiCluster support works and how to enable it.

Cluster 1 — own the load balancer through an Ingress

Deploy your application (for example, a Deployment with a NodePort Service), then create an IngressClass and an Ingress that carries the multi-cluster annotation.

apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb-mc spec: controller: eks.amazonaws.com/alb --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: echoserver namespace: echoserver annotations: alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: instance alb.ingress.kubernetes.io/multi-cluster-target-group: "true" spec: ingressClassName: alb-mc rules: - http: paths: - path: / pathType: Exact backend: service: name: echoserver port: number: 80

The controller provisions the load balancer and generates a TargetGroupBinding with spec.multiClusterTargetGroup: true. Note the following values from the generated TargetGroupBinding and Service — the second cluster needs all three:

  • The targetGroupARN.

  • The Service nodePort.

  • The load balancer security group ID from spec.networking.ingress[].from[].securityGroup.groupID.

Cluster 2 — join the shared target group through a TargetGroupBinding

Deploy the same application, pinning the Service to the nodePort from cluster 1, then create a TargetGroupBinding that references cluster 1’s target group ARN and security group ID.

apiVersion: eks.amazonaws.com/v1 kind: TargetGroupBinding metadata: name: mc-echoserver namespace: echoserver spec: multiClusterTargetGroup: true serviceRef: name: echoserver port: 80 targetGroupARN: <cluster-1-target-group-arn> targetType: instance networking: ingress: - from: - securityGroup: groupID: <cluster-1-alb-security-group-id> ports: - port: <cluster-2-node-port> protocol: TCP

With MultiCluster support enabled on both bindings, each cluster registers and deregisters only its own targets. Both clusters' nodes stay healthy in the single shared target group, and the load balancer distributes traffic across all of them.