Google Cloud 외부에서 멀티 클러스터 메시 설정

이 가이드에서는 다음 플랫폼에 대해 멀티 클러스터 메시를 설정하는 방법을 설명합니다.

  • VMware용 GKE
  • 베어메탈용 Google Distributed Cloud Virtual
  • GKE on AWS
  • Amazon EKS

이 가이드에서는 2개의 클러스터를 설정하는 방법을 보여주지만 이 프로세스를 확장하여 원하는 수의 클러스터를 메시에 통합할 수 있습니다.

시작하기 전에

이 가이드에서는 asmcli install을 사용하여 Anthos Service Mesh를 설치했다고 가정합니다. asmcli install을 실행할 때 asmcli--output_dir에 지정된 디렉터리에 다운로드하는 구성 패키지 및 asmcli가 필요합니다. 설정하려면 시작하기의 단계에 따라 다음을 수행합니다.

메시에 설정하려는 모든 클러스터에 대해 kubeconfig 파일 액세스 권한이 필요합니다.

환경 변수 및 자리표시자 설정

east-west 게이트웨이를 설치할 때는 다음 환경 변수가 필요합니다.

  1. 프로젝트 번호의 환경 변수를 만듭니다. 다음 명령어에서 FLEET_PROJECT_IDFleet 호스트 프로젝트의 프로젝트 ID로 바꿉니다.

    export PROJECT_NUMBER=$(gcloud projects describe FLEET_PROJECT_ID --format="value(projectNumber)")
    
  2. 메시 식별자의 환경 변수를 만듭니다.

    export MESH_ID="proj-${PROJECT_NUMBER}"
    
  3. asmcli에 필요한 형식으로 클러스터 이름에 대한 환경 변수를 만듭니다.

    export CLUSTER_1="cn-FLEET_PROJECT_ID-global-CLUSTER_NAME_1"
    export CLUSTER_2="cn-FLEET_PROJECT_ID-global-CLUSTER_NAME_2"
    

east-west 게이트웨이 설치

다음 명령어를 실행합니다.

  • CLUSTER_NAME_1CLUSTER_NAME_2를 클러스터 이름으로 바꿉니다.

  • PATH_TO_KUBECONFIG_1PATH_TO_KUBECONFIG_2를 해당 클러스터의 kubeconfig 파일로 바꿉니다.

Mesh CA

  1. $CLUSTER_2east-west 트래픽 전용 cluster1에 게이트웨이를 설치합니다. 기본적으로 이 게이트웨이는 인터넷에 공개됩니다. 프로덕션 시스템에서는 외부 공격을 차단하기 위해 방화벽 규칙과 같은 추가 액세스 제한이 필요할 수 있습니다.

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --cluster ${CLUSTER_1} \
        --network default \
        --revision asm-1118-4 | \
        istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 install -y --set spec.values.global.pilotCertProvider=kubernetes -f -
    
  2. $CLUSTER_2$CLUSTER_1의 East-West 트래픽 전용 게이트웨이를 설치합니다.

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --cluster ${CLUSTER_2} \
        --network default \
        --revision asm-1118-4 | \
        istioctl install --kubeconfig=PATH_TO_KUBECONFIG_2 -y --set spec.values.global.pilotCertProvider=kubernetes -f -
    

Istio CA

  1. $CLUSTER_2East-West 트래픽 전용 cluster1에 게이트웨이를 설치합니다. 기본적으로 이 게이트웨이는 인터넷에 공개됩니다. 프로덕션 시스템에서는 외부 공격을 차단하기 위해 방화벽 규칙과 같은 추가 액세스 제한이 필요할 수 있습니다.

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --cluster ${CLUSTER_1} \
        --network default \
        --revision asm-1118-4 | \
        istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 install -y -f -
    
  2. $CLUSTER_2$CLUSTER_1의 East-West 트래픽 전용 게이트웨이를 설치합니다.

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --cluster ${CLUSTER_2} \
        --network default \
        --revision asm-1118-4 | \
        istioctl --kubeconfig=PATH_TO_KUBECONFIG_2 install -y -f -
    

노출 중인 서비스

클러스터가 별도의 네트워크에 있으므로 두 클러스터의 east-west 게이트웨이에 모든 서비스(*.local)를 노출해야 합니다. 이 게이트웨이는 인터넷에서는 공개 상태지만, 마치 동일한 네트워크에 있는 것처럼 신뢰할 수 있는 mTLS 인증서와 워크로드 ID를 사용하는 서비스만 이러한 서비스에 액세스할 수 있습니다.

  1. CLUSTER_NAME_1의 east-west 게이트웨이를 통해 서비스를 노출합니다.

    kubectl --kubeconfig=PATH_TO_KUBECONFIG_1 apply -n istio-system -f \
        asm/istio/expansion/expose-services.yaml
    
  2. CLUSTER_NAME_2의 east-west 게이트웨이를 통해 서비스를 노출합니다.

    kubectl --kubeconfig=PATH_TO_KUBECONFIG_2 apply -n istio-system -f \
        asm/istio/expansion/expose-services.yaml
    

엔드포인트 검색 사용 설정

asmcli create-mesh 명령어를 실행하여 엔드포인트 검색을 사용 설정합니다. 이 예시에서는 클러스터 2개만 표시하지만 명령어를 실행하면 Fleet에 추가할 수 있는 최대 허용 클러스터 수에 따라 추가 클러스터에 엔드포인트 검색을 사용 설정할 수 있습니다.

  ./asmcli create-mesh \
      FLEET_PROJECT_ID \
      PATH_TO_KUBECONFIG_1 \
      PATH_TO_KUBECONFIG_2