GKE Enterprise CLI를 사용하여 Anthos Service Mesh 설치

이 가이드에서는 사용 설정된 다음 기능과 함께 GKE Enterprise 명령줄 인터페이스(CLI)를 사용하여 새 Google Cloud GKE 클러스터에서 Anthos Service Mesh 1.4.10-asm.18을 설치하는 방법을 설명합니다.

현재까지 GKE Enterprise CLI는 기존 GKE 클러스터 또는 VMware용 GKE에서 설치를 지원하지 않습니다.

시작하기 전에

이 가이드에서는 다음 작업을 이미 완료했다고 가정합니다.

요구사항

  • GKE Enterprise 무료 체험판 라이선스 또는 구독이 있어야 합니다. 자세한 내용은 GKE Enterprise 가격 책정 가이드를 참조하세요.

  • GKE 클러스터는 다음 요구사항을 충족해야 합니다.

    • 최소 4개 이상의 노드.
    • 최소 머신 유형은 4개의 vCPU가 있는 e2-standard-4입니다.
    • 정적 GKE 버전 대신 출시 채널을 사용합니다.
  • 서비스 메시에 포함하려면 서비스 포트의 이름이 지정되어야 하며 이름은 name: protocol[-suffix] 구문에서 포트 프로토콜을 포함해야 합니다. 여기서 대괄호는 대시로 시작해야 하는 선택적 서픽스를 나타냅니다. 자세한 내용은 서비스 포트 이름 지정을 참조하세요.

  • 비공개 클러스터에서 Anthos Service Mesh를 설치하는 경우 자동 사이드카 삽입을 사용하려면 포트 9443을 열도록 방화벽 규칙을 추가해야 합니다. 방화벽 규칙을 추가하지 않고 자동 사이드카 삽입이 사용 설정되어 있으면 워크로드를 배포할 때 오류가 발생합니다. 방화벽 규칙 추가에 대한 세부정보는 특정 사용 사례에 대한 방화벽 규칙 추가를 참조하세요.

  • 조직에서 서비스 경계를 만든 경우 경계에 Mesh CA 서비스를 추가해야 할 수도 있습니다. 자세한 내용은 서비스 경계에 Mesh CA 추가를 참조하세요.

제한사항

Google Cloud 프로젝트당 Anthos Service Mesh 설치는 한 개만 지원됩니다. 단일 프로젝트에서 여러 메시 배포는 지원되지 않습니다.

인증서 데이터

Mesh CA의 인증서에는 애플리케이션 서비스에 대한 다음 데이터가 포함됩니다.

  • Google Cloud 프로젝트 ID
  • GKE 네임스페이스
  • GKE 서비스 계정 이름

kpt 및 Anthos CLI 설치

