Install Cloud Service Mesh

내 진행 상황 확인하기

/ 50

Deploying a BookInfo application

내 진행 상황 확인하기

/ 50

이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
이 콘텐츠는 아직 휴대기기에 최적화되지 않음
최상의 경험을 위해 데스크톱 컴퓨터에서 이메일로 전송된 링크를 사용하여 방문하세요.

GSP654

Google Cloud 사용자 주도형 실습

개요

Istio는 마이크로서비스를 연결, 보호, 관리하기 위한 오픈소스 프레임워크입니다. Kubernetes 클러스터에서 호스팅되는 서비스를 포함하여 모든 서비스와 함께 사용할 수 있습니다. Istio를 사용하면 서비스 코드를 변경하지 않고도 부하 분산, 서비스 간 인증, 모니터링 등의 기능을 갖춘 배포된 서비스 네트워크를 만들 수 있습니다.

한 가지 예를 들면 안정적인 분산 시스템에서는 요청이 실패했을 때 시스템이 요청을 재시도하는 것이 일반적이며, 이때 지수 백오프 지연이 발생할 수 있습니다. 이를 지원하는 Java, Golang, Node.js용 라이브러리가 있습니다. 그러나 앱 내에서 이를 사용하려면 각기 다른 앱이 해당 문제를 독립적으로 해결해야 합니다. Istio 사이드카는 앱을 대신해 이 작업을 자동으로 수행할 수 있습니다.

Cloud Service Mesh

Cloud Service Mesh(ASM)는 Istio를 기반으로 합니다. Cloud Service Mesh를 사용하면 엔터프라이즈에서 테스트하고 완벽하게 지원하는 Istio 배포판을 사용하여 클러스터가 Google Cloud에 운영되든, 온프레미스에서 운영되든 상관없이 GKE Enterprise로 서비스 메시를 만들고 배포할 수 있습니다.

Google Kubernetes Engine 또는 베어메탈용 GKE에 맞게 권장 설정이 적용된 기본 제공 구성 프로필을 사용할 수 있습니다.

마지막으로 Cloud Service Mesh는 통합된 방식으로 안전하고 안정적인 서비스를 관찰하고 관리하는 데 도움이 되는 추가 기능 및 도구 모음을 제공합니다.

  • 메시의 GKE 클러스터 내 HTTP(S) 트래픽의 서비스 측정항목 및 로그가 Google Cloud에 자동으로 수집됩니다.
  • 사전 구성된 서비스 대시보드에서 서비스를 이해하는 데 필요한 정보를 확인할 수 있습니다.
  • 심층 원격 분석을 통해 측정항목과 로그를 자세히 살펴보고 다양한 속성별로 데이터를 필터링하거나 분할할 수 있습니다.
  • 서비스 간 관계를 한눈에 볼 수 있어 어떤 서비스끼리 연결되는지, 각 서비스가 어떤 서비스에 의존하는지 쉽게 파악할 수 있습니다.
  • 서비스 수준 목표(SLO)는 서비스 상태에 관해 유용한 정보를 제공합니다. SLO를 쉽게 정의하고 서비스 상태에 대한 자체 표준에 따라 알림을 설정할 수 있습니다.

Cloud Service Mesh는 GKE Enterprise 클러스터에 Istio 기반 서비스 메시를 구현하는 가장 쉽고 편리한 방법입니다.

이 실습에서는 GKE 클러스터에 Cloud Service Mesh를 설치합니다.

학습할 내용

이 실습에서는 다음 작업을 수행하는 방법을 알아봅니다.

  • Google Kubernetes Engine(GKE)에서 클러스터 프로비저닝
  • Cloud Service Mesh 설치 및 구성
  • Istio 지원 멀티 서비스 애플리케이션인 Bookinfo 배포
  • Istio 인그레스 게이트웨이를 사용하여 외부 액세스 사용 설정
  • Bookinfo 애플리케이션 사용
  • Cloud Service Mesh 대시보드로 서비스 성능 모니터링

설정 및 요건

실습 시작 버튼을 클릭하기 전에

다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지를 표시합니다.

실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.

이 실습을 완료하려면 다음을 준비해야 합니다.

  • 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드(권장) 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학습자 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
  • 실습을 완료하기에 충분한 시간(실습을 시작하고 나면 일시중지할 수 없음)
참고: 이 실습에는 학습자 계정만 사용하세요. 다른 Google Cloud 계정을 사용하는 경우 해당 계정에 비용이 청구될 수 있습니다.

