GKE Enterprise 살펴보기


Terraform을 사용해서 샘플 애플리케이션을 배포하여 Google Kubernetes Engine(GKE) Enterprise 버전에 대해 자세히 살펴봅니다. GKE 클러스터, Anthos Service Mesh, 여러 마이크로서비스를 포함하는 애플리케이션과 함께 실제 실무 환경을 배포합니다. 이 튜토리얼에서는 이러한 기능을 소개하며 가상의 은행을 통해 Google Cloud에 배포된 GKE Enterprise에 대해 알아봅니다. 그런 후 후속 튜토리얼에서 은행의 GKE Enterprise 사례에 따라 원하는 GKE Enterprise 기능을 살펴봅니다.

GKE Enterprise를 지원하는 GKE Enterprise 기능에 대해 자세히 알아보려면 기술 개요를 참조하세요. 하지만 GKE Enterprise 또는 Terraform에 익숙하지 않아도 이 튜토리얼을 따라할 수 있습니다. 클러스터 등의 기본 Kubernetes 개념에는 익숙해야 합니다. 이러한 개념을 잘 모른다면 Kubernetes 기본사항, Google Kubernetes Engine(GKE) 문서, Anthos Service Mesh용 앱 준비를 참조하세요.

실제 프로덕션 설치가 준비되면 설정 섹션을 참조하세요.

내 여정

나는 Bank of Anthos의 플랫폼 책임자입니다. Bank of Anthos는 약 10년 전 2대의 서버를 기반으로 결제 대행 서비스를 제공하는 중소기업으로 비즈니스를 시작했으며 이후 수천 명의 직원을 보유한 대규모 상업 은행으로 성장했으며 엔지니어링 조직도 커졌습니다. Bank of Anthos는 현재 비즈니스를 더 확장하려고 합니다.

그동안은 새로운 비즈니스 가치를 창출하는 것보다 인프라 유지보수에 더 많은 시간과 비용을 투자해 왔습니다. 기존 스택에 대한 경험이 수십 년간 누적되어 있지만 기존 기술로는 확장 시 은행에서 필요로 하는 글로벌 배포 규모를 충족할 수가 없습니다.

확장 목표를 이루기 위해 GKE Enterprise를 채택하여 애플리케이션을 현대화하고 Google Cloud로 성공적으로 마이그레이션했습니다.

목표

이 튜토리얼에서는 다음 태스크를 통해 GKE Enterprise의 주요 기능을 소개합니다.

  • Anthos Service Mesh, 구성 동기화, 정책 컨트롤러와 같은 클러스터, 애플리케이션, 엔터프라이즈 기능을 사용하여 GKE Enterprise 환경을 배포합니다.

  • Google Cloud 콘솔을 사용해서 애플리케이션에 사용되는 GKE 리소스를 살펴봅니다.

  • Anthos Service Mesh를 사용하여 애플리케이션 서비스를 관측합니다.

배포 대상

Google Cloud에 Bank of Anthos를 배포하면 프로젝트가 다음과 같이 프로비저닝됩니다.

  • Google Cloud에서 실행되는 GKE 클러스터: anthos-sample-cluster1.

  • 클러스터에 설치된 Anthos Service Mesh. Anthos Service Mesh를 사용하여 anthos-sample-cluster1에서 서비스 메시를 관리합니다.

  • anthos-sample-cluster1에서 구성 및 보안 정책을 관리하기 위한 구성 동기화정책 컨트롤러.

  • 클러스터에서 실행되는 Bank of Anthos 애플리케이션: Java, Python, JavaScript 등 다양한 프로그래밍 언어로 작성된 여러 마이크로서비스를 사용하는 웹 기반 뱅킹 애플리케이션입니다.

비용

Bank of Anthos 애플리케이션을 배포하면 이미 구독을 구입한 경우가 아니라면 당사의 가격 책정 페이지에 표시된 대로 Google Cloud에서 GKE Enterprise에 대한 사용한 만큼만 지불 비용이 발생합니다.

