Fleet API로 관리형 Anthos Service Mesh 구성

이 페이지에서는 Fleet 기능 API를 사용하여 자동 제어 영역 관리로 관리형 Anthos Service Mesh를 설정하는 방법을 보여줍니다.

GKE 클러스터에서 자동 제어 영역 관리를 사용 설정하면 Google은 클러스터의 출시 채널을 기반으로 관리형 Anthos Service Mesh의 권장 구성을 적용하고 최신 상태로 유지합니다.

다음과 같은 경우 이 미리보기 온보딩 경로를 사용합니다.

  • gcloud를 사용하여 Google Cloud API 및 IAM을 사용하여 관리형 Anthos Service Mesh를 구성하려는 경우
  • 다른 Fleet 기능과 동일한 API를 사용하여 Anthos Service Mesh를 구성하려는 경우
  • 각 클러스터에 권장되는 Anthos Service Mesh 구성을 자동으로 가져오려는 경우

asmcli 도구를 사용하는 GA 온보딩 환경은 관리형 Anthos Service Mesh 구성을 참조하세요.

기본 요건

이 가이드에서는 사용자에게 다음이 이미 있다고 가정합니다.

요구사항

  • 지원되는 리전 중 하나에서 지원되는 GKE 버전이 있는 클러스터가 한 개 이상 있어야 합니다.
  • 클러스터를 Fleet에 등록해야 합니다. 이는 안내에 포함되거나 설치 전에 별도로 수행될 수 있습니다.
  • 프로젝트에 서비스 메시 기능이 사용 설정되어 있어야 합니다. 이는 안내에 포함되어 있거나 별도로 수행될 수 있습니다.
  • 모든 GKE 클러스터는 단일 네트워크의 단일 프로젝트에 있어야 합니다.

제한사항

관리형 Anthos Service Mesh 지원 기능 및 제한사항 목록을 검토하는 것이 좋습니다. 특히 다음 사항에 유의하세요.

  • IstioOperator API는 클러스터 내 구성요소를 제어하는 것이 주요 목적이므로 지원되지 않습니다.

  • Anthos Service Mesh를 실행하는 Fleet의 모든 클러스터는 Mesh CA를 사용해야 합니다.

  • 관리형 데이터 영역은 일반 및 빠른 출시 채널에서 사용할 수 있습니다.

  • 관리형 Anthos Service Mesh에서 사용할 수 있는 실제 기능은 출시 채널에 따라 다릅니다. 자세한 내용은 관리형 Anthos Service Mesh 지원 기능 및 제한사항의 전체 목록을 참조하세요.

  • Google 관리 제어 영역의 프로비저닝 프로세스 중에 선택한 채널에 해당하는 Istio CRD가 지정된 클러스터에 설치됩니다. 클러스터에 기존 Istio CRD가 있으면 덮어씁니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  4. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  5. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

  6. 필요한 API를 사용 설정합니다.

      gcloud services enable mesh.googleapis.com \
          --project=PROJECT_ID
    

mesh.googleapis.com을 사용 설정하면 다음 API가 사용 설정됩니다.

API
meshconfig.googleapis.com
meshca.googleapis.com
container.googleapis.com
gkehub.googleapis.com
monitoring.googleapis.com
stackdriver.googleapis.com
opsconfigmonitoring.googleapis.com
iam.googleapis.com
iamcredentials.googleapis.com
bigquery.googleapis.com
bigquerystorage.googleapis.com
compute.googleapis.com
oslogin.googleapis.com
containerregistry.googleapis.com
pubsub.googleapis.com
storage-api.googleapis.com
gkeconnect.googleapis.com
multiclustermetering.googleapis.com
logging.googleapis.com
connectgateway.googleapis.com

gcloud 구성

