이 페이지에서는 Anthos Service Mesh를 시연하기 위해 샘플 애플리케이션을 배포하는 방법을 설명합니다. Anthos Service Mesh를 설치하지 않은 경우 설치 가이드 섹션을 참조하여 적합한 가이드를 선택하세요.
Anthos Service Mesh와 함께 몇 가지 샘플 애플리케이션이 설치됩니다. 이 가이드에서는 BookInfo 샘플을 배포하는 과정을 안내합니다. 모두 Anthos Service Mesh를 사용하여 관리되는 웹 제품 페이지, 도서 세부정보, 리뷰(여러 버전의 리뷰 서비스 사용), 평점을 제공하는 4가지 서비스로 구성된 간단한 샘플 Bookstore 애플리케이션입니다. 이 예시에서 사용된 소스 코드 및 다른 모든 파일은 samples/bookinfo
의 Anthos Service Mesh 설치 디렉터리에서 찾을 수 있습니다.
사이드카 자동 삽입 사용 설정
샘플 애플리케이션에 대해 사이드카 자동 삽입(자동 삽입)을 사용 설정하려면 버전 라벨을 샘플 네임스페이스에 추가해야 합니다. 추가하는 라벨은 Anthos Service Mesh Google 관리 제어 영역을 배포했거나 클러스터 내 제어 영역을 설치했는지에 따라 달라집니다. 버전 라벨은 사이드카 인젝터 웹훅에서 삽입된 사이드카를 특정 제어영역 버전과 연결하는 데 사용됩니다.
클러스터 내
다음 명령어를 사용하여
istiod
에서 라벨을 찾습니다.kubectl -n istio-system get pods -l app=istiod --show-labels
출력은 다음과 유사합니다.
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-173-3-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-198-6,istio=istiod,pod-template-hash=5788d57586 istiod-asm-173-3-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-198-6,istio=istiod,pod-template-hash=5788d57586
출력의
LABELS
열 아래에서istio.io/rev=
프리픽스 다음에 있는istiod
버전 라벨의 값을 확인합니다. 이 예시에서 값은asm-198-6
입니다.기본 네임스페이스에 버전 라벨을 적용합니다. 다음 명령어에서
REVISION
은 이전 단계에서 확인한istiod
버전 라벨의 값입니다.kubectl label namespace default istio-injection- istio.io/rev=REVISION --overwrite
출력에서
"istio-injection not found"
메시지는 무시해도 됩니다. 즉, 네임스페이스에 이전에istio-injection
라벨이 사용되지 않았으며, Anthos Service Mesh를 새로 설치하거나 새로 배포해야 합니다. 네임스페이스에istio-injection
및 버전 라벨이 모두 포함된 경우 자동 삽입이 실패하기 때문에 Anthos Service Mesh 문서에서 모든kubectl label
명령어에는istio-injection
라벨 삭제가 포함됩니다.
Google 관리
default
네임스페이스에 asm-managed
버전 라벨을 적용합니다.
kubectl label namespace default istio-injection- istio.io/rev=asm-managed --overwrite
출력에서 "istio-injection not found"
메시지는 무시해도 됩니다. 즉, 네임스페이스에 이전에 istio-injection
라벨이 사용되지 않았으며, Anthos Service Mesh를 새로 설치하거나 새로 배포해야 합니다. 네임스페이스에 istio-injection
및 버전 라벨이 모두 포함된 경우 자동 삽입이 실패하기 때문에 Anthos Service Mesh 문서에서 모든 kubectl label
명령어에는 istio-injection
라벨 삭제가 포함됩니다.
애플리케이션 배포
이제 자동 삽입이 default
네임스페이스에 사용 설정되었으므로, BookInfo 애플리케이션의 서비스를 배포하면 사이드카 프록시가 각 서비스와 함께 삽입됩니다.
Anthos Service Mesh가 설치된 컴퓨터의 명령줄에서 Anthos Service Mesh 설치 디렉터리의 루트로 이동합니다. 필요한 경우 설치 파일을 다운로드합니다.
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용 GKE에 Anthos Service Mesh를 설치한 경우 Anthos Service Mesh를 설치한 후에 구성한 인그레스 게이트웨이의 외부 IP 주소를 가져옵니다.
GKE에 Anthos 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
이 표시되면 애플리케이션이 Anthos Service Mesh와 함께 올바르게 작동되고 있음을 나타냅니다.BookInfo 웹페이지를 보려면 브라우저에 다음 주소를 입력합니다.
http://EXTERNAL_IP/productpage
페이지를 여러 번 새로고침하면 여러 버전의 리뷰가 제품 페이지에 라운드 로빈 스타일로 표시됩니다(빨간색 별, 검은색 별, 별 없음).
이제 트래픽을 생성하는 애플리케이션이 있으므로 Google Cloud Console에서 Anthos 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