Compute Engine VM 및 부하 분산기 요금과 같이 Bank of Anthos 애플리케이션을 실행하는 동안 발생하는 기타 Google Cloud 비용도 사용자가 부담합니다.

추가 요금이 청구되지 않도록 튜토리얼을 완료하거나 배포를 살펴본 후 삭제하는 것이 좋습니다.

시작하기 전에

다음 기본 요건을 완료해야 합니다.

프로젝트 선택 또는 생성

기존 프로젝트를 사용하거나 이 튜토리얼용으로 새 프로젝트를 만들 수 있습니다.

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

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

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

    프로젝트 선택기로 이동

  5. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

Cloud Shell 활성화

Cloud Shell은 웹브라우저에서 프로젝트와 리소스를 관리할 수 있는 Google Cloud용 대화형 셸 환경입니다.

Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

Cloud Shell 활성화

IAM 역할 부여

기존 프로젝트를 사용 중이면 Google Cloud 계정에 이 튜토리얼에 필요한 IAM 역할이 있는지 확인합니다.

Google 계정에 역할을 부여합니다. 다음 각 IAM 역할에 대해 다음 명령어를 한 번씩 실행합니다. roles/resourcemanager.projectIamAdmin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/iam.securityAdmin, roles/serviceusage.serviceUsageAdmin, roles/container.admin, roles/logging.logWriter, roles/gkehub.admin, roles/viewer, roles/monitoring.viewer

$ gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
  • PROJECT_ID를 프로젝트 ID로 바꿉니다.
  • EMAIL_ADDRESS를 이메일 주소로 바꿉니다.
  • ROLE을 각 개별 역할로 바꿉니다.

Terraform을 사용하여 Bank of Anthos 배포

모든 기본 요건이 충족되었으면 Cloud Shell에서 다음 명령어를 실행하여 Bank of Anthos를 배포합니다.

  1. 기본 프로젝트가 애플리케이션을 배포하려는 프로젝트 ID로 설정되었는지 확인합니다. 아직 설정되지 않았으면 Cloud Shell에서 다음 명령어를 실행합니다.

    gcloud config set project PROJECT_ID
    

    PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.

  2. Bank of Anthos GitHub 저장소를 Cloud Shell에 클론합니다.

    git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git
    
  3. TF_VAR_project 환경 변수를 프로젝트 ID로 설정합니다.

    export TF_VAR_project=PROJECT_ID
    

    PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.

  4. 설치 스크립트를 호스팅하는 디렉터리로 이동합니다.

    cd bank-of-anthos/iac/tf-anthos-gke
    
  5. Terraform을 초기화합니다. 최신 Google 공급업체 버전을 사용하려면 -upgrade 플래그를 포함합니다.

    terraform init -upgrade
    
  6. (선택사항) 생성되는 리소스를 검토합니다.

    terraform plan
    
  7. Terraform 구성을 적용해서 필요한 리소스를 만들고 Bank of Anthos를 배포합니다.

    terraform apply
    

이전 명령어가 성공적으로 완료되면 Bank of Anthos 애플리케이션 및 이 애플리케이션이 실행되는 리소스가 프로젝트에 배포됩니다. 배포 오류가 발생하면 문제 해결을 참조하세요.

GKE Enterprise 사용 개요

GKE Enterprise 기능은 함께 관리할 수 있도록 논리적으로 그룹화된 Kubernetes 클러스터를 나타내는 Fleet 개념을 바탕으로 합니다. Google Cloud 콘솔에서 GKE Enterprise 개요는 전체 Fleet에 대한 개략적인 뷰를 제공합니다.

GKE Enterprise 개요로 이동

개요에는 다음 정보가 표시됩니다.

  • Fleet에 있는 클러스터 수와 상태가 정상인지 여부. 다른 기존 Fleet 멤버 클러스터가 없는 경우 이 예시에서 이 Fleet의 클러스터 섹션에는 GKE 클러스터가 하나로 표시됩니다.
  • CPU, 메모리, 디스크 사용량을 포함하여 Fleet 및 클러스터에서 집계된 Fleet의 리소스 사용률
  • Fleet에 대해 식별된 보안 문제, Fleet 전반의 정책 컨트롤러 범위, 구성 동기화 패키지의 동기화 상태