kpt를 사용하여 GKE Enterprise CLI를 설치합니다. 또한 kpt를 사용하여 GitHub에 저장된 Anthos Service Mesh 리소스 구성 파일을 다운로드, 관리, 맞춤설정합니다. 구성 파일에는 특정 Google Cloud 프로젝트 및 GKE 클러스터 정보에 대한 자리표시자가 포함됩니다. 구성 파일을 맞춤설정한 후 고유 GitHub 저장소 또는 다른 소스 제어 시스템에 체크인할 수 있습니다.

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

    gcloud auth login
    
  2. Google Cloud 프로젝트 ID를 가져오고 이에 대한 환경 변수를 만듭니다.

    export PROJECT_ID=YOUR_PROJECT_ID
  3. Google Cloud CLI의 기본 프로젝트 ID를 설정합니다.

    gcloud config set project ${PROJECT_ID}
    
  4. 영역 또는 리전과 새 클러스터의 머신 유형을 선택합니다. Anthos Service Mesh에 필요한 최소 머신 유형은 n1-standard-4입니다. 모든 출시 채널 옵션을 사용할 수 있습니다.

    • 단일 영역 클러스터를 만드는 경우 다음 명령어를 실행하여 사용 가능한 GCP 영역 목록을 가져옵니다.

      gcloud compute zones list
      
    • 리전 클러스터를 만드는 경우 다음 명령어를 실행하여 사용 가능한 리전 목록을 가져옵니다.

      gcloud compute regions list
      
    • 머신 유형 목록을 가져오는 방법은 다음과 같습니다.

      gcloud compute machine-types list | more
      
  5. 다음의 환경 변수를 만듭니다.

    • 클러스터 이름을 설정합니다.

      export CLUSTER_NAME=YOUR_CLUSTER_NAME

      클러스터 이름에는 소문자 영숫자 및 '-'만 포함되어야 하고 문자로 시작하고 영숫자로 끝나야 하며 40자를 초과할 수 없습니다.

    • CLUSTER_LOCATION을 클러스터 영역 또는 클러스터 리전으로 설정합니다.

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
  6. GKE Enterprise CLI를 설치하고 구성요소를 업데이트합니다. Cloud Shell을 사용하는 경우 다음 명령어에 sudo를 추가합니다.

    gcloud components install kpt anthoscli alpha
    gcloud components update --version 292.0.0
  7. 선택적으로 Anthos Service Mesh 패키지에 대한 새 디렉터리를 만들고 여기로 cd를 수행합니다.

  8. Anthos Service Mesh 패키지를 현재 작업 디렉터리에 다운로드합니다.

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.4-asm .
    

    기본적으로 kpt pkg get 명령어는 현재 구성과 일치하도록 컴퓨팅 영역에 패키지 파일을 채웁니다.

  9. 구성 파일에서 다음 값을 설정합니다.

    • 프로젝트 ID를 설정합니다.

      kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    • 클러스터 이름을 설정합니다.

      kpt cfg set asm cluster-name ${CLUSTER_NAME}
    • 기본 영역 또는 리전을 설정합니다.

      kpt cfg set asm gcloud.compute.zone ${CLUSTER_LOCATION}
    • 선택적으로 기본값 REGULAR에서 출시 채널을 변경합니다. 다음 명령어에서 YOUR_CHANNELSTABLE 또는 RAPID로 바꿉니다.

      kpt cfg set asm gcloud.container.cluster.releaseChannel YOUR_CHANNEL

      각 채널에 대한 설명은 사용 가능한 채널을 참조하세요.

새 클러스터에 Anthos Service Mesh 설치

  1. 다음 명령어를 실행하여 새 클러스터를 만들고 맞춤설정한 Anthos Service Mesh 구성 파일을 사용하여 Anthos Service Mesh를 설치합니다.

    anthoscli apply -f asm
    
  2. 배포가 완료될 때까지 기다립니다.

    kubectl wait --for=condition=available --timeout=600s deployment --all -n istio-system
    

    출력:

    deployment.extensions/istio-galley condition met
    deployment.extensions/istio-ingressgateway condition met
    deployment.extensions/istio-pilot condition met
    deployment.extensions/istio-sidecar-injector condition met
    deployment.extensions/promsd condition met

제어 영역 구성요소 확인

istio-system의 제어 영역 pod가 작동 중인지 확인합니다.

kubectl get pod -n istio-system

다음과 비슷한 출력이 표시됩니다.

NAME                                      READY   STATUS      RESTARTS   AGE
istio-galley-5c65896ff7-m2pls             2/2     Running     0          18m
istio-ingressgateway-587cd459f-q6hqt      2/2     Running     0          18m
istio-nodeagent-74w69                     1/1     Running     0          18m
istio-nodeagent-7524w                     1/1     Running     0          18m
istio-nodeagent-7652w                     1/1     Running     0          18m
istio-nodeagent-7948w                     1/1     Running     0          18m
istio-pilot-9db77b99f-7wfb6               2/2     Running     0          18m
istio-sidecar-injector-69c4d9f875-dt8rn   1/1     Running     0          18m
promsd-55f464d964-lqs7w                   2/2     Running     0          18m