실습을 시작하고 Google Cloud 콘솔에 로그인하는 방법

  1. 실습 시작 버튼을 클릭합니다. 실습 비용을 결제해야 하는 경우 결제 수단을 선택할 수 있는 대화상자가 열립니다. 오른쪽에는 다음과 같은 항목이 포함된 실습 설정 및 액세스 패널이 있습니다.

    • Google Cloud 콘솔 열기 버튼
    • 이 실습에 사용해야 하는 임시 사용자 인증 정보(사용자 이름 및 비밀번호)
    • 필요한 경우 실습 진행을 위한 기타 정보

    실습 타이머는 페이지 상단에 있으며 남은 시간을 표시합니다.

  2. Google Cloud 콘솔 열기를 클릭합니다(Chrome 브라우저를 실행 중인 경우 마우스 오른쪽 버튼으로 클릭하고 시크릿 창에서 링크 열기를 선택합니다).

    실습에서 리소스가 가동되면 다른 탭이 열리고 로그인 페이지가 표시됩니다.

    팁: 두 개의 탭을 각각 별도의 창으로 나란히 정렬하세요.

    참고: 계정 선택 대화상자가 표시되면 다른 계정 사용을 클릭합니다.
  3. 필요한 경우 아래의 사용자 이름을 복사하여 로그인 대화상자에 붙여넣습니다.

    {{{user_0.username | "Username"}}}

    실습 설정 및 액세스 패널에서도 사용자 이름을 확인할 수 있습니다.

  4. 다음을 클릭합니다.

  5. 아래의 비밀번호를 복사하여 시작하기 대화상자에 붙여넣습니다.

    {{{user_0.password | "Password"}}}

    실습 설정 및 액세스 패널에서도 비밀번호를 확인할 수 있습니다.

  6. 다음을 클릭합니다.

    중요: 실습에서 제공하는 사용자 인증 정보를 사용해야 합니다. Google Cloud 계정 사용자 인증 정보를 사용하지 마세요. 참고: 이 실습에 자신의 Google Cloud 계정을 사용하면 추가 요금이 발생할 수 있습니다.
  7. 이후에 표시되는 페이지를 클릭하여 넘깁니다.

    • 이용약관에 동의하세요.
    • 임시 계정이므로 복구 옵션이나 2단계 인증을 추가하지 마세요.
    • 무료 체험판을 신청하지 마세요.

잠시 후 Google Cloud 콘솔이 이 탭에서 열립니다.

참고: Google Cloud 제품 및 서비스에 액세스하려면 탐색 메뉴를 클릭하거나 검색창에 제품 또는 서비스 이름을 입력합니다. 탐색 메뉴 아이콘 및 검색창

Cloud Shell 활성화

Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다. Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다.

  1. Google Cloud 콘솔 상단에서 Cloud Shell 활성화 Cloud Shell 활성화 아이콘를 클릭합니다.

  2. 다음 창을 클릭합니다.

    • Cloud Shell 정보 창을 통해 계속 진행합니다.
    • 사용자 인증 정보를 사용하여 Google Cloud API를 호출할 수 있도록 Cloud Shell을 승인합니다.

연결되면 사용자 인증이 이미 처리된 것이며 프로젝트가 학습자의 PROJECT_ID, (으)로 설정됩니다. 출력에 이 세션의 PROJECT_ID를 선언하는 줄이 포함됩니다.

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 명령줄 자동 완성을 지원합니다.

  1. (선택사항) 다음 명령어를 사용하여 활성 계정 이름 목록을 표시할 수 있습니다.
gcloud auth list
  1. 승인을 클릭합니다.

출력:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (선택사항) 다음 명령어를 사용하여 프로젝트 ID 목록을 표시할 수 있습니다.
gcloud config list project

출력:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 참고: gcloud 전체 문서는 Google Cloud에서 gcloud CLI 개요 가이드를 참고하세요.

작업 1. 프로젝트 설정

SDK 구성 확인

  1. Cloud Shell에서 기본 계정이 구성되어 있는지 확인합니다.

    Cloud SDK가 Qwiklabs에서 생성한 사용자 계정을 사용하도록 구성되어 있는지 확인합니다.

    gcloud config list

    출력:

    [component_manager] disable_update_check = True [compute] gce_metadata_read_timeout_sec = 5 [core] account = student-xx-xxxx@qwiklabs.net disable_usage_reporting = False project = qwiklabs-gcp-yy-#### [metrics] environment = devshell Your active configuration is: [cloudshell-#####]
  2. 필요한 경우 프로젝트 구성을 업데이트합니다.

    SDK에 기본 프로젝트가 올바르게 설정되어 있지 않다면, 구성을 업데이트합니다. [project_id]를 Qwiklabs 안내 페이지의 사용자 인증 정보 섹션에 제공된 프로젝트 이름으로 바꿉니다.

    gcloud config set project [project_id]