GKE 리소스 살펴보기

GKE 클러스터 페이지에는 프로젝트의 모든 클러스터가 표시됩니다. Fleet에 등록된 클러스터는 해당 Fleet가 Fleet 열에 나열됩니다.

이 섹션에서는 Bank of Anthos의 GKE 리소스를 자세히 살펴봅니다.

클러스터

  1. Google Kubernetes Engine 콘솔에서 클러스터 페이지로 이동합니다.

    클러스터 페이지로 이동

  2. 새로 배포된 anthos-sample-cluster1 클러스터를 클릭합니다. 표시된 클러스터 세부정보 페이지에서 클러스터의 네트워킹 및 보안 구성과 함께 기본 클러스터 세부정보를 볼 수 있습니다. 또한 기능 섹션에서 이 클러스터에 사용 설정된 GKE 기능을 확인할 수 있습니다.

  3. 노드 탭을 클릭하여 클러스터에 있는 모든 작업자 머신을 확인합니다. 추가로 드릴다운하여 각 노드에서 실행 중인 워크로드 포드와 노드의 리소스 요약(CPU, 메모리, 스토리지)도 확인할 수 있습니다.

GKE 클러스터 및 노드에 대한 자세한 내용은 GKE 문서를 참조하세요.

워크로드

GKE 콘솔에는 모든 GKE 클러스터에서 실행되는 워크로드를 집계한 워크로드 보기가 있습니다.

Google Kubernetes Engine 콘솔에서 워크로드 페이지로 이동합니다.

워크로드 페이지로 이동

개요 탭에는 GKE 클러스터의 워크로드 및 네임스페이스 목록이 표시됩니다. 네임스페이스로 필터링하여 각 네임스페이스에서 실행 중인 워크로드를 확인할 수 있습니다.

서비스 및 인그레스

서비스 및 인그레스 뷰에는 프로젝트의 서비스 및 인그레스 리소스가 표시됩니다. 서비스는 포드 집합을 엔드포인트가 포함된 네트워크 서비스로 노출하고, 인그레스는 클러스터의 서비스에 대한 외부 액세스를 관리합니다. 하지만 Bank of Anthos는 은행에 대한 트래픽에 일반적인 Kubernetes 인그레스 대신 Istio 인그레스 게이트웨이를 사용합니다. Anthos Service Mesh 사용자는 이를 사용해서 해당 메시의 인바운드 트래픽에 더 복잡한 트래픽 라우팅을 추가할 수 있습니다. 이 튜토리얼의 뒷부분에서 서비스 메시 관측 가능성 기능을 사용할 때 이를 확인할 수 있습니다.

  1. Google Kubernetes Engine 콘솔에서 서비스 및 인그레스 페이지로 이동합니다.

    서비스 및 인그레스 페이지로 이동

  2. Bank of Anthos 인그레스 게이트웨이를 찾으려면 사용 가능한 서비스 목록을 아래로 스크롤하고 frontend라는 이름의 서비스를 찾습니다. 인그레스 게이트웨이에서 애플리케이션 서비스 메시의 인바운드 트래픽을 관리하므로 이 경우 서비스 세부정보를 사용하여 은행의 웹 프런트엔드를 방문할 수 있습니다.

  3. frontend 서비스의 IP 주소 엔드포인트를 클릭합니다. 그러면 Bank of GKE Enterprise 웹 인터페이스가 열립니다.

서비스 관측

GKE Enterprise에서 서비스 관리 및 관측 가능성은 신뢰할 수 있는 서비스 메시를 모니터링하고 관리할 수 있도록 Istio에서 지원되는 도구 모음인 Anthos Service Mesh에서 제공됩니다. Anthos Service Mesh와 마이크로서비스 관리에 도움이 되는 방법에 대해 자세히 알아보려면 Anthos Service Mesh 문서를 참조하세요. 컨테이너에서 마이크로서비스 사용 및 수행할 수 있는 작업에 익숙하지 않은 경우 Anthos Service Mesh용 앱 준비를 참조하세요.