클러스터의 각 노드에 대해 istio-nodeagent 인스턴스가 표시됩니다. Citadel OSS Istio 구성요소를 대신하는 Mesh CA는 서비스 메시에서 실행되는 워크로드에 대해 mTLS 인증서를 발급하기 위해 노드 에이전트를 만듭니다.

Mesh CA가 작동하는지 확인합니다.

  kubectl get pods -n istio-system -l app=istio-nodeagent \
  --output=jsonpath={​.items..metadata.name} -o yaml | grep CA_ADDR -A 1

예상 출력: meshca.googleapis.com:443.

클러스터 등록

Google Cloud 콘솔에서 통합 사용자 인터페이스에 액세스하려면 프로젝트 Fleet에 클러스터를 등록해야 합니다. Fleet에서는 Google Cloud 외부의 클러스터를 포함하여 클러스터와 워크로드를 통합된 방식으로 보고 관리할 수 있습니다.

Google Cloud 서비스 계정 및 키 파일 만들기

클러스터를 등록하려면 서비스 계정 사용자 인증 정보가 포함된 JSON 파일이 필요합니다. 최소 권한의 원칙을 따르려면 등록한 클러스터마다 별도의 서비스 계정을 만드는 것이 좋습니다.

서비스 계정 및 키 파일을 만들려면 다음 안내를 따르세요.

  1. 서비스 계정의 이름을 선택하고 환경 변수를 만듭니다.

    export SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
    
  2. 서비스 계정을 만듭니다.

    gcloud iam service-accounts create ${SERVICE_ACCOUNT_NAME}
  3. 프로젝트의 모든 서비스 계정을 나열하여 서비스 계정이 생성되었는지 확인합니다.

    gcloud iam service-accounts list
  4. gkehub.connect IAM 역할을 서비스 계정에 바인딩합니다.

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
       --member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
       --role="roles/gkehub.connect"
  5. JSON 파일을 저장할 로컬 파일 경로의 환경 변수를 만듭니다. 서비스 계정 이름과 프로젝트 ID를 사용하여 파일 이름을 지정하는 것이 좋습니다. 예를 들면 /tmp/creds/${SERVICE_ACCOUNT_NAME}-${PROJECT_ID}.json입니다.

    export SERVICE_ACCOUNT_KEY_PATH=LOCAL_KEY_PATH
  6. 서비스 계정의 비공개 키 JSON 파일을 다운로드합니다.

    gcloud iam service-accounts keys create ${SERVICE_ACCOUNT_KEY_PATH} \
       --iam-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

클러스터 등록

다음 명령어에서 MEMBERSHIP_NAME을 허브에 등록하려는 클러스터를 고유하게 나타내는 이름으로 바꿉니다.

gcloud container hub memberships register MEMBERSHIP_NAME \
    --gke-cluster=${CLUSTER_LOCATION}/${CLUSTER_NAME} \
    --service-account-key-file=${SERVICE_ACCOUNT_KEY_PATH}

이 명령어는 다음과 유사한 출력으로 응답합니다.

kubeconfig entry generated for CLUSTER_NAME.
Waiting for membership to be created...done.
Created a new membership [projects/PROJECT_ID/locations/global/memberships/MEMBERSHIP_NAME] for the cluster [MEMBERSHIP_NAME]
Generating the Connect Agent manifest...
Deploying the Connect Agent on cluster [MEMBERSHIP_NAME] in namespace [gke-connect]...
Deployed the Connect Agent on cluster [MEMBERSHIP_NAME] in namespace [gke-connect].
Finished registering the cluster [MEMBERSHIP_NAME] with the Hub.

이 서비스 계정 키는 gke-connect 네임스페이스에 creds-gcp라는 보안 비밀로 저장됩니다.

클러스터 등록에 대한 자세한 내용은 연결 문서의 클러스터 등록을 참조하세요.

Pod 보안 정책 사용 설정