Cloud Shell을 사용하는 경우에도 다음 단계를 수행합니다.

  1. Google Cloud CLI로 인증합니다.

    gcloud auth login --project PROJECT_ID
    
  2. 구성요소를 업데이트합니다.

    gcloud components update
    
  3. GKE 클러스터에 Anthos Service Mesh를 설치하는 경우 클러스터를 가리키도록 kubectl을 구성합니다.

    gcloud container clusters get-credentials CLUSTER_NAME \
         --zone CLUSTER_LOCATION \
         --project PROJECT_ID
    

Anthos Service Mesh 사용 설정

Fleet에서 Anthos Service Mesh를 사용 설정합니다. 여러 클러스터를 등록하려는 경우 Anthos Service Mesh는 프로젝트 수준에서 사용 설정되므로 이 명령어는 한 번만 실행하면 됩니다.

gcloud container fleet mesh enable --project PROJECT_ID

각 매개변수는 다음과 같습니다.

  • PROJECT_ID는 현재 프로젝트의 ID입니다.

Fleet에 클러스터 등록

  1. 워크로드 아이덴티티를 사용하여 Fleet에 GKE 클러스터를 등록합니다.

    gcloud container fleet memberships register MEMBERSHIP_NAME \
         --gke-cluster=GKE_CLUSTER \
         --enable-workload-identity \
         --project PROJECT_ID
    

    각 매개변수는 다음과 같습니다.

    • MEMBERSHIP_NAME은 Fleet에 등록되는 클러스터를 고유하게 나타내기 위해 선택한 멤버십 이름입니다.

    • GKE_CLUSTER는 현재 프로젝트의 GKE 클러스터 location/name입니다. 위치는 영역이거나 리전일 수 있습니다(예: us-central1-a/my-gke-cluster).

  2. 클러스터가 등록되었는지 확인합니다.

    gcloud container fleet memberships list --project PROJECT_ID
    

각 클러스터 구성

메시의 각 클러스터에 관리형 Anthos Service Mesh를 구성하려면 다음 단계를 수행합니다.

mesh_id 라벨 적용

GKE 클러스터에 mesh_id 라벨을 적용합니다.

  gcloud container clusters update CLUSTER_NAME --zone ZONE\
      --update-labels mesh_id=proj-PROJECT_NUMBER

각 매개변수는 다음과 같습니다.

  • CLUSTER_NAME은 클러스터 이름입니다.
  • ZONE은 클러스터의 컴퓨팅 영역입니다.
  • PROJECT_NUMBER는 프로젝트의 고유 식별자입니다.

자동 제어 영역 관리 사용 설정

다음 명령어를 실행하여 자동 제어 영역 관리를 사용 설정합니다.

  gcloud container fleet mesh update \
     --control-plane automatic \
     --memberships MEMBERSHIP_NAME \
     --project PROJECT_ID

인그레스 게이트웨이는 제어 영역과 함께 자동으로 배포되지 않습니다. 인그레스 게이트웨이와 제어 영역의 배포를 분리하면 프로덕션 환경에서 게이트웨이를 보다 쉽게 관리할 수 있습니다. 클러스터에 인그레스 게이트웨이 또는 이그레스 게이트웨이가 필요한 경우 게이트웨이 배포를 참조하세요. 다른 선택적인 기능을 사용 설정하려면 관리형 Anthos Service Mesh에서 선택적 기능 사용 설정을 참조하세요.

제어 영역이 프로비저닝되었는지 확인

  1. 몇 분 후 제어 영역 상태가 ACTIVE인지 확인합니다.

    gcloud container fleet mesh describe --project PROJECT_ID
    

    출력은 다음과 비슷합니다.

    ...
    membershipSpecs:
      projects/746296320118/locations/global/memberships/demo-cluster-1:
        mesh:
          controlPlane: AUTOMATIC
    membershipStates:
      projects/746296320118/locations/global/memberships/demo-cluster-1:
        servicemesh:
          controlPlaneManagement:
            details:
            - code: REVISION_READY
              details: 'Ready: asm-managed'
            state: ACTIVE
        state:
          code: OK
          description: 'Revision(s) ready for use: asm-managed.'
    ...
    

    제공된 출력에서 description: 필드의 버전 라벨(예: asm-managed)을 기록해 둡니다. 애플리케이션을 배포하기 전에 이 라벨을 설정해야 합니다.

