Bookinfo 샘플 배포

이 페이지에서는 Cloud Service Mesh를 시연하기 위해 샘플 애플리케이션을 배포하는 방법을 설명합니다. Cloud Service Mesh에 온보딩하지 않은 경우 온보딩 가이드를 참고하세요.

Cloud Service Mesh와 함께 몇 가지 샘플 애플리케이션이 설치됩니다. 이 가이드에서는 BookInfo 샘플을 배포하는 과정을 안내합니다. 모두 Cloud Service Mesh를 사용하여 관리되는 웹 제품 페이지, 도서 세부정보, 리뷰(여러 버전의 리뷰 서비스 사용), 평점을 제공하는 4가지 서비스로 구성된 간단한 샘플 Bookstore 애플리케이션입니다. 이 예시에서 사용된 소스 코드 및 다른 모든 파일은 samples/bookinfo의 Cloud Service Mesh 설치 디렉터리에서 찾을 수 있습니다.

사이드카 자동 삽입 사용 설정

  1. 네임스페이스의 삽입을 사용 설정합니다. 이 단계는 컨트롤 플레인 구현에 따라 다릅니다.

    관리형(TD)

    1. 기본 삽입 라벨을 네임스페이스에 적용합니다.
    kubectl label namespace default \
        istio.io/rev- istio-injection=enabled --overwrite
    

    관리형(Istiod)

    권장: 다음 명령어를 실행하여 네임스페이스에 기본 삽입 라벨을 적용합니다.

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

    관리형 Istiod 컨트롤 플레인이 있는 기존 사용자: 기본 삽입을 사용하는 것이 좋지만 버전 기반 삽입은 지원됩니다. 다음 안내를 따르세요.

    1. 다음 명령어를 실행하여 사용 가능한 출시 채널을 찾습니다.

      kubectl -n istio-system get controlplanerevision
      

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

      NAME                AGE
      asm-managed-rapid   6d7h
      

      참고: 위 목록에 두 개의 컨트롤 플레인 버전이 표시되면 하나를 삭제합니다. 클러스터에 여러 컨트롤 플레인 채널을 두는 방식은 지원되지 않습니다.

      출력에서 NAME 열 아래의 값은 Cloud Service Mesh 버전에 사용 가능한 출시 채널에 해당하는 버전 라벨입니다.

    2. 네임스페이스에 버전 라벨을 적용합니다.

      kubectl label namespace default \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

    클러스터 내

    권장: 다음 명령어를 실행하여 네임스페이스에 기본 삽입 라벨을 적용합니다.

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

    기본 삽입을 사용하는 것이 좋지만 버전 기반 삽입이 지원됩니다. 다음 안내를 따르세요.

    1. 다음 명령어를 사용하여 istiod에서 버전 라벨을 찾습니다.

      kubectl get deploy -n istio-system -l app=istiod -o \
         jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
      
    2. 네임스페이스에 버전 라벨을 적용합니다. 다음 명령어에서 REVISION_LABEL은 이전 단계에서 확인한 istiod 버전 라벨의 값입니다.

      kubectl label namespace default \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

애플리케이션 배포

이제 자동 삽입이 default 네임스페이스에 사용 설정되었으므로, BookInfo 애플리케이션의 서비스를 배포하면 사이드카 프록시가 각 서비스와 함께 삽입됩니다.

  1. Cloud Service Mesh가 설치된 컴퓨터의 명령줄에서 Cloud Service Mesh 설치 디렉터리의 루트로 이동합니다. 필요한 경우 Bookinfo 샘플 애플리케이션이 포함된 클러스터 내 설치 파일을 다운로드하고 압축을 풉니다.

  2. kubectl을 사용하여 애플리케이션을 기본 네임스페이스에 배포합니다.

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
    
  3. 다음 명령어를 실행하여 애플리케이션이 올바르게 배포되었는지 확인합니다.

    kubectl get services
    

    출력:

    NAME                       CLUSTER-IP   EXTERNAL-IP   PORT(S)              AGE
    details                    10.0.0.31    <none>        9080/TCP             6m
    kubernetes                 10.0.0.1     <none>        443/TCP              7d
    productpage                10.0.0.120   <none>        9080/TCP             6m
    ratings                    10.0.0.15    <none>        9080/TCP             6m
    reviews                    10.0.0.170   <none>        9080/TCP             6m

    kubectl get pod
    

    출력:

    NAME                                        READY     STATUS    RESTARTS   AGE
    details-v1-1520924117-48z17                 2/2       Running   0          6m
    productpage-v1-560495357-jk1lz              2/2       Running   0          6m
    ratings-v1-734492171-rnr5l                  2/2       Running   0          6m
    reviews-v1-874083890-f0qf0                  2/2       Running   0          6m
    reviews-v2-1343845940-b34q5                 2/2       Running   0          6m
    reviews-v3-1813607990-8ch52                 2/2       Running   0          6m
  4. 마지막으로 애플리케이션에 대해 인그레스 게이트웨이 라우팅을 정의합니다.

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

    출력:

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

애플리케이션 배포 검증

BookInfo 애플리케이션이 작동하는지 확인하려면 인그레스 게이트웨이로 트래픽을 보내야 합니다.

  • VMware용 Google Distributed Cloud(소프트웨어 전용)에 Cloud Service Mesh를 설치한 경우 Cloud Service Mesh를 설치한 후 구성한 인그레스 게이트웨이의 외부 IP 주소를 가져옵니다.

  • GKE에 Cloud Service Mesh를 설치한 경우 다음과 같이 인그레스 게이트웨이의 외부 IP 주소를 가져옵니다.

    kubectl get service istio-ingressgateway -n istio-system
    

    출력:

    NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                      AGE
    istio-ingressgateway   LoadBalancer   10.19.247.233   35.239.7.64   80:31380/TCP,443:31390/TCP,31400:31400/TCP   27m

    이 예시에서 인그레스 서비스의 IP 주소는 35.239.7.64입니다.

애플리케이션 시험 사용

  1. curl을 사용하여 BookInfo 앱이 실행되는지 확인합니다.

    curl -I http://EXTERNAL_IP/productpage
    

    응답에 200이 표시되면 애플리케이션이 Cloud Service Mesh와 함께 올바르게 작동되고 있음을 나타냅니다.

  2. BookInfo 웹페이지를 보려면 브라우저에 다음 주소를 입력합니다.

    http://EXTERNAL_IP/productpage
    

    페이지를 여러 번 새로고침하면 여러 버전의 리뷰가 제품 페이지에 라운드 로빈 스타일로 표시됩니다(빨간색 별, 검은색 별, 별 없음).

이제 트래픽을 생성하는 애플리케이션이 있으므로 Google Cloud 콘솔에서 Cloud Service Mesh 페이지를 탐색하여 측정항목과 기타 관측 가능성 기능을 확인할 수 있습니다.

삭제

Bookinfo 샘플의 실험이 끝나면 클러스터에서 삭제합니다.

  1. 다음 스크립트를 사용하여 Bookinfo를 제거합니다.

    samples/bookinfo/platform/kube/cleanup.sh
    
  2. 종료를 확인합니다.

    kubectl get virtualservices   #-- there should be no virtual services
    kubectl get destinationrules  #-- there should be no destination rules
    kubectl get gateway           #-- there should be no gateway
    kubectl get pods              #-- the Bookinfo pods should be deleted
    

다음 단계

Bookinfo 샘플 자세히 알아보기