이 예시에서는 샘플 배포의 클러스터에서 마이크로서비스 기반의 Bank of Anthos 샘플 앱이 실행됩니다. 또한 대시보드에서 측정항목과 트래픽을 확인할 수 있도록 클러스터에 대한 소량의 부하를 시뮬레이션하는 loadgenerator 유틸리티가 애플리케이션에 포함되어 있습니다.

이 섹션에서는 GKE 서비스 메시 페이지를 사용하여 이 애플리케이션의 서비스와 트래픽을 살펴봅니다.

Google Kubernetes Engine 콘솔에서 서비스 메시 페이지로 이동합니다.

서비스 메시 페이지로 이동

페이지에 목록 보기와 토폴로지 보기가 나란히 표시되어 시스템 서비스를 포함하여 모든 프로젝트의 마이크로서비스를 보여줍니다. 서비스 메시 페이지에 데이터가 채워지려면 다소 시간이 걸릴 수 있습니다. 토폴로지 보기에 다이어그램이 일부만 표시되거나 표시되지 않으면 클러스터에서 포드를 다시 시작해보거나 다음 섹션으로 이동하고 나중에 확인할 수 있습니다.

목록 보기 사용

목록의 행마다 Bank of Anthos 애플리케이션을 구성하는 서비스 중 하나를 나타냅니다. 예를 들어 frontend 서비스는 애플리케이션의 웹 사용자 인터페이스를 렌더링하며 userservice 서비스에서는 사용자 계정과 인증을 관리합니다.

각 서비스 목록에는 해당 서비스에 대해 서버 오류 비율초당 요청 수와 같은 최신 측정항목이 표시됩니다. 이러한 측정항목은 GKE Enterprise에 배포된 서비스에 대해 즉시 수집됩니다. 통계를 확인하기 위해 애플리케이션 코드를 작성할 필요는 없습니다.

이 뷰에서 드릴다운하여 각 서비스의 세부정보를 살펴볼 수 있습니다. 예를 들어 transactionhistory 서비스에 대해 자세히 알아보려면 다음 안내를 따르세요.

  1. 서비스 목록에서 transactionhistory를 클릭합니다. 서비스 세부정보 페이지에 이 서비스에 사용할 수 있는 모든 원격 분석이 표시됩니다.

  2. transactionhistory 페이지의 왼쪽 메뉴에서 연결된 서비스를 선택합니다. 여기에서 서비스에 대한 인바운드아웃바운드 연결을 모두 확인할 수 있습니다. 잠금 해제된 자물쇠 아이콘은 일부 트래픽이 상호 TLS(mTLS)를 사용하지 않는 이 포트에서 관찰되었음을 나타냅니다. 작동 방법은 GKE Enterprise 보안 튜토리얼에서 자세히 알아볼 수 있습니다.

    Anthos Service Mesh 연결된 서비스 뷰의 스크린샷

토폴로지 보기 사용

토폴로지 보기를 사용하면 서비스 상호작용 방식을 집중적으로 살펴볼 수 있습니다. 범례에서 볼 수 있듯이 그래프에는 애플리케이션의 Anthos Service Mesh 서비스, Istio 서비스, 배포 및 포드가 표시됩니다. 이 보기를 확장하려면 목록 보기에서 "왼쪽 패널" 전환을 클릭합니다.

Anthos Service Mesh 토폴로지 뷰의 스크린샷

Anthos Service Mesh는 서로 통신하는 서비스를 자동으로 관측하여 서비스 간 연결 세부정보를 표시합니다.

  • 마우스 포인터를 항목 위로 가져가면 각 서비스의 아웃바운드 QPS를 포함한 추가 세부정보가 표시됩니다.

  • 그래프의 특정 부분이 더 잘 보이게 마우스로 노드를 드래그하세요.

  • 서비스 노드를 클릭하면 자세한 서비스 정보를 확인할 수 있습니다.

  • 마우스 포인터를 워크로드 노드 위에 올려놓고 펼치기를 클릭하면 현재 실행 중인 워크로드의 인스턴스 수를 포함한 자세한 정보가 표시됩니다.

