Anthos Service Mesh 1.6

Anthos CLI를 사용하여 기존 클러스터에 Anthos Service Mesh 설치

이 가이드에서는 Anthos 명령줄 인터페이스(CLI)를 사용하여 기존 Google Cloud 기반 Anthos GKE 클러스터에 Anthos Service Mesh 버전 1.6.8-asm.0을 정상적으로 설치하는 방법을 설명합니다. 이전 버전의 Anthos Service Mesh가 설치되어 있는 경우 GKE에서 Anthos Service Mesh 업그레이드를 참조하세요.

Anthos CLI는 Google Cloud 프로젝트를 구성하고 모든 요구사항을 충족하는 기존 Google Cloud 기반 Anthos GKE 클러스터를 업데이트하며 클러스터에 Anthos Service Mesh를 설치하는 간단한 선언적 방법을 제공합니다. 현재 Anthos CLI는 Google Cloud 기반 Anthos GKE에서만 설치를 지원합니다.

설치를 통해 다음 기능을 사용할 수 있습니다.

이 가이드에서는 프로젝트의 environ에 클러스터를 등록하는 방법도 설명합니다. Environ을 사용하면 클러스터를 구성하여 멀티 클러스터 관리를 더 쉽게 수행할 수 있습니다. Environ에 클러스터를 등록하면 서비스 및 기타 인프라를 필요에 따라 그룹화하여 일관된 정책을 적용할 수 있습니다.

시작하기 전에

설치를 시작하기 전에 다음을 수행하세요.

요구사항

  • Anthos 구독이 필요합니다. 또는 Google Cloud에서의 Anthos에 한해 사용한 만큼만 지불하는 결제 옵션을 사용할 수 있습니다. 자세한 내용은 Anthos 가격 책정 가이드를 참조하세요.

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

    • 최소 4개 이상의 노드. 노드를 추가해야 하는 경우 클러스터 크기 조절을 참조하세요.

    • vCPU가 4개 이상 있는 최소 머신 유형(예: e2-standard-4). 클러스터의 머신 유형에 vCPU가 최소 4개 이상 있지 않으면 여러 머신 유형에 워크로드 마이그레이션에 설명된 대로 머신 유형을 변경합니다.

    • 출시 채널에 클러스터를 등록합니다. 다른 채널은 Anthos Service Mesh 1.6.8에서 지원되지 않는 GKE 버전을 기반으로 할 수 있으므로 일반 출시 채널에 등록하는 것이 좋습니다. 자세한 내용은 지원되는 환경을 참조하세요. 정적 GKE 버전이 있는 경우 출시 채널에 기존 클러스터 등록의 안내를 따릅니다.

    • Anthos Service Mesh 또는 오픈소스 Istio가 설치되어 있지 않습니다.

  • 서비스 메시에 포함하려면 서비스 포트의 이름이 지정되어야 하며 이름은 name: protocol[-suffix] 구문에서 포트 프로토콜을 포함해야 합니다. 여기서 대괄호는 대시로 시작해야 하는 선택적 서픽스를 나타냅니다. 자세한 내용은 서비스 포트 이름 지정을 참조하세요.

  • 비공개 클러스터에 Anthos Service Mesh를 설치하는 경우 자동 사이드카 삽입과 함께 사용되는 웹훅을 가져오려면 방화벽에서 포트 15017을 열어야 제대로 작동합니다. 다음과 같이 방화벽 규칙을 추가하거나 비공개 클러스터를 만들 때 자동으로 생성된 방화벽 규칙을 업데이트할 수 있습니다.

    1. 클러스터의 소스 범위(master-ipv4-cidr)를 찾습니다. 다음 명령어에서 CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

      gcloud compute firewall-rules list --filter="name~gke-CLUSTER_NAME-[0-9a-z]*-master"
    2. 포트 15017을 사용하여 방화벽 규칙을 업데이트합니다. 다음 명령어에서 FIREWALL_RULE_NAME을 방화벽 이름으로 바꿉니다.

      gcloud compute firewall-rules update FIREWALL_RULE_NAME --allow tcp:10250,tcp:443,tcp:15017

      update 명령어는 실제로 교체 명령어이므로 기본 포트 443(HTTPS) 및 10250(kubelet)과 15017을 포함해야 합니다.

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

제한사항

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

인증서 데이터

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

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

리소스 구성 파일 준비

