하이브리드 메시 설정

이 페이지에서는 다음 플랫폼에 대해 하이브리드 메시를 설정하는 방법을 설명합니다.

  • 하이브리드: Google Cloud 기반 GKE 및 Google Distributed Cloud(프리뷰)
  • 하이브리드: Google Cloud 기반 GKE 및 Google Distributed Cloud(프리뷰)

이 페이지에서는 안내에 따라 두 개의 클러스터를 설정하지만 이 프로세스를 확장하여 여러 개의 클러스터를 메시에 통합할 수 있습니다.

기본 요건

  • 모든 클러스터는 동일한 Fleet 호스트 프로젝트에 등록해야 합니다.
  • 모든 GKE 클러스터는 동일한 네트워크의 공유 VPC 구성 안에 위치해야 합니다.
  • 클러스터의 Kubernetes 컨트롤 플레인 주소와 게이트웨이 주소는 메시의 모든 클러스터에서 연결할 수 있어야 합니다. GKE 클러스터가 있는 Google Cloud 프로젝트에서 외부 부하 분산 유형을 만들 수 있도록 허용되어야 합니다. 승인된 네트워크VPC 방화벽 규칙을 사용해서 액세스를 제한하는 것이 좋습니다.
  • GKE 비공개 클러스터를 포함한 비공개 클러스터는 지원되지 않습니다. Google Distributed Cloud 및 Google Distributed Cloud를 포함한 온프레미스 클러스터를 사용하는 경우 GKE 클러스터의 포드에서 Kubernetes 컨트롤 플레인 주소 및 게이트웨이 주소에 연결할 수 있어야 합니다. CloudVPN을 사용하여 GKE 클러스터의 서브넷을 온프레미스 클러스터 네트워크에 연결하는 것이 좋습니다.
  • Istio CA를 사용하는 경우 모든 클러스터에 동일한 커스텀 루트 인증서를 사용합니다.

시작하기 전에

메시에 설정하려는 모든 클러스터에 대해 kubeconfig 파일 액세스 권한이 필요합니다. GKE 클러스터의 경우 클러스터의 새 kubeconfig 파일을 만들려면 터미널의 값으로 파일 전체 경로가 있는 KUBECONFIG 환경을 내보내고 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. 네트워크 이름용 환경 변수를 만듭니다.

    • GKE 클러스터는 기본적으로 클러스터 네트워크 이름으로 지정됩니다.

      export NETWORK_1="PROJECT_ID-CLUSTER_NETWORK"

    • 다른 클러스터는 default를 사용합니다.

      export NETWORK_2="default"

    --network_id에 다른 값을 사용해서 다른 클러스터에 Cloud Service Mesh를 설치한 경우 동일한 값을 NETWORK_2에 값으로 전달해야 합니다.

east-west 게이트웨이 설치

  1. CLUSTER_2(온프레미스 클러스터)에 대한 east-west 트래픽 전용 클러스터인 CLUSTER_1(GKE 클러스터)에 게이트웨이를 설치합니다.

    asm/istio/expansion/gen-eastwest-gateway.sh \
        --mesh ${MESH_ID} \
        --network ${NETWORK_1}  \
        --revision asm-1225-1 | \
        ./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} \
        --network ${NETWORK_2} \
        --revision asm-1225-1 | \
        ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_2 install -y -f -
    

서비스 노출

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

모든 클러스터의 east-west 게이트웨이를 통해 서비스 노출

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

엔드포인트 검색 사용 설정

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

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

멀티 클러스터 연결 확인

사이드카 프록시 삽입을 참조하세요.