서비스 메시의 최상의 보안을 위해서는 Pod 보안 정책을 사용 설정하는 것이 좋습니다.

사이드카 프록시 삽입

Anthos Service Mesh는 사이드카 프록시를 사용하여 네트워크 보안, 안정성, 관측 가능성을 개선합니다. Anthos Service Mesh를 사용하면 이러한 함수가 애플리케이션의 기본 컨테이너에서 추상화되고 동일한 포드에서 별도의 컨테이너로 제공되는 공용 프로세스 외부 프록시로 구현됩니다.

워크로드를 배포하기 전에 사이드카 프록시 삽입을 구성하여 Anthos Service Mesh가 트래픽을 모니터링하고 보호할 수 있도록 해야 합니다.

명령어 하나로 자동 사이드카 삽입을 사용 설정할 수 있습니다. 예를 들면 다음과 같습니다.

kubectl label namespace NAMESPACE istio-injection=enabled --overwrite

여기서 NAMESPACE는 네임스페이스를 명시적으로 만들지 않은 경우 애플리케이션 서비스의 네임스페이스 이름 또는 default입니다.

자세한 내용은 사이드카 프록시 삽입을 참조하세요.

Anthos Service Mesh 페이지 보기

사이드카 프록시가 삽입된 클러스터에 워크로드가 배포되면 Google Cloud 콘솔의 Anthos Service Mesh 페이지에서 Anthos Service Mesh에서 제공하는 모든 관측 가능성 기능을 볼 수 있습니다. 워크로드를 배포한 후 Google Cloud 콘솔에 원격 분석 데이터가 표시되는 데 약 1~2분 정도가 걸립니다.

Google Cloud 콘솔에서 Anthos Service Mesh에 대한 액세스는 Identity and Access Management(IAM)로 제어됩니다. Anthos Service Mesh 페이지에 액세스하려면 프로젝트 소유자가 사용자에게 프로젝트 편집자 또는 뷰어 역할이나 Google Cloud 콘솔에서 Anthos Service Mesh에 대한 액세스 제어에 설명된 더 제한적인 역할을 부여해야 합니다.

  1. Google Cloud 콘솔에서 Anthos Service Mesh로 이동합니다.

    Anthos Service Mesh로 이동

  2. 메뉴 바의 드롭다운 목록에서 Google Cloud 프로젝트를 선택합니다.

  3. 서비스 메시가 2개 이상 있으면 Service Mesh 드롭다운 목록에서 해당 메시를 선택합니다.

자세한 내용은 Google Cloud 콘솔에서 Anthos Service Mesh 탐색을 참조하세요.

Anthos Service Mesh 페이지 외에도 서비스와 관련된 측정항목(예: 특정 서비스에서 수신한 요청 수)이 Cloud Monitoring으로 전송되어 측정항목 탐색기에 표시됩니다.

측정항목을 보려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 Monitoring 페이지로 이동합니다.

    모니터링으로 이동

  2. 리소스 > 측정항목 탐색기를 선택합니다.

측정항목의 전체 목록은 Cloud Monitoring 문서의 Istio 측정항목을 참조하세요.

kpt를 사용하여 샘플 설치

선택적으로 kpt를 사용하여 Hipster 샘플을 클러스터에 설치할 수 있습니다.

  1. 샘플을 다운로드합니다.

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/microservices-demo.git/release \
    hipster-demo
    
  2. 자동 사이드카 삽입을 사용 설정합니다.

    kubectl label namespace default istio-injection=enabled
    
  3. 클러스터에 샘플을 배포합니다.

    kubectl apply -f hipster-demo
    

    이제 샘플이 실행되므로 Google Cloud 콘솔에서 Anthos Service Mesh를 탐색할 수 있습니다. 토폴로지 그래프가 메시에 서비스를 표시하는 데 최대 5분이 걸릴 수 있습니다.

탐색이 끝나면 Hipster 샘플을 삭제합니다.

kubectl delete -f hipster-demo

다음 단계