Google 관리형 데이터 영역 적용(선택사항)

Google에서 프록시 업그레이드를 관리하도록 하려면 Google 관리 데이터 영역을 사용 설정합니다. 사용 설정하면 사이드카 프록시와 삽입된 게이트웨이가 관리형 제어 영역과 함께 자동으로 업그레이드됩니다.

Google 관리형 제어 영역을 배포할 때는 Google 관리 데이터 영역에 기본적으로 사용 설정되는 Istio 컨테이너 네트워크 인터페이스(CNI) 플러그인이 필요합니다.

기능 미리보기에서 관리형 데이터 영역은 이전 버전의 프록시를 실행하는 포드를 삭제하여 프록시를 업그레이드합니다. 제거는 포드 중단 예산을 준수하고 변경 속도를 제어하는 방식으로 순서대로 수행됩니다.

관리형 데이터 영역의 미리보기 출시 버전에서는 다음을 관리하지 않습니다.

  • 삽입되지 않은 포드
  • istioctl kube-inject를 사용하여 수동으로 삽입된 포드
  • 작업
  • 스테이트풀(Stateful) 세트
  • DaemonSet

관리형 데이터 영역은 신속 및 일반 출시 채널에서 사용할 수 있습니다.

Google 관리 데이터 영역을 사용 설정하려면 다음 안내를 따르세요.

  1. 데이터 영역 관리를 사용 설정합니다.

    kubectl annotate --overwrite namespace NAMESPACE \
    mesh.cloud.google.com/proxy='{"managed":"true"}'
    

    또는 동일한 주석을 달아 특정 포드에 Google 관리 데이터 영역을 사용 설정할 수 있습니다. 특정 포드에 주석을 추가하면 이 포드는 Google 관리 사이드카 프록시를 사용하고 나머지 워크로드는 비관리형 사이드카 프록시를 사용합니다.

  2. 관리형 데이터 영역을 설정하려는 각 네임스페이스에 이전 단계를 반복합니다.

    데이터 영역 컨트롤러가 클러스터의 프록시를 관리할 때까지 최대 10분이 걸릴 수 있습니다. 다음 명령어를 실행하여 상태를 확인합니다.

    if kubectl get dataplanecontrols -o custom-columns=REV:.spec.revision,STATUS:.status.state | grep rapid | grep -v none > /dev/null; then echo "Managed Data Plane is ready."; else echo "Managed Data Plane is NOT ready."; fi
    

    데이터 영역 컨트롤러가 준비되면 명령어가 Managed Data Plane is ready.를 출력합니다.

10분이 지난 후에도 데이터 영역 컨트롤러의 상태가 준비되지 않으면 관리형 데이터 영역 상태에서 문제 해결 팁을 참조하세요.

Google 관리 데이터 영역을 사용 중지하고 사이드카 프록시를 직접 관리하도록 되돌리려면 주석을 변경합니다.

kubectl annotate --overwrite namespace NAMESPACE \
  mesh.cloud.google.com/proxy='{"managed":"false"}'

엔드포인트 검색 구성(멀티 클러스터 설치만 해당)

계속하기 전에 이전 단계에 설명된 대로 각 클러스터에 관리형 Anthos Service Mesh가 이미 구성되어 있어야 합니다. 기본 동작이므로 클러스터가 기본 클러스터임을 나타낼 필요는 없습니다. 엔드포인트 검색을 구성하기 전에 프로젝트 및 클러스터 변수 설정방화벽 규칙 만들기 섹션을 완료해야 합니다.

공개 클러스터

공개 클러스터 간 엔드포인트 검색 구성

공개 클러스터(비공개 클러스터 아님)에서 작업하는 경우 공개 클러스터 간 엔드포인트 탐색 구성이나 더욱 간단하게 공개 클러스터 간 엔드포인트 탐색 사용 설정을 수행할 수 있습니다.