Anthos CLI 및 kustomize를 사용하여 Anthos Service Mesh에 필요한 옵션으로 기존 클러스터를 업데이트하는 데 사용할 구성 커넥터 리소스 파일을 내보내고 패치합니다. 구성 커넥터 리소스는 Google Cloud 리소스의 Kubernetes 표현입니다.

리소스 구성 파일 내보내기

gcloud beta anthos export 명령어를 사용하여 기존 클러스터의 리소스 구성 파일을 출력합니다.

  1. asm-patch 패키지를 현재 작업 디렉터리에 다운로드합니다.

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

    이 명령어는 asm-patch/라는 하위 디렉터리를 만듭니다.

  2. BASE_DIR 환경 변수에 디렉터리 이름을 추가합니다. 클러스터 이름을 디렉터리 이름으로 사용하는 것이 좋습니다.

    export BASE_DIR=YOUR_BASE_DIR

    다음에 유의하세요.

    • 디렉터리 이름 대신 BASE_DIR에 대한 상대 경로를 지정할 수 있습니다(예: export BASE_DIR=../example-resources/example-cluster).

    • 리소스 구성 파일을 패치하는 단계가 실패하므로 /usr/example-resources/example-cluster와 같은 절대 경로를 지정하지 마세요.

    • gcloud beta anthos export 명령어가 디렉터리를 자동으로 생성하므로 디렉터리를 만들 필요가 없습니다. 디렉터리가 존재하면 export 명령어는 $BASE_DIR.bak.<number>라는 디렉터리를 만들고, $BASE_DIR의 콘텐츠를 백업 디렉터리로 옮긴 후 리소스 구성 파일을 $BASE_DIR로 내보냅니다.

  3. 클러스터 설정을 구성 커넥터 리소스 구성 파일로 내보냅니다. 다음 명령어에서 PROJECT_IDYOUR_ZONE_OR_REGION을 클러스터가 생성된 프로젝트 ID, 영역 또는 리전으로 바꿉니다.

    gcloud beta anthos export CLUSTER_NAME \
        --output-directory ${BASE_DIR} \
        --project PROJECT_ID \
        --location YOUR_ZONE_OR_REGION

    기본적으로 export 명령어는 명령줄에 --project--location 옵션을 지정하지 않는 한 현재 gcloud config 설정과 일치하도록 클러스터의 리소스 구성 파일에 프로젝트 ID와 클러스터 영역/리전을 채웁니다. 명령줄 옵션에 대한 자세한 내용은 gcloud beta anthos export --help를 참조하세요.

리소스 구성 파일 패치

Anthos kpt setter와 kustomize를 사용하여 리소스 구성 파일을 업데이트합니다. 사용 가능한 kpt 설정을 asm-patch 패키지에 나열하려면 다음을 입력하세요.

kpt cfg list-setters asm-patch/

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

NAME                           VALUE                  SET BY   DESCRIPTION   COUNT
base-dir                       base                                           1
gcloud.compute.location        your_zone_or_region                            1
gcloud.container.cluster       your_cluster_name                              3
gcloud.core.project            your_project_id        kpt                    11
gcloud.project.projectNumber   your_project_number    kpt                     1

필수 값을 설정하고 패치를 적용하려면 다음 안내를 따르세요.

  1. ${BASE_DIR} 디렉터리와 asm-patch 디렉터리 간의 상대 경로를 설정합니다.

    kpt cfg set asm-patch/ base-dir ../${BASE_DIR}
  2. 프로젝트 ID를 설정합니다.

    kpt cfg set asm-patch/ gcloud.core.project PROJECT_ID
  3. 클러스터 이름을 설정합니다.

    kpt cfg set asm-patch/ gcloud.container.cluster CLUSTER_NAME
  4. 영역 또는 리전을 설정합니다.

    kpt cfg set asm-patch/ gcloud.compute.location CLUSTER_LOCATION

    기본적으로 kpt setter는 gcloud config에 구성된 기본 프로젝트 및 클러스터 영역 또는 리전을 사용합니다.

  5. Anthos Service Mesh 패치를 클러스터 리소스 구성 파일에 적용합니다.

    pushd ${BASE_DIR} && kustomize create --autodetect \
    --namespace ${PROJECT_ID} && popd
    pushd asm-patch && kustomize build -o ../${BASE_DIR}/all.yaml && popd