더 자세히 GKE Enterprise 살펴보기

이 튜토리얼에서 여러 GKE Enterprise 기능을 다루고 있지만 이 배포와 관련해서 더 많은 것들을 살펴보고 수행할 수 있습니다. 후속 튜토리얼로 이동해서 GKE Enterprise의 실무 태스크를 시도해 보거나 이 샘플을 삭제하기 전에 계속 더 살펴볼 수 있습니다.

문제 해결

Bank of Anthos 애플리케이션 배포 중 문제가 발생한 경우 다음 문제 해결 시나리오를 참조하세요.

Google Cloud API가 사용 설정되지 않음(코드 403)

다음과 비슷한 오류가 표시될 수 있습니다.

Error: Error creating Feature: failed to create a diff: failed to retrieve Feature resource: googleapi:
Error 403: GKE Hub API has not been used in project {project-number} before or it is disabled.
Enable it by visiting https://console.developers.google.com/apis/api/gkehub.googleapis.com/overview?project={project-number} then retry.
If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

오류에 표시된 대로 API가 완전히 사용 설정될 때까지 몇 분 정도 기다린 후 terraform apply를 사용해서 다시 배포를 실행합니다.

서비스 메시 페이지에 모든 서비스가 표시되지 않음

Bank of Anthos 애플리케이션을 배포한 후 서비스 메시 페이지에 프로젝트 마이크로서비스가 표시되려면 몇 분 정도 기다려야 할 수 있습니다. 몇 분 후에도 서비스 메시 페이지에 일부 또는 전체 서비스가 표시되지 않으면 Anthos Service Mesh의 일부 프록시가 애플리케이션 워크로드와 함께 자동으로 시작되지 않았을 수 있습니다.

이 문제를 해결하려면 anthos-sample-cluster1 클러스터에서 포드를 다시 시작합니다.

  • 클러스터의 사용자 인증 정보를 가져옵니다.

    gcloud container clusters get-credentials anthos-sample-cluster1 --zone us-central1
    
  • 포드를 삭제합니다.

    kubectl delete pod -n default --all
    
  • 포드가 다시 시작되었는지 확인합니다.

    kubectl get pod -n default
    

서비스 메시 페이지가 몇 분 내에 프로젝트의 마이크로서비스로 채워집니다.

삭제

Bank of Anthos 애플리케이션을 모두 살펴본 후에는 Google Cloud에서 만든 리소스가 할당량을 차지하지 않고 이후에 요금이 청구되지 않도록 리소스를 삭제할 수 있습니다.

  • 옵션 1. 프로젝트를 삭제할 수 있습니다. 하지만 프로젝트를 유지하려는 경우에는 옵션 2를 사용하여 배포를 삭제하면 됩니다.

  • 옵션 2. 현재 프로젝트를 유지하려면 terraform destroy를 사용해서 샘플 애플리케이션과 클러스터를 삭제할 수 있습니다.

프로젝트 삭제(옵션 1)

청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.

    Google Cloud 프로젝트를 삭제합니다.

    gcloud projects delete PROJECT_ID

배포 삭제(옵션 2)

이 방법을 사용하면 Bank of Anthos 애플리케이션과 클러스터가 삭제되지만 프로젝트는 삭제되지 않습니다. Cloud Shell에서 다음 명령어를 실행합니다.

  1. 설치 스크립트를 호스팅하는 디렉터리로 이동합니다.

    cd bank-of-anthos/iac/tf-anthos-gke
    
  2. 샘플 및 클러스터를 삭제합니다.

    terraform destroy
    
  3. 메시지가 표시되면 프로젝트 ID를 입력합니다.

다시 배포하려면 시작하기 전에 섹션의 설명대로 모든 요구사항이 충족되었는지 확인합니다.

다음 단계