환경 변수 구성

  1. 설정 및 설치 명령어에 사용할 환경 변수를 구성합니다.
export PROJECT_ID=$(gcloud config get-value project) export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} \ --format="value(projectNumber)") export CLUSTER_NAME=central export CLUSTER_ZONE={{{project_0.default_zone | zone}}} export WORKLOAD_POOL=${PROJECT_ID}.svc.id.goog export MESH_ID="proj-${PROJECT_NUMBER}" 참고:
  • WORKLOAD_POOL은 GKE 애플리케이션에서 Google Cloud 서비스에 안전하게 액세스하는 데 권장되는 방법인 워크로드 아이덴티티를 사용 설정하는 데 사용됩니다.
  • MESH_ID는 Cloud 콘솔의 Cloud Service Mesh 대시보드에 측정항목을 표시하는 데 필요한 클러스터에 mesh_id 라벨을 설정하는 데 사용됩니다.

충분한 권한 확인

  • Cloud Shell에서 사용자 계정에 소유자 역할이 할당되어 있는지 확인합니다.
gcloud projects get-iam-policy $PROJECT_ID \ --flatten="bindings[].members" \ --filter="bindings.members:user:$(gcloud config get-value core/account 2>/dev/null)"

출력:

bindings: members: user:student-xx-xxxx@qwiklabs.net role: roles/owner ... 참고: 학습자 사용자에게는 뷰어 권한도 있습니다. 참고: 설정을 완료하려면 다음 역할과 연결된 권한이 필요합니다.
  • 프로젝트 편집자
  • Kubernetes Engine 관리자
  • 프로젝트 IAM 관리자
  • GKE 허브 관리자
  • 서비스 계정 관리자
  • 서비스 계정 키 관리자
소유자 역할이 있는 경우 이러한 권한을 비롯한 모든 권한이 있으므로 계속 진행할 수 있습니다.

작업 2. GKE 클러스터 설정

클러스터 만들기

  1. Cloud Shell에서 다음 명령어를 실행하여 Kubernetes 클러스터 central을 만듭니다.
gcloud config set compute/zone ${CLUSTER_ZONE} gcloud container clusters create ${CLUSTER_NAME} \ --machine-type=e2-standard-4 \ --num-nodes=4 \ --subnetwork=default \ --release-channel=regular \ --labels mesh_id=${MESH_ID} \ --workload-pool=${WORKLOAD_POOL} \ --logging=SYSTEM,WORKLOAD

출력:

NAME: central LOCATION: {{{project0.default_zone | zone}}} MASTER_VERSION: 1.35.3-gke.2190000 MASTER_IP: 35.245.2.147 MACHINE_TYPE: e2-standard-4 NODE_VERSION: 1.35.3-gke.2190000 NUM_NODES: 4 STATUS: RUNNING

클러스터 생성이 완료되는 데 몇 분 정도 걸립니다.

  1. 클러스터 생성이 완료되면 다음 명령어 시퀀스를 실행하여 fleet service mesh를 활성화하고, 관리자 권한을 구성하고, istio-system 네임스페이스를 설정합니다.
gcloud container fleet mesh enable kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user=$(gcloud config get-value account) kubectl create namespace istio-system
  1. 클러스터를 가리키도록 kubectl을 구성합니다.
gcloud container clusters get-credentials ${CLUSTER_NAME} \ --zone $CLUSTER_ZONE \ --project $PROJECT_ID

작업 3. Cloud Service Mesh 설치 준비

Google은 Cloud Service Mesh를 설치하거나 업그레이드할 수 있는 도구인 asmcli를 제공합니다. 사용자가 허용하면 asmcli가 프로젝트 및 클러스터를 다음과 같이 구성합니다.

  • Google Cloud 프로젝트에 필요한 Identity and Access Management(IAM) 권한을 부여합니다.
  • Cloud 프로젝트에서 필요한 Google API를 사용 설정합니다.
  • 메시를 식별하는 라벨을 클러스터에 설정합니다.
  • 사이드카 프록시와 같은 데이터 영역 구성요소가 프로젝트의 데이터 및 리소스에 안전하게 액세스할 수 있는 서비스 계정을 만듭니다.
  • 아직 등록되지 않은 경우 Fleet에 클러스터를 등록합니다.

asmcli를 사용하여 클러스터에 Cloud Service Mesh를 설치합니다.

  1. Cloud Service Mesh 1.28을 설치하는 버전을 현재 작업 디렉터리에 다운로드합니다.
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.28 > asmcli
  1. 스크립트를 실행 가능하게 만듭니다.
chmod +x asmcli
  1. Service Mesh API를 사용 설정합니다.
