Istio 시작하기
IBM Cloud® Kubernetes Service에서 관리 Istio 추가 기능을 시작합니다. 이 일련의 단계에서 여러 Istio 서비스 메시 기능을 사용하여 연습할 BookInfo 샘플 앱을 배치합니다.
시작하기 전에, ‘ Istio ’ 애드온의 변경 내역을 확인하여 버전 정보를 파악하시기 바랍니다.
1단계: Istio 추가 기능 사용 설정
클러스터에서 관리 Istio 추가 기능을 설정합니다.
계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
-
istio추가 기능을 사용으로 설정하십시오.ibmcloud ks cluster addon enable istio --cluster CLUSTER_NAME_OR_ID -
관리 Istio 추가 기능에
Addon Ready상태가 있는지 확인하십시오. 추가 기능이 준비되는 데 몇 분이 걸릴 수 있습니다.ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_ID출력 예
Name Version Health State Health Status istio 1.29 normal Addon Ready -
추가 기능의 개별 컴포넌트를 체크아웃하여 Istio 팟(Pod)이 배치되었는지 확인할 수도 있습니다.
kubectl get pods -n istio-systemkubectl get svc -n istio-system
IBM Cloud Kubernetes Service의 Istio에 대한 자세한 정보는 관리 Istio 추가 기능 정보를 참조하십시오.
2단계: BookInfo 샘플 앱 설정
사용자가 Istio의 기능을 즉시 사용해 볼 수 있도록 BookInfo 샘플 애플리케이션에 기본 Istio 구성이 포함되어 있습니다.
네 개의 BookInfo 마이크로서비스에는 다음이 포함됩니다.
productpage는details및reviews마이크로서비스를 호출하여 페이지를 채웁니다.details에는 Book 정보가 포함되어 있습니다.ratings에는 Book 검토를 수반하는 Book 등급 정보가 포함되어 있습니다.reviews에는 Book 검토가 포함되어 있으며ratings마이크로서비스를 호출합니다.reviews마이크로서비스에는 여러 가지 버전이 있습니다.v1은ratings마이크로서비스를 호출하지 않습니다.v2는ratings마이크로서비스를 호출하고 등급을 1-5개의 검은색 별로 표시합니다.v3은ratings마이크로서비스를 호출하고 등급을 1-5개의 빨간색 별로 표시합니다.
BookInfo 앱은 Istio 게이트웨이의 공인 IP 주소에도 이미 노출되어 있습니다. BookInfo 아키텍처를 확인하려면 Istio 문서를 참고하세요.
-
클러스터에 BookInfo를 설치하십시오.
- BookInfo 앱의 구성 파일이 포함된 최신 Istio 패키지를 다운로드하십시오.
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.29.5 sh - ``` 2. Istio 패키지 디렉토리로 이동하십시오. ```sh {: pre} cd istio-1.29.5 ``` 3. Linux 및 macOS 사용자: `istioctl` 클라이언트를 `PATH` 시스템 변수에 추가하십시오. ```sh {: pre} export PATH=$PWD/bin:$PATH ``` 4. 자동 사이드카 인젝션의 `default` 네임스페이스에 레이블을 지정하십시오. 이제 `default`에 배치된 새 팟(Pod)이 Envoy 프록시 사이드카 컨테이너를 사용하여 자동으로 작성됩니다. ```sh {: pre} kubectl label namespace default istio-injection=enabled ``` 5. BookInfo 애플리케이션, 게이트웨이 및 대상 규칙을 배치하십시오. ```sh {: pre} kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml ``` 6. BookInfo 마이크로서비스 팟(Pod)이 `Running` 상태인지 확인하십시오. ```sh {: pre} kubectl get pods ``` ```sh {: screen} NAME READY STATUS RESTARTS AGE details-v1-6865b9b99d-7v9h8 2/2 Running 0 2m productpage-v1-f8c8fb8-tbsz9 2/2 Running 0 2m ratings-v1-77f657f55d-png6j 2/2 Running 0 2m reviews-v1-6b7f6db5c5-fdmbq 2/2 Running 0 2m reviews-v2-7ff5966b99-zflkv 2/2 Running 0 2m reviews-v3-5df889bcff-nlmjp 2/2 Running 0 2m ``` -
BookInfo를 노출하는
istio-ingressgateway로드 밸런서에 대한 공용 주소를 가져오십시오.- 클래식 클러스터
- Istio ingress IP 주소를 환경 변수로 설정하십시오.
export INGRESS_IP=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') - Istio ingress 포트를 환경 변수로 설정하십시오.
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}') - Istio ingress 호스트 및 포트를 사용하는
GATEWAY_URL환경 변수를 작성하십시오.export GATEWAY_URL=$INGRESS_IP:$INGRESS_PORT
- Istio ingress IP 주소를 환경 변수로 설정하십시오.
- VPC 클러스터: Istio ingress 호스트 이름을 사용하는
GATEWAY_URL환경 변수를 작성하십시오.
export GATEWAY_URL=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') ``` - 클래식 클러스터
-
GATEWAY_URL변수의 curl을 수행하여 BookInfo 앱이 실행 중인지 확인하십시오.200응답은 BookInfo 앱이 Istio에서 적절하게 실행 중임을 의미합니다.curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage -
브라우저에서 BookInfo 웹 페이지를 보십시오.
Mac OS 또는 Linux
open http://$GATEWAY_URL/productpageWindows
start http://$GATEWAY_URL/productpage -
페이지를 여러 번 새로 고쳐보십시오. 별이 없거나(
v1의reviews), 검은색 별이 있거나(v2), 빨간색 별이 있는(v3) 등 다양한 버전의 검토 섹션이 표시됩니다.
Istio에서 라우팅이 작동하는 방식에 대한 자세한 정보는 발생한 상황 파악을 참조하십시오.
3단계: BookInfo의 단계적 롤아웃 시뮬레이션
앱의 릴리스를 시뮬레이션하기 위해 BookInfo의 v3 마이크로서비스에 대한 단계적 롤아웃 reviews를 수행할 수 있습니다.
앱 테스트를 완료하고 실시간 트래픽을 이 앱으로 보내기 시작하면 Istio를 통해 점진적으로 롤아웃을 수행할 수 있습니다. 예를 들어, 먼저 사용자의 10%에게, 그 다음 사용자의 20% 등의 순으로 v3를 릴리스할 수 있습니다.
-
v1의v2으로 트래픽의 0% 를,v3로 트래픽의 90% 를, 그리고reviews로 트래픽의 10% 를 분배하도록 가상 서비스를 구성하십시오.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v1 weight: 0 - destination: host: reviews subset: v2 weight: 90 - destination: host: reviews subset: v3 weight: 10kubectl apply -f <filename>.yaml -
open http://$GATEWAY_URL/productpage(Mac OS 또는 Linux의 경우) 또는start http://$GATEWAY_URL/productpage(Windows의 경우)를 실행하여 브라우저에서 BookInfo 웹 페이지를 보십시오. -
페이지를 여러 번 새로 고쳐보십시오. 별이 없는 페이지(
v1)는 더 이상 표시되지 않으며 페이지 새로 고치기를 수행하면 대부분 검은색 별표(v2)를 표시합니다. 빨간색 별표(v3)가 표시된 페이지는 거의 없습니다. -
모든 트래픽이
v3로만 전송되도록 트래픽 분배를 변경하십시오. 실제 시나리오에서 모든 트래픽이 최신 버전으로만 라우팅될 때까지 트래픽 분배를 먼저 80:20으로, 그 다음 70:30의 순으로 변경하여 버전 변경을 점차 롤아웃할 수 있습니다.reviews가상 서비스에 대한 구성 파일을 편집하십시오.
kubectl edit VirtualService reviews ``` 2. `weight`의 `v2`를 `0`으로 변경하고 `weight`의 `v3`를 `100`으로 변경하십시오. 3. 파일을 저장한 후 닫으십시오. -
BookInfo 페이지를 여러 번 새로 고쳐보십시오. 검은색 별(
v2)이 있는 페이지는 더 이상 표시되지 않으며 빨간색 별(v3)이 있는 페이지만 표시됩니다. -
envoy 액세스 로그를 사용으로 설정한 경우: 검토
VirtualService에 대해 YAML 파일을 변경한 이후에v2에 대한 요청의 로그가 없는지 확인하십시오.kubectl logs -l app=reviews,version=v2 -c istio-proxy
4단계: IBM Cloud Monitoring에서 BookInfo 모니터링
Monitoring 에 미리 정의된 Istio 대시보드 중 하나를 사용하여 BookInfo 마이크로서비스를 모니터링하세요.
모니터링 에이전트를 클러스터에 배치하려면 다음 단계를 완료하십시오.
-
모니터링 콘솔에서 프로비저닝한 인스턴스의 [ 대시보드 열기 ]를 클릭합니다.
-
Monitoring UI에서 새 대시보드 추가를 클릭하십시오.
-
Istio를 검색한 후, Monitoring 에 미리 정의된 Istio 대시보드 중 하나를 선택하십시오.
메트릭 및 대시보드 참조, Istio 내부 구성 요소 모니터링, Istio A/B 배포 및 카나리아 배포 모니터링에 대한 자세한 내용은 ‘ Kubernetes 의 서비스 메시인 Istio 를 모니터링하는 방법 ’ 블로그 게시물을 참조하세요.
5단계: mTLS를 사용하여 클러스터 내 트래픽 보안
클러스터 내에서 상호 TLS(mTLS)를 달성하기 위해 네임스페이스에서 워크로드에 대한 암호화를 사용으로 설정합니다. 클러스터의 팟(Pod) 간의 Envoy에 의해 라우팅되는 트래픽은 TLS로 암호화됩니다. mTLS에 대한 인증서 관리는 Istio에서 처리합니다. 자세한 내용은 Istio 상호 TLS 문서를 참조하세요.
default.yaml이라는 인증 정책 파일을 작성하십시오. 이 정책은 네임스페이스 범위이며 TLS를 사용하여 암호화된 요청만 허용하도록 서비스 메시의 워크로드를 구성합니다. 정책이 이 네임스페이스의 모든 서비스에 적용되므로targets스펙이 포함되지 않습니다.apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" spec: mtls: mode: STRICT- 인증 정책을 네임스페이스에 적용하십시오.
kubectl apply -f default.yaml -n NAMESPACE destination-mtls.yaml이라는 대상 규칙 파일을 작성하십시오. 이 정책은 TLS를 사용하여 트래픽을 전송하도록 네임스페이스에서 서비스 메시 워크로드를 구성합니다.host: *.local와일드카드는 메시의 모든 서비스에 이 대상 규칙을 적용한다는 점에 유의하십시오.apiVersion: "networking.istio.io/v1beta1" kind: "DestinationRule" metadata: name: "destination-mtls" spec: host: "*.local" trafficPolicy: tls: mode: ISTIO_MUTUAL- 대상 규칙을 적용하십시오.
kubectl apply -f destination-mtls.yaml -n NAMESPACE - 다른 네임스페이스에 있는 서비스 메쉬 워크로드에 대해 ‘ mTLS ’을 적용하려면, 각 네임스페이스에서 이 단계를 반복하십시오.
대상 규칙은 다른 버전의 서비스로 트래픽 라우팅과 같은 비인증 이유로도 사용됩니다. 서비스에 대해 작성하는 모든 대상 규칙에는 mode: ISTIO_MUTUAL로 설정된 동일한 TLS 블록도 포함되어야 합니다. 이 블록은 해당 규칙이 이 섹션에서 구성한 메시 전체 mTLS 설정을 대체하는 것을 방지합니다.