최종 리소스 구성 검증

클러스터를 업데이트하고 Anthos Service Mesh를 설치하기 전에 리소스 구성 파일의 유효성을 검사해야 합니다.

kpt fn source ${BASE_DIR} | kpt fn run --image gcr.io/kustomize-functions/validate-asm:v0.1.0

발생할 수 있는 몇 가지 오류는 다음과 같습니다.

error - unsupported spec.releaseChannel.channel value in ContainerCluster
cluster_name< (all.yaml [7]), expected: REGULAR, RAPID,STABLE, actual:
UNSPECIFIED

이 오류는 클러스터를 출시 채널에 등록하지 않았음을 나타냅니다. 다른 채널은 Anthos Service Mesh 1.6.8에서 지원되지 않는 GKE 버전을 기반으로 할 수 있으므로 일반 출시 채널에 등록하는 것이 좋습니다. 자세한 내용은 지원되는 환경을 참조하세요. 출시 채널에 클러스터를 등록한 후 다음을 수행합니다.

  1. $BASE_DIR 디렉터리를 삭제합니다.

  2. 리소스 구성 파일을 내보내고 패치하는 단계를 반복합니다.

  2 error(s) occurred:
    * Error - spec.workloadIdentity.identityNamespace missing in ContainerCluster cluster_name (all.yaml [0])
    * Error - spec.labels.mesh_id missing in ContainerCluster cluster_name (all.yaml [0])

이러한 오류는 리소스 구성에 패치를 적용할 수 없음을 나타냅니다. 이 오류는 $BASE_DIR이 절대 경로로 설정된 경우 발생할 수 있습니다. 이 오류를 수정하려면 다음 안내를 따르세요.

  1. $BASE_DIR 환경 변수를 디렉터리 이름으로 설정합니다. 클러스터 이름을 사용하는 것이 좋습니다.

  2. 리소스 구성 파일을 내보내고 패치하는 단계를 반복합니다.

클러스터 업데이트 및 Anthos Service Mesh 설치

Anthos CLI는 Anthos Service Mesh에 필요한 다음 옵션으로 클러스터를 업데이트합니다.

  • mesh_id 라벨을 클러스터에 proj-PROJECT_NUMBER 형식으로 추가합니다. 여기서 PROJECT_NUMBER는 클러스터가 생성된 프로젝트의 프로젝트 번호입니다. Cloud Console의 Anthos Service Mesh 대시보드에 측정항목을 표시하려면 mesh_id 라벨이 필요합니다. 클러스터에 기존 라벨이 있는 경우 Anthos CLI가 라벨을 유지합니다.

  • 워크로드 아이덴티티를 사용 설정합니다.

  • Kubernetes Engine Monitoring을 사용 설정합니다.

다음 명령어를 실행하여 클러스터를 업데이트하고 Anthos Service Mesh를 설치합니다.

gcloud beta anthos apply ${BASE_DIR}

이 명령어는 필수 옵션으로 클러스터를 업데이트한 다음 Anthos Service Mesh를 배포합니다. 이 프로세스를 완료하는 데 약 30분이 소요됩니다.

제어 영역 구성요소 확인

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

kubectl get pod -n istio-system

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

NAME                                      READY   STATUS      RESTARTS   AGE
istio-ingressgateway-74cc894bfd-786rg     1/1     Running     0          7m19s
istiod-78cdbbbdb-d7tps                    1/1     Running     0          7m36s
promsd-576b8db4d6-lqf64                   2/2     Running     1          7m19s

ISTIO-SECURITY-2020-007에 지정된 구성 변경 사항을 적용하여 메시에서 서비스 거부(DoS) 공격을 방지합니다.

사이드카 프록시 삽입

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

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

Anthos Service Mesh를 설치하기 전에 클러스터에서 실행 중이었던 모든 워크로드는 현재 Anthos Service Mesh 버전을 포함하도록 사이드카 프록시를 삽입하거나 업데이트해야 합니다. 새 워크로드를 배포하기 전에 사이드카 프록시 삽입을 구성하여 Anthos Service Mesh가 트래픽을 모니터링하고 보호할 수 있도록 해야 합니다.

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

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

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

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

Anthos Service Mesh 페이지 보기

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

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

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

    Anthos Service Mesh로 이동

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

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

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

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

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

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

    Monitoring으로 이동

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

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

다음 단계