gcloud services enable mesh.googleapis.com

작업 4. Cloud Service Mesh 검증

asmcli validate를 실행하여 프로젝트와 클러스터가 Cloud Service Mesh를 설치하는 데 필요한 대로 설정되었는지 확인할 수 있습니다. 이 옵션을 사용하면 asmcli에서 프로젝트나 클러스터를 변경하지 않으며 Cloud Service Mesh를 설치하지 않습니다.

asmcli로 다음을 확인할 수 있습니다.

  • 환경에 필요한 도구가 있습니다.
  • 클러스터가 최소 요구사항을 충족합니다.
  • 지정된 프로젝트에 대해 필요한 권한이 있습니다.
  • 필요한 모든 Google API가 프로젝트에 사용 설정되어 있습니다.
  1. 다음 명령어를 실행하여 구성을 검증하고 설치 파일 및 asm 패키지를 OUTPUT_DIR 디렉터리에 다운로드합니다.
./asmcli validate \ --project_id $PROJECT_ID \ --cluster_name $CLUSTER_NAME \ --cluster_location $CLUSTER_ZONE \ --fleet_id $PROJECT_ID \ --output_dir ./asm_output 참고: 이 경우 유효성 검사는 ASM이 올바르게 설치되었는지 확인하기 위한 것이 아니라, 클러스터에 ASM을 설치하는 데 필요한 모든 구성요소가 있는지 확인하기 위한 것이므로 유효성 검사 오류는 무시해도 됩니다.

성공하면 다음과 비슷한 출력이 표시됩니다.

asmcli: Setting up necessary files... asmcli: Using asm_kubeconfig as the kubeconfig... asmcli: Checking installation tool dependencies... asmcli: Fetching/writing GCP credentials to kubeconfig file... asmcli: Verifying connectivity (10s)... asmcli: kubeconfig set to asm_kubeconfig asmcli: using context gke_example-project-12345_us-west1_cluster-2 asmcli: Getting account information... asmcli: Downloading ASM.. asmcli: Downloading ASM kpt package... fetching package "/asm" from "https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages" to "asm" asmcli: Checking required APIs... asmcli: Checking for project example-project-12345... asmcli: Reading labels for us-west1/cluster-2... asmcli: Checking for istio-system namespace... asmcli: Confirming node pool requirements for example-project-12345/us-west1/cluster-2... asmcli: Checking Istio installations... asmcli: [WARNING]: There is no way to validate that the meshconfig API has been initialized. asmcli: [WARNING]: This needs to happen once per GCP project. If the API has not been initialized asmcli: [WARNING]: for example-project-12345, please re-run this tool with the --enable_gcp_components asmcli: [WARNING]: flag. Otherwise, installation will succeed but Cloud Service Mesh asmcli: [WARNING]: will not function correctly. asmcli: Successfully validated all requirements to install ASM. 참고: 이 실습에서는 검증 명령어의 경고를 처리하는 데 필요한 플래그를 제공합니다.

작업 5. Cloud Service Mesh 설치

다음 명령어를 실행하면 Cloud Service Mesh가 설치됩니다. --enable_all 플래그를 사용하면 스크립트가 필요한 Google API를 사용 설정하고, Identity and Access Management 권한을 설정하고, 클러스터에 필요한 업데이트를 적용할 수 있습니다. 여기에는 GKE 워크로드 아이덴티티 사용 설정이 포함됩니다.

  1. 다음 명령어를 실행하여 Cloud Service Mesh를 설치합니다.
./asmcli install \ --project_id $PROJECT_ID \ --cluster_name $CLUSTER_NAME \ --cluster_location $CLUSTER_ZONE \ --fleet_id $PROJECT_ID \ --output_dir ./asm_output \ --enable_all \ --option legacy-default-ingressgateway \ --ca mesh_ca \ --enable_gcp_components

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

asmcli: ***************************** asmcli: Successfully installed ASM.

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. Cloud Service Mesh 설치

인그레스 게이트웨이 설치

Cloud Service Mesh는 서비스 메시의 일부로 게이트웨이를 배포 및 관리하는 옵션을 제공합니다. 게이트웨이는 들어오거나 나가는 HTTP/TCP 연결을 수신하는 메시의 에지에서 작동하는 부하 분산기를 설명합니다. 게이트웨이는 메시로 들어오고 나가는 트래픽을 세밀하게 제어할 수 있도록 해주는 Envoy 프록시입니다.

  1. 인그레스 게이트웨이의 네임스페이스가 없다면 하나 만듭니다. 게이트웨이는 사용자 워크로드입니다. 권장사항에 따라 컨트롤 플레인 네임스페이스에 배포하지 않아야 합니다.
