Bookinfo 샘플 배포
이 페이지에서는 Cloud Service Mesh를 시연하기 위해 샘플 애플리케이션을 배포하는 방법을 설명합니다. Cloud Service Mesh에 온보딩하지 않은 경우 온보딩 가이드를 참고하세요.
Cloud Service Mesh와 함께 몇 가지 샘플 애플리케이션이 설치됩니다. 이 가이드에서는 BookInfo 샘플을 배포하는 과정을 안내합니다. 모두 Cloud Service Mesh를 사용하여 관리되는 웹 제품 페이지, 도서 세부정보, 리뷰(여러 버전의 리뷰 서비스 사용), 평점을 제공하는 4가지 서비스로 구성된 간단한 샘플 Bookstore 애플리케이션입니다. 이 예시에서 사용된 소스 코드 및 다른 모든 파일은 samples/bookinfo
의 Cloud Service Mesh 설치 디렉터리에서 찾을 수 있습니다.
사이드카 자동 삽입 사용 설정
네임스페이스의 삽입을 사용 설정합니다. 이 단계는 컨트롤 플레인 구현에 따라 다릅니다.
관리형(TD)
- 기본 삽입 라벨을 네임스페이스에 적용합니다.
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
관리형(Istiod)
권장: 다음 명령어를 실행하여 네임스페이스에 기본 삽입 라벨을 적용합니다.
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
관리형 Istiod 컨트롤 플레인이 있는 기존 사용자: 기본 삽입을 사용하는 것이 좋지만 버전 기반 삽입은 지원됩니다. 다음 안내를 따르세요.
다음 명령어를 실행하여 사용 가능한 출시 채널을 찾습니다.
kubectl -n istio-system get controlplanerevision
출력은 다음과 비슷합니다.
NAME AGE asm-managed-rapid 6d7h
참고: 위 목록에 두 개의 컨트롤 플레인 버전이 표시되면 하나를 삭제합니다. 클러스터에 여러 컨트롤 플레인 채널을 두는 방식은 지원되지 않습니다.
출력에서
NAME
열 아래의 값은 Cloud Service Mesh 버전에 사용 가능한 출시 채널에 해당하는 버전 라벨입니다.네임스페이스에 버전 라벨을 적용합니다.
kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
클러스터 내
권장: 다음 명령어를 실행하여 네임스페이스에 기본 삽입 라벨을 적용합니다.
kubectl label namespace default \ istio.io/rev- istio-injection=enabled --overwrite
기본 삽입을 사용하는 것이 좋지만 버전 기반 삽입이 지원됩니다. 다음 안내를 따르세요.
다음 명령어를 사용하여
istiod
에서 버전 라벨을 찾습니다.kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
네임스페이스에 버전 라벨을 적용합니다. 다음 명령어에서
REVISION_LABEL
은 이전 단계에서 확인한istiod
버전 라벨의 값입니다.kubectl label namespace default \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
애플리케이션 배포
이제 자동 삽입이 default
네임스페이스에 사용 설정되었으므로, BookInfo 애플리케이션의 서비스를 배포하면 사이드카 프록시가 각 서비스와 함께 삽입됩니다.
Cloud Service Mesh가 설치된 컴퓨터의 명령줄에서 Cloud Service Mesh 설치 디렉터리의 루트로 이동합니다. 필요한 경우 Bookinfo 샘플 애플리케이션이 포함된 클러스터 내 설치 파일을 다운로드하고 압축을 풉니다.
kubectl
을 사용하여 애플리케이션을 기본 네임스페이스에 배포합니다.kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
다음 명령어를 실행하여 애플리케이션이 올바르게 배포되었는지 확인합니다.
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
마지막으로 애플리케이션에 대해 인그레스 게이트웨이 라우팅을 정의합니다.
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
입니다.
애플리케이션 시험 사용
curl
을 사용하여 BookInfo 앱이 실행되는지 확인합니다.curl -I http://EXTERNAL_IP/productpage
응답에
200
이 표시되면 애플리케이션이 Cloud Service Mesh와 함께 올바르게 작동되고 있음을 나타냅니다.BookInfo 웹페이지를 보려면 브라우저에 다음 주소를 입력합니다.
http://EXTERNAL_IP/productpage
페이지를 여러 번 새로고침하면 여러 버전의 리뷰가 제품 페이지에 라운드 로빈 스타일로 표시됩니다(빨간색 별, 검은색 별, 별 없음).
이제 트래픽을 생성하는 애플리케이션이 있으므로 Google Cloud 콘솔에서 Cloud Service Mesh 페이지를 탐색하여 측정항목과 기타 관측 가능성 기능을 확인할 수 있습니다.
삭제
Bookinfo 샘플의 실험이 끝나면 클러스터에서 삭제합니다.
다음 스크립트를 사용하여 Bookinfo를 제거합니다.
samples/bookinfo/platform/kube/cleanup.sh
종료를 확인합니다.
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