두 클러스터 간 대상 그룹 공유하기

두 클러스터 간 대상 그룹 공유하기

다음 예시는 하나의 대상 그룹을 두 클러스터 간에 공유합니다. 첫 번째 클러스터는 Ingress를 통해 Application Load Balancer를 소유하고, 두 번째 클러스터는 수동으로 만든 TargetGroupBinding을 통해 공유 대상 그룹에 합류합니다. 시작하기 전에 Configure multi-cluster target groups를 검토해 MultiCluster 지원이 어떻게 작동하고 활성화하는지 이해하세요.

출처: 문서

본문

클러스터 1 — Ingress를 통해 로드 밸런서 소유

애플리케이션(예: NodePort Service가 있는 Deployment)을 배포한 다음 multi-cluster 어노테이션이 있는 IngressClass와 Ingress를 만듭니다.

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

컨트롤러는 로드 밸런서를 프로비저닝하고 spec.multiClusterTargetGroup: true가 있는 TargetGroupBinding을 생성합니다. 생성된 TargetGroupBinding과 Service에서 다음 값을 기록하세요 — 두 번째 클러스터는 세 값 모두가 필요해요.

  • targetGroupARN
  • Service nodePort
  • spec.networking.ingress[].from[].securityGroup.groupID의 로드 밸런서 보안 그룹 ID

클러스터 2 — TargetGroupBinding을 통해 공유 대상 그룹에 합류

동일한 애플리케이션을 배포하고 Service를 클러스터 1의 nodePort에 고정한 다음, 클러스터 1의 대상 그룹 ARN과 보안 그룹 ID를 참조하는 TargetGroupBinding을 만듭니다.

apiVersion: eks.amazonaws.com/v1
kind: TargetGroupBinding
metadata:
  name: mc-echoserver
  namespace: echoserver
spec:
  multiClusterTargetGroup: true
  serviceRef:
    name: echoserver
    port: 80
  targetGroupARN:
  targetType: instance
  networking:
    ingress:
      - from:
          - securityGroup:
              groupID:
        ports:
          - port:
            protocol: TCP

두 바인딩 모두에서 MultiCluster 지원이 활성화되면 각 클러스터는 자신의 대상만 등록·등록 해제합니다. 두 클러스터의 노드는 단일 공유 대상 그룹에서 정상 상태를 유지하며, 로드 밸런서는 모든 노드에 트래픽을 분산합니다.

더 알아보기 (Learn more)