GATEWAY_NS=istio-gateway kubectl create namespace $GATEWAY_NS
  1. 게이트웨이 네임스페이스에 버전 라벨을 적용하여 게이트웨이에서 자동 삽입을 사용 설정합니다. 버전 라벨은 사이드카 인젝터 웹훅에서 삽입된 프록시를 특정 컨트롤 플레인 버전과 연결하는 데 사용됩니다.

    • 다음 명령어를 사용하여 istiod에서 버전 라벨을 찾습니다.
    kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
    • 이 값을 환경 변수에 저장합니다.
    REVISION=$(kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}')
    • 네임스페이스에 버전 라벨을 적용합니다. 다음 명령어에서 REVISION은 이전 단계에서 기록한 istiod 버전 라벨의 값입니다.
    kubectl label namespace $GATEWAY_NS \ istio.io/rev=$REVISION --overwrite
    • Istio의 프록시 삽입을 사용 설정합니다.
    kubectl label namespace default istio-injection=enabled kubectl label namespace $GATEWAY_NS istio-injection=enabled
  2. --output_dir에서 지정한 디렉터리로 변경합니다.

cd ~/asm_output
  1. samples/gateways/istio-ingressgateway/ 디렉터리에 있는 예시 인그레스 게이트웨이 구성을 있는 그대로 배포해도 되고 필요에 따라 수정해도 됩니다.
kubectl apply -n $GATEWAY_NS \ -f samples/gateways/istio-ingressgateway

사이드카 삽입 사용 설정

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

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

  2. 자동 삽입을 사용 설정하려면 버전 라벨을 적용하고 istio-injection 라벨이 있는 경우 삭제합니다.

  3. 다음 명령어에서 자동 삽입을 사용 설정할 네임스페이스(default)를 지정합니다. REVISION은 이전 단계에서 기록한 버전 라벨입니다.

kubectl label namespace default istio-injection-istio.io/rev=$REVISION --overwrite 참고: 출력에서 "istio-injection" not found라는 메시지가 표시될 경우 무시해도 됩니다. 이 메시지는 해당 네임스페이스에 istio-injection 라벨이 원래부터 없었다는 뜻입니다. Cloud Service Mesh를 새로 설치하거나 새로 배포한 환경에서는 라벨이 없는 것이 정상적인 상태입니다. 참고: 이제 향후 워크로드에 대해 사이드카 프록시 삽입이 사용 설정됩니다.

이 클러스터에서 워크로드를 이미 실행 중인 경우 포드를 다시 시작하여 자동 삽입을 다시 트리거해야 합니다.

작업 6. Istio 지원 멀티 서비스 애플리케이션인 Bookinfo 배포

이 작업에서는 Bookinfo 샘플 마이크로서비스 애플리케이션을 설정하고 앱을 살펴봅니다.

Bookinfo 개요

이제 ASM이 구성되고 확인되었으므로 설치와 함께 제공되는 샘플 애플리케이션 중 하나인 BookInfo를 배포할 수 있습니다. BookInfo는 모두 Istio를 사용하여 관리되는 4개의 마이크로서비스로 구성된 간단한 모의 서점 애플리케이션입니다. 각 마이크로서비스는 서로 다른 언어로 작성되어 코드 변경 없이 다국어 환경에서 Istio를 사용하는 방법을 보여줍니다.

마이크로서비스는 다음과 같습니다.

  • productpage: details 및 reviews 마이크로서비스를 호출하여 페이지를 채웁니다.
  • details: 도서 정보를 포함합니다.
  • reviews: 도서 리뷰를 포함합니다. 또한 ratings 마이크로서비스를 호출합니다.
  • ratings: 도서 리뷰와 함께 표시되는 도서 평점 정보를 포함합니다.

reviews 마이크로서비스에는 세 가지 버전이 있습니다.

  • reviews v1은 ratings 서비스를 호출하지 않습니다.
  • reviews v2는 ratings 서비스를 호출하고 각 평점을 1~5개의 검은색 별로 표시합니다.
  • reviews v3는 ratings 서비스를 호출하고 각 평점을 1~5개의 빨간색 별로 표시합니다.

애플리케이션의 엔드 투 엔드 아키텍처는 다음과 같습니다.

Bookinfo 아키텍처

이 예시에서 사용된 소스 코드 및 다른 모든 파일은 Istio samples/bookinfo 디렉터리에서 찾을 수 있습니다.