비공개 클러스터

비공개 클러스터 간 엔드포인트 디스커버리 구성

GKE 비공개 클러스터를 사용할 때 클러스터 제어 영역 엔드포인트를 비공개 엔드포인트 대신 공개 엔드포인트로 구성해야 합니다. 비공개 클러스터 간 엔드포인트 검색 구성을 참조하세요.

두 개의 클러스터가 있는 애플리케이션 예시는 HelloWorld 서비스 예시를 참조하세요.

애플리케이션 배포

애플리케이션을 배포하려면 설치 중에 구성한 채널에 해당하는 라벨을 사용하거나 기본 삽입 라벨을 사용하는 경우 istio-injection=enabled를 사용합니다.

기본 삽입 라벨

kubectl label namespace NAMESPACE istio-injection=enabled istio.io/rev- --overwrite

버전 라벨

애플리케이션을 배포하기 전 해당 네임스페이스에서 모든 이전 istio-injection 라벨을 삭제하고 대신 istio.io/rev=asm-managed-rapid 라벨을 설정합니다.

이는 제어 영역을 확인할 때 식별된 버전 라벨입니다. 다른 버전 라벨을 사용하는 경우 asm-managed-rapid를 클릭하고 해당되는 라벨로 바꿉니다(일반 채널의 경우asm-managed, 공개 채널의 경우 asm-managed-stable).

버전 라벨은 출시 채널을 따릅니다.

버전 라벨 채널
asm-managed 일반
asm-managed-rapid 신속
asm-managed-stable 정식
kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION_LABEL --overwrite

이제 Anthos Service Mesh 관리 제어 영역이 성공적으로 구성되었습니다. 관리형 데이터 영역도 적용한 경우 워크로드를 다시 시작합니다. 그렇지 않은 경우 순차적 업데이트를 수행합니다. 이제 애플리케이션을 배포할 준비가 되었습니다. 또는 Bookinfo 샘플 애플리케이션을 배포할 수 있습니다.

멀티 클러스터 설정으로 애플리케이션을 배포할 경우 특정 구성을 클러스터 하위 집합으로 제한할 계획이 아닌 한 모든 클러스터에서 Kubernetes 및 제어 영역 구성을 복제합니다. 특정 클러스터에 적용되는 구성은 해당 클러스터에 대한 정보 소스입니다. 또한 클러스터가 다른 네임스페이스에 있는 Mesh CA와 함께 Anthos Service Mesh 또는 Certificate Authority Service를 실행하는 경우 애플리케이션이 클러스터 내 제어 영역에서 제어되는 다른 애플리케이션과 통신할 수 있는지 확인합니다.

자동 제어 영역 관리 사용 중지

자동 제어 영역 관리를 중지해도 리소스는 프로비저닝 해제되지 않습니다. 모든 리소스는 클러스터에 남아 있으므로 개발자가 수동으로 관리하거나 삭제할 수 있습니다. 완전히 오프보딩하려면 Anthos Service Mesh 제거를 참조하세요.

  1. 다음 명령어를 실행하여 자동 제어 영역 관리를 중지합니다.

    gcloud container fleet mesh update \
       --control-plane manual \
       --memberships MEMBERSHIP_NAME \
       --project PROJECT_ID
    
  2. 몇 분 후 자동 제어 영역 관리 상태가 DISABLED인지 확인합니다.

    gcloud container fleet mesh describe --project PROJECT_ID
    

    출력은 다음과 비슷합니다.

    ...
    membershipSpecs:
      projects/projectid/locations/global/memberships/cluster-name:
        mesh:
          controlPlane: MANUAL
    membershipStates:
      projects/projectid/locations/global/memberships/cluster-name:
        servicemesh:
          controlPlaneManagement:
            state: DISABLED
        state:
          code: OK
          description: 'Revision(s) ready for use: asm-managed.'
    ...
    

    Anthos Service Mesh를 완전히 제거하려면 Anthos Service Mesh 제거를 참조하세요.

다음 단계