Bookinfo 배포

  1. Bookinfo 애플리케이션을 설명하는 .yaml을 살펴봅니다.

    istio_dir=$(ls -d istio-* | tail -n 1) cd $istio_dir cat samples/bookinfo/platform/kube/bookinfo.yaml

    containers를 찾아 Bookinfo 애플리케이션의 서비스 버전마다 각 배포에 하나의 컨테이너가 있는지 확인합니다.

  2. Cloud Shell에서 다음 명령어를 사용하여 배포된 각 애플리케이션 포드와 함께 프록시 사이드카를 inject합니다.

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml 참고:

    Istio는 오픈소스 Envoy 프록시의 확장 버전을 사용합니다. Envoy 프록시는 C++로 개발된 고성능 프록시로, 서비스 메시 내 모든 서비스의 모든 인바운드/아웃바운드 트래픽을 중재하는 역할을 합니다.

    Istio는 동적 서비스 검색, 부하 분산, TLS 종료, HTTP/2 및 gRPC 프록시, 회로 차단기, 상태 점검, % 기반 트래픽 분할이 적용된 단계적 출시, 결함 삽입, 풍부한 측정항목 등 Envoy의 다양한 기본 제공 기능을 활용합니다.

    출력:

    service/details created serviceaccount/bookinfo-details created deployment.apps/details-v1 created service/ratings created serviceaccount/bookinfo-ratings created deployment.apps/ratings-v1 created service/reviews created serviceaccount/bookinfo-reviews created deployment.apps/reviews-v1 created deployment.apps/reviews-v2 created deployment.apps/reviews-v3 created service/productpage created serviceaccount/bookinfo-productpage created deployment.apps/productpage-v1 created

내 진행 상황 확인하기를 클릭하여 목표를 확인합니다. BookInfo 애플리케이션 배포

Istio 인그레스 게이트웨이를 사용하여 외부 액세스 사용 설정

이제 Bookinfo 서비스가 정상적으로 실행되고 있으므로 Kubernetes 클러스터 외부에서(예: 브라우저에서) 애플리케이션에 액세스할 수 있도록 해야 합니다. 이를 위해 Istio 게이트웨이를 사용합니다.

  1. 애플리케이션 인그레스 게이트웨이의 구성을 설명하는 .yaml을 살펴봅니다.

    cat samples/bookinfo/networking/bookinfo-gateway.yaml

    배포되는 Gateway 및 VirtualService 메시 리소스를 찾습니다. Gateway는 서비스 메시 외부의 사용자에게 서비스를 노출하고 모니터링, 경로 규칙과 같은 Istio 기능을 클러스터로 들어오는 트래픽에 적용할 수 있도록 합니다.

  2. 나중에 사용할 외부 IP를 노출하는 애플리케이션의 인그레스 게이트웨이를 구성합니다.

    kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

    출력:

    gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created

Bookinfo 배포 확인

  1. 애플리케이션이 올바르게 배포되었는지 확인하고 서비스, 포드, 인그레스 게이트웨이를 검토합니다.

    kubectl get services

    출력:

    NAME TYPE ... details ClusterIP ... kubernetes ClusterIP ... productpage ClusterIP ... ratings ClusterIP ... reviews ClusterIP ...
  2. 실행 중인 애플리케이션 포드를 검토합니다.

    kubectl get pods

    출력:

    NAME READY STATUS RESTARTS AGE details-v1-79f774bdb9-6l54w 2/2 Running 0 101s productpage-v1-6b746f74dc-4xccm 2/2 Running 0 100s ratings-v1-b6994bb9-7g4z2 2/2 Running 0 100s reviews-v1-545db77b95-hkh9p 2/2 Running 0 100s reviews-v2-7bf8c9648f-cmsxj 2/2 Running 0 100s reviews-v3-84779c7bbc-8b8qp 2/2 Running 0 100s

    6개의 포드가 모두 실행 중 상태가 될 때까지 이 명령어를 다시 실행해야 할 수 있습니다.

  3. 클러스터 내의 포드(예: ratings)에서 Bookinfo 애플리케이션으로 curl 요청을 전송하여 Bookinfo 애플리케이션이 실행 중인지 확인합니다.

    kubectl exec -it $(kubectl get pod -l app=ratings \ -o jsonpath='{.items[0].metadata.name}') \ -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"

    출력:

    간단한 서점 앱
  4. 인그레스 게이트웨이가 생성되었는지 확인합니다.

    kubectl get gateway

    출력:

    NAME AGE bookinfo-gateway 20m
  5. 인그레스 게이트웨이의 외부 IP 주소를 가져옵니다.

    kubectl get svc istio-ingressgateway -n istio-system

    출력:

    NAME TYPE ... EXTERNAL-IP ... istio-ingressgateway LoadBalancer ... 34.72.220.30 ...

    이 예시에서 인그레스 게이트웨이의 외부 IP는 34.72.220.30입니다.

  6. 이제 다음 명령어를 실행하여 [EXTERNAL-IP]를 이전 명령어에서 출력된 외부 IP로 바꿉니다.

    export GATEWAY_URL=[EXTERNAL-IP]
  7. 클러스터 외부에서 Bookinfo 앱에 curl 요청을 전송하여 앱이 실행 중인지 확인합니다.

    curl -I http://${GATEWAY_URL}/productpage

    출력:

    HTTP/1.1 200 OK content-type: text/html; charset=utf-8 content-length: 4183 server: istio-envoy ...

작업 7. Bookinfo 애플리케이션 사용

웹브라우저에서 애플리케이션 사용해 보기

  1. 브라우저에서 http://[$GATEWAY_URL]/productpage로 이동하여 BookInfo 웹페이지를 확인합니다. [$GATEWAY_URL]을 작동 중인 외부 IP 주소로 바꿔야 합니다.

    Bookinfo 제품 페이지

  2. 페이지를 여러 번 새로고침합니다.

    아직 Istio를 사용해 버전 라우팅을 제어하지 않았으므로 서로 다른 세 가지 버전의 리뷰가 표시됩니다.

    라운드 로빈 스타일로 호출되는 세 가지 도서 리뷰 서비스가 있습니다.

    • 별 없음
    • 검은색 별
    • 빨간색 별

    세 가지 버전 사이에서의 전환은 정상적인 Kubernetes 라우팅/분산 동작입니다.

일정한 백그라운드 부하 생성

siege 유틸리티를 실행하여 Bookinfo로 가는 트래픽을 시뮬레이션합니다.

  1. Cloud Shell에서 siege를 설치합니다.

    siege는 웹사이트에 대해 부하를 생성하는 유틸리티입니다.

    sudo apt install siege
  2. siege를 사용하여 서비스에 대한 트래픽을 만듭니다.

    siege http://${GATEWAY_URL}/productpage

작업 8. Cloud Service Mesh 대시보드를 사용하여 서비스 성능 평가

서비스 테이블 뷰에서 데이터 수집

  1. 콘솔에서 탐색 메뉴 > Kubernetes Engine > Service Mesh로 이동합니다.

메시지가 표시되면 사용 설정을 클릭하여 Service Mesh API를 사용 설정합니다.

  1. 서비스 섹션을 확인합니다.

    등록된 서비스는 몇 개인가요?

  2. productpage 서비스를 클릭하여 세부정보를 상세히 살펴봅니다.

    productpage 서비스가 강조 표시됨

    상단의 요약에서 초당 현재 요청 수, 오류율, 지연 시간, 리소스 사용량을 확인합니다.

    요청 > 0이 표시되지 않으면 productpage 서비스를 종료했다가 몇 분 후에 다시 입력해 보세요.

  3. 측정항목 옵션을 클릭합니다. 다양한 그래프와 분류 옵션을 살펴봅니다.

    • 현재 요청 비율은 얼마이며, 시간이 지나면서 어떻게 변했나요?
    • 현재 오류율은 얼마이며 시간이 지나면서 어떻게 변했나요?
    • 차트에 어떤 지연 시간이 표시되나요?
    • 요청 크기의 중앙값은 얼마인가요?
    • 응답 크기의 중앙값은 얼마인가요?
    • CPU 사용량 합계는 얼마인가요?
  4. 연결된 서비스 옵션을 클릭합니다.

    여기에는 productpage에 인바운드 요청을 하는 다른 서비스와 productpage가 아웃바운드 요청을 하는 서비스가 나열됩니다.

    • productpage 서비스를 호출하는 서비스는 무엇인가요?
    • productpage 서비스가 호출하는 서비스는 무엇인가요?
    • 서비스 간 호출에 mTLS가 적용되나요?
    참고: 평점 서비스는 일반적으로 productpage 서비스에 요청을 보내지 않습니다. 이 실습에서 테스트 요청을 보내는 데 평점 서비스를 사용했기 때문에 여기에 평점 서비스가 표시됩니다.
  5. 왼쪽 상단의 Cloud Service Mesh 로고를 클릭하여 Cloud Service Mesh 대시보드로 돌아갑니다.

이때 다른 서비스를 탐색하거나 상세히 살펴볼 수 있습니다.

참고:

대시보드의 상단 섹션에는 서비스 수준 목표(SLO) 및 알림에 대한 정보가 표시됩니다.

SLO는 서비스 수준 지표(SLI)의 목표이며, 서비스가 얼마나 잘 실행되어야 하는지에 대한 기준을 정의합니다. 예를 들어 시간당 요청의 99.9%가 200 응답을 반환해야 한다는 것이 하나의 SLO가 될 수 있습니다. 서비스가 SLO를 충족하지 못할 때 대기 중인 직원을 호출하는 알림 정책을 정의할 수 있습니다.

SLO를 정의하고 테스트할 수 있는 다른 실습을 찾아보세요.

토폴로지 뷰를 통해 메시를 시각적으로 더 잘 이해하기

  1. Cloud Service Mesh 대시보드에서 토폴로지를 확인합니다.

    여기에 토폴로지 그래프가 표시되기까지 몇 분 정도 기다려야 할 수 있습니다.

  2. 서비스와 워크로드 간의 관계가 시각적으로 더 잘 드러나도록 그래프의 노드를 재정렬합니다.

    외부 요청은 productpage에서 시작됩니다. Bookinfo 개요에서 Bookinfo 아키텍처 다이어그램을 다시 스크롤하여 살펴볼 수 있습니다.

    다이어그램은 다음과 같을 수 있습니다.

    Service Mesh 다이어그램

    참고: 모든 노드를 보려면 펼치기를 클릭해야 할 수 있습니다.
  3. productpage 서비스 노드를 클릭합니다.

    서비스 세부정보 카드가 표시됩니다.

    서비스 세부정보 카드

    • 이 서비스가 수신하는 초당 요청 수는 몇 개인가요?
    • 중앙값 및 99% 지연 시간은 얼마인가요?
  4. 이제 각 서비스 노드 위로 마우스를 가져가면 에지 통계가 표시됩니다.

    • productpage 서비스가 수신하는 초당 요청 수는 몇 개이며 어디에서 수신하나요?
    • 서비스가 productpage-v1 워크로드로 전달하는 초당 요청 수는 몇 개인가요?

    다음과 같은 트래픽 세부정보가 표시됩니다.

    트래픽 세부정보 다이어그램

  5. 배포, 복제본 세트, 포드가 표시될 때까지 워크로드 중 하나를 상세히 살펴봅니다.

    다음과 같은 결과를 확인할 수 있습니다.

    배포, 복제본 세트, 포드 다이어그램

수고하셨습니다

이 실습에서는 GKE 클러스터, Cloud Service Mesh, Istio 지원 애플리케이션을 배포했습니다. 또한 Cloud Service Mesh 대시보드를 통해 애플리케이션의 서비스 성능과 토폴로지를 더 잘 파악할 수 있었습니다.

다음 단계/더 학습하기

Google Cloud 교육 및 자격증

Google Cloud 기술을 최대한 활용하는 데 도움이 됩니다. Google 강의에는 빠른 습득과 지속적인 학습을 지원하는 기술적인 지식과 권장사항이 포함되어 있습니다. 기초에서 고급까지 수준별 학습을 제공하며 바쁜 일정에 알맞은 주문형, 실시간, 가상 옵션이 포함되어 있습니다. 인증은 Google Cloud 기술에 대한 역량과 전문성을 검증하고 입증하는 데 도움이 됩니다.

설명서 최종 업데이트: 2026년 6월 9일

실습 최종 테스트: 2026년 6월 9일

Copyright 2026 Google LLC. All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.

시작하기 전에

  1. 실습에서는 정해진 기간 동안 Google Cloud 프로젝트와 리소스를 만듭니다.
  2. 실습에는 시간 제한이 있으며 일시중지 기능이 없습니다. 실습을 종료하면 처음부터 다시 시작해야 합니다.
  3. 화면 왼쪽 상단에서 실습 시작을 클릭하여 시작합니다.

시크릿 브라우징 사용

  1. 실습에 입력한 사용자 이름과 비밀번호를 복사합니다.
  2. 비공개 모드에서 콘솔 열기를 클릭합니다.

콘솔에 로그인

    실습 사용자 인증 정보를 사용하여
  1. 로그인합니다. 다른 사용자 인증 정보를 사용하면 오류가 발생하거나 요금이 부과될 수 있습니다.
  2. 약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
  3. 실습을 완료했거나 다시 시작하려고 하는 경우가 아니면 실습 종료를 클릭하지 마세요. 이 버튼을 클릭하면 작업 내용이 지워지고 프로젝트가 삭제됩니다.

현재 이 콘텐츠를 이용할 수 없습니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

감사합니다

이용할 수 있게 되면 이메일로 연락드리겠습니다.

한 번에 실습 1개만 가능

모든 기존 실습을 종료하고 이 실습을 시작할지 확인하세요.

시크릿 브라우징을 사용하여 실습 실행하기

이 실습을 실행하는 가장 좋은 방법은 시크릿 모드 또는 시크릿 브라우저 창을 사용하는 것입니다. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.