Red Hat OpenShift on IBM Cloud의 Service Mesh
이 튜토리얼에서는 비용이 발생할 수 있습니다. Cost Estimator를 사용하여 예상 사용량을 기반으로 비용 추정값을 생성하십시오.
이 튜토리얼에서는 Red Hat OpenShift on IBM Cloud BookInfo 샘플 앱을 위한 마이크로서비스와 함께 Red Hat OpenShift 설치하는 방법을 안내합니다. 또한 서비스를 서비스 메시 외부에 공개하도록 Istio ingress-gateway를 구성하고, A/B 테스트 및 Canary 배치와 같은 중요한 태스크를 설정하기 위해 트래픽 관리를 수행하며, 마이크로서비스 통신을 보안 설정하고 메트릭, 로깅 및 추적을 사용하여 서비스를 관찰할 수도 있습니다.
오픈 소스 Istio 프로젝트를 기반으로 Red Hat OpenShift Service Mesh는 기존 분산 애플리케이션에 투명 계층을 추가합니다. Red Hat OpenShift 서비스 메시는 서비스 메시에서 네트워크로 연결된 마이크로서비스에 대한 작동 인사이트 및 운영 제어를 위한 플랫폼을 제공합니다. Red Hat OpenShift 사용하면 Red Hat OpenShift on IBM Cloud 마이크로 서비스를 연결, 보안, 모니터링할 수 있습니다.
Istio는 Red Hat OpenShift on IBM Cloud Kubernetes 같은 클라우드 플랫폼에서 서비스 메시라고도 알려진 마이크로 서비스를 연결, 보호, 제어 및 관찰하기 위한 개방형 플랫폼입니다.
목표
- 클러스터에 Red Hat OpenShift Service Mesh 설치
- BookInfo 샘플 앱 배치
- 메트릭, 로깅 및 추적을 사용하여 서비스 관찰
- Istio Ingress 게이트웨이 설정
- 단순 트래픽 관리(예: A/B 테스트 및 Canary 배치) 수행
- mTLS를 사용하여 메시 보안 설정
- 관리자는 Red Hat OpenShift on IBM Cloud 제공하고, 서비스 메시 운영자와 다른 원격 측정 운영자를 설치합니다.
- 관리자가
istio-system네임스페이스(프로젝트)를 작성하고ServiceMeshControlPlane을 작성합니다. - 관리자가 자동 사이드카 인젝션을 사용으로 설정하여
bookinfo네임스페이스를 작성하고 BookInfo 앱(4개의 마이크로서비스 포함)을 Service Mesh에 배치합니다. - 관리자가 Istio Ingress 게이트웨이를 사용하여 외부 트래픽용 앱을 공개합니다.
- 사용자가 브라우저를 통해 애플리케이션에 안전하게(HTTPS) 액세스합니다.
- 관리자가 메트릭, 추적, 로그를 사용하여 마이크로서비스의 상태와 성능을 모니터합니다.
시작하기 전에
이 튜토리얼에는 다음 항목이 필요합니다.
- IBM Cloud CLI
- IBM Cloud Kubernetes Service 플러그인(
kubernetes-service)
- IBM Cloud Kubernetes Service 플러그인(
- OpenShift와 상호작용하는 데 필요한
oc.
튜토리얼 시작하기 안내서에는 사용자 운영 체제에 맞게 이 도구를 다운로드하고 설치하기 위한 지시사항이 있습니다.
이러한 도구의 설치를 피하려면, Cloud Shell IBM Cloud 사용할 수 있습니다. oc version을(를) 사용하여 Red Hat OpenShift on IBM Cloud CLI의 버전이 자신의 클러스터 버전(4.13.x)에 대응하는지 확인하십시오. 대응하지 않는 경우에는 이러한 지시사항에
따라 대응하는 버전을 설치하십시오.
Red Hat OpenShift on IBM Cloud 클러스터 작성
Red Hat OpenShift on IBM Cloud 사용하면 클러스터에서 엔터프라이즈 워크로드를 컨테이너화하고 배포하는 빠르고 안전한 방법을 사용할 수 있습니다. Red Hat OpenShift on IBM Cloud 클러스터는 개발 라이프사이클 운영에 일관성과 유연성을 제공하는 Kubernetes 컨테이너 오케스트레이션을 기반으로 구축됩니다.
이 절에서는 2개의 작업자 노드로 구성된 1개의 구역에 Red Hat OpenShift on IBM Cloud 클러스터를 프로비저닝합니다.
- IBM Cloud 계정에 로그인하고 Red Hat OpenShift on IBM Cloud 클러스터 작성 페이지 에서 Red Hat OpenShift on IBM Cloud 클러스터를 작성하십시오.
- Orchestration 서비스를 Red Hat OpenShift on IBM Cloud4.13.x 버전 으로 설정합니다.
- OCP 인타이틀먼트를 선택하십시오.
- 인프라에서 클래식 또는 VPC를 선택하십시오.
- VPC 인프라에 있는 Red Hat OpenShift on IBM Cloud의 경우, Kubernetes 클러스터를 작성하기 전에 VPC 및 한 개의 서브넷을 작성해야 합니다. 다음 항목을 염두에 두고 원하는 VPC를 작성하거나 검사하십시오(표준 VPC 클러스터 작성에
제공된 지시사항 참조).
- 이 튜토리얼에 사용할 수 있는 한 개의 서브넷. 서브넷의 구역과 이름을 기록해 두십시오.
- 퍼블릭 게이트웨이가 서브넷에 연결됨
- 원하는 VPC를 선택하십시오.
- 기존 Cloud Object Storage 서비스를 선택하거나, 필요한 경우 해당 서비스를 작성한 후 선택하십시오.
- VPC 인프라에 있는 Red Hat OpenShift on IBM Cloud의 경우, Kubernetes 클러스터를 작성하기 전에 VPC 및 한 개의 서브넷을 작성해야 합니다. 다음 항목을 염두에 두고 원하는 VPC를 작성하거나 검사하십시오(표준 VPC 클러스터 작성에
제공된 지시사항 참조).
- 위치에서 다음을 수행하십시오.
- VPC 인프라에 있는 Red Hat OpenShift on IBM Cloud의 경우
- 리소스 그룹을 선택하십시오.
- 적용할 수 없는 구역을 선택 취소하십시오.
- 원하는 구역에서 원하는 서브넷 이름을 확인하고, 없는 경우 편집 연필을 클릭하여 원하는 서브넷 이름을 선택하십시오.
- 클래식 인프라에 있는 Red Hat OpenShift on IBM Cloud의 경우 표준 클래식 클러스터 작성 지시사항을 따르십시오.
- 리소스 그룹을 선택하십시오.
- 지역을 선택하십시오.
- 가용성으로 단일 구역을 선택하십시오.
- 데이터 센터를 선택하십시오.
- VPC 인프라에 있는 Red Hat OpenShift on IBM Cloud의 경우
- 작업자 풀에서 다음을 수행하십시오.
- 유형으로 4개 vCPU 16GB 메모리를 선택하십시오.
- 이 튜토리얼에서는 데이터 센터당 2개 작업자 노드를 선택하십시오(클래식만 해당: 로컬 디스크 암호화 유지).
- 리소스 세부 정보 에서 클러스터 이름 설정을
-myopenshiftcluster로 변경하고,<your-initials>를 자신의 이니셜로 바꾸십시오. - 작성 을 클릭하여 Red Hat OpenShift on IBM Cloud 클러스터를 프로비저닝하십시오.
앞에서 선택한 리소스 그룹을 기록해 두십시오. 이 실습의 모든 리소스에 동일한 이 리소스 그룹이 사용됩니다.
IBM Cloud Shell을(를) 사용하여 클러스터에 액세스하십시오.
Red Hat OpenShift on IBM Cloud 컨테이너 플랫폼 CLI 는 애플리케이션을 관리하는 명령어와 시스템의 각 구성 요소와 상호 작용하는 하위
레벨 도구를 제공합니다. CLI는 oc 명령을 통해 사용 가능합니다.
명령행 도구를 설치하지 않으려는 경우 권장되는 접근 방식은 IBM Cloud Shell을(를) 사용하는 것입니다.
IBM Cloud Shell은 브라우저를 통해 액세스할 수 있는 클라우드 기반 쉘 작업공간입니다. 이는 전체 IBM Cloud CLI, 그리고 앱, 리소스 및 인프라를 관리하는 데 사용할 수 있는 여러 플러그인 및 도구로 사전 구성되어 있습니다.
이 단계에서는 IBM Cloud 쉘을 사용하여 본인에게 지정된 클러스터를 가리키도록 oc를 구성합니다.
- 클러스터가 준비되면, 클러스터 개요 페이지에서 콘솔( OpenShift 웹 콘솔 )을 클릭하여 콘솔을 엽니다. 이 창/탭을 닫지 않도록 주의하십시오
- 웹 콘솔에서, 화면 오른쪽 모서리에 있는 자신의 이름 아래에 있는 드롭 다운을 클릭하고 로그인 명령 복사를 선택한 후 토큰 표시 링크를 클릭하십시오.
- 텍스트를 이 토큰으로 로그인 아래에 복사하십시오.
- 새 브라우저 탭/창에서 IBM Cloud Shell을(를) 열어 새 세션을 시작하십시오. 세션이 시작되면 자동으로 IBM Cloud CLI에 로그인되어야 합니다. 이 창/탭을 닫지 마십시오.
- OpenShift CLI의 버전을 확인하십시오.
oc version - 최소 버전은 4.13.x 여야 합니다. 그렇지 않은 경우, 다음 지침에 따라 최신 버전을 설치하십시오.
- 웹 콘솔에서 복사한 로그인 명령을 붙여넣고 Enter 키를 누르십시오.
oc login명령을 사용하여 로그인한 다음 아래 명령을 실행하여 클러스터의 모든 네임스페이스를 확인하십시오.oc get ns - Cloud Shell "bookinfo"라는 프로젝트를 생성하고
oc new-project명령을 실행합니다. 프로젝트는 서비스 메시를 설치한 후 작성된 애플리케이션을 보유합니다.
Red Hat OpenShift에서 프로젝트는 추가 어노테이션이 있는 Kubernetes 네임스페이스입니다.oc new-project bookinfo
Service Mesh - Istio 설치
이 절에서는 Service Mesh - Istio를 클러스터에 설치합니다. Service Mesh를 설치하려면 Elasticsearch, Jaeger, Kiali 및 Service Mesh Operator를 설치하고, ServiceMeshControlPlane 리소스를 계획 및 작성하여 제어 플레인을 배치하며, ServiceMeshMemberRoll 리소스를 작성하여 Service
Mesh와 연관된 네임스페이스를 지정해야 합니다.
일부 프로젝트에는 여러 개의 연산자가 있습니다. 아래 지정된 항목을 설치하도록 주의하십시오.
Elasticsearch - 오픈 소스 Elasticsearch 프로젝트를 기반으로 하며, Jaeger를 통한 추적 및 로깅을 위해 Elasticsearch 클러스터를 구성하고 관리할 수 있습니다.
Jaeger - 오픈 소스 Jaeger 프로젝트를 기반으로 하며, 복잡한 분산 시스템에서 트랜잭션을 모니터하여 문제를 해결하도록 추적을 수행할 수 있습니다.
Kiali - 오픈 소스 Kiali 프로젝트를 기반으로 하며, 서비스 메시를 관찰할 수 있는 기능을 제공합니다. Kiali를 사용하면 하나의 콘솔에서 구성을 확인하고 트래픽을 모니터하며 추적을 확인 및 분석할 수 있습니다.
Red Hat OpenShift 서비스 메시- 오픈 소스 Istio 프로젝트를 기반으로, 애플리케이션을 구성하는 마이크로 서비스를 연결, 보안, 제어 및 관찰할 수 있습니다.
Operator 설치
- Red Hat OpenShift 웹 콘솔의 왼쪽 분할창에서 드롭 다운에서 관리자를 선택하십시오.
- 오퍼레이터 및 OperatorHub를 선택하십시오.
- OpenShift Elasticsearch Operator를 검색하고 타일을 클릭한 후 설치를 클릭하고 기본 선택사항을 그대로 둔 상태에서 설치를 클릭하십시오.
- 오퍼레이터 설치를 위해 위의 단계 2와 3을 반복하십시오.
- Red Hat OpenShift 분산 추적 플랫폼
- Kiali 오퍼레이터 (Red Hat에서 제공)
- Red Hat OpenShift 서비스 메시.
Operator가 기본 openshift-operators 프로젝트에 설치되며 Operator를 클러스터의 모든 프로젝트에 사용할 수 있습니다.
Red Hat OpenShift 서비스 메시 제어면 배포
Red Hat OpenShift 운영자는 Istio를 설치하는 방법과 원하는 구성 요소를 결정하기 위해 ServiceMeshControlPlane 리소스를 사용합니다. 이제 해당 리소스를 작성하겠습니다.
- 웹 콘솔의 왼쪽 창에서 홈으로 이동하여 새 프로젝트를 만들고 프로젝트를 클릭한 다음 프로젝트 작성을 클릭하십시오.
istio-system이름**에 **을 입력하고 작성을 클릭하십시오.- 오퍼레이터로 이동하여 설치된 오퍼레이터를 클릭하십시오.
- 맨 위 표시줄에 있는 프로젝트 메뉴에서
istio-system을 선택하십시오. - Red Hat OpenShift 서비스 메시를 클릭하십시오. 보이지 않을 경우 몇 분 정도 기다렸다가 새로 고치십시오.
- 세부사항 탭의 Istio Service Mesh 제어 플레인 타일에서 인스턴스 작성 또는 ServiceMeshControlPlane 작성을 클릭하십시오.
- 그런 다음 작성을 클릭하십시오. Operator가 구성 매개변수를 기준으로 팟(Pod), 서비스 및 Service Mesh 제어 플레인 컴포넌트를 작성합니다.
- Service Mesh 제어 플레인이 제대로 설치되었는지 확인하려면 목록에서 ** 아래의 **기본
Name을 클릭하십시오. 후속 페이지에서 컴포넌트 가 준비되어 있는지 확인해야 합니다. 또한 페이지의 조건 섹션으로 스크롤할 때 이유ComponentsReady및 메시지All component deployments are Available가 표시되어야 합니다.
ServiceMeshMemberRoll 작성
ServiceMeshMemberRoll 리소스는 Service Mesh와 연관된 네임스페이스를 지정하는 데 사용됩니다.
- Operator → 설치된 Operator로 다시 이동하십시오.
- Red Hat OpenShift 서비스 메시를 클릭하십시오.
- 세부사항 탭의 Istio Service Mesh 멤버 롤 타일에서 인스턴스 작성 또는 ServiceMeshMemberRoll 작성을 클릭한 후 YAML 보기를 선택하십시오.
your-project을(를)bookinfo(으)로 변경하고 마지막 행(- another-of-your-projects)을 삭제하십시오. 편집 후 YAML은 다음과 같아야 합니다.apiVersion: maistra.io/v1 kind: ServiceMeshMemberRoll metadata: name: default namespace: istio-system spec: members: - bookinfo- 그런 다음 작성을 클릭하십시오.
Istio가 클러스터에 성공적으로 설치되었습니다.
Service Mesh에 BookInfo 애플리케이션 배치
BookInfo 온라인 서점의 단일 카탈로그 항목과 유사한 책에 대한 정보를 표시합니다. 이 페이지에는 서적에 대한 설명, 서적 세부사항(ISBN, 페이지 수 등) 및 몇 개의 서평이 표시됩니다.
Bookinfo 애플리케이션은 다음과 같은 4가지 개별 마이크로서비스로 구분됩니다.
- productpage - productpage 마이크로서비스는 세부사항을 호출하고 마이크로서비스를 검토하여 페이지를 채웁니다.
- details - details 마이크로서비스는 서적 정보를 제공합니다.
- reviews - reviews 마이크로서비스는 서평을 제공합니다. 또한 ratings 마이크로서비스를 호출합니다.
- ratings - ratings 마이크로서비스는 서평이 포함된 서적 순위 정보를 제공합니다.
reviews 마이크로서비스에는 3가지 버전이 있습니다.
- 버전 v1은 ratings 서비스를 호출하지 않습니다.
- 버전 v2는 ratings 서비스를 호출하고 등급을 1-5개의 검은색 별로 표시합니다.
- 버전 v3는 ratings 서비스를 호출하고 등급을 1-5개의 빨간색 별로 표시합니다.
애플리케이션의 엔드-투-엔드 아키텍처는 다음과 같습니다.
Red Hat OpenShift }} 서비스 메시(Service Mesh)는 애플리케이션의 포드(pod) 내에 있는 엔보이(Envoy) 사이드카를 통해 애플리케이션에 서비스 메시 기능을 제공합니다. 자동 사이드카 인젝션을 사용으로 설정하거나 수동으로 관리할 수 있습니다. 권장되는 방법은 어노테이션을 사용한 자동 인젝션입니다.
-
bookinfo.yaml Red Hat OpenShift 적용하여 Bookinfo 애플리케이션을
bookinfo프로젝트에 배포합니다. 이는 검토 앱의 버전 v1, v2 및 v3 을 포함하여 모든 마이크로서비스 애플리케이션을 배치합니다.oc apply -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/platform/kube/bookinfo.yamlbookinfo.yaml파일에 주석이 달렸습니다sidecar.istio.io/inject: "true"를 통해 Red Hat OpenShift Istio 사이드카의 자동 삽입을 활성화합니다. 따라서 이러한 팟(Pod)은 클러스터에서 시작될 때 Envoy 사이드카도 포함하고 있습니다.Red Hat OpenShift 설치는 업스트림 Istio 커뮤니티 설치와 여러 가지 면에서 다릅니다. 서비스 메시와 Istio를 비교하는 이 링크를 참조하십시오. 기본적으로 Istio는
istio-injection=enabled프로젝트에 레이블을 지정한 경우 사이드카를 삽입합니다. Red Hat OpenShift 서비스 메시는 이를 다르게 처리하며 사용자가 사이드카를 배치에 자동으로 삽입하도록 선택해야 하므로 프로젝트에 레이블을 지정할 필요가 없습니다. 원하지 않는 경우 사이드카 인젝션을 수행하지 않아도 됩니다(팟(Pod) 빌드 또는 배치). -
팟(Pod)이 작동되어 실행 중인지 확인하십시오.
oc get pods샘플 출력:
NAME READY STATUS RESTARTS AGE details-v1-789c5f58f4-9twtw 2/2 Running 0 4m12s productpage-v1-856c8cc5d8-xcx2q 2/2 Running 0 4m11s ratings-v1-5786768978-tr8z9 2/2 Running 0 4m12s reviews-v1-5874566865-mxfgm 2/2 Running 0 4m12s reviews-v2-86865fc7d9-mf6t4 2/2 Running 0 4m12s reviews-v3-8d4cbbbbf-rfjcz 2/2 Running 0 4m12s각 bookinfo 팟(Pod)에는 두 개의 컨테이너가 있습니다. 하나는 bookinfo 컨테이너이고, 다른 하나는 Envoy 프록시 사이드카입니다.
bookinfo 앱이 실행 중이지만, 서비스가 외부 트래픽을 수신하도록 아직 구성되어 있지 않아 액세스할 수는 없습니다. 다음 절에서는 수신 트래픽을 허용하도록 productpage 서비스를 공개합니다.
Istio Ingress 게이트웨이 및 라우트를 사용하여 앱 공개
서비스 메시에 배치된 컴포넌트는 기본적으로 클러스터 외부에 공개되지 않습니다. 외부 요청이 Istio Ingress 게이트웨이를 통해 지원 서비스로 전달되도록 Ingress 게이트웨이 리소스를 작성할 수 있습니다.
- Istio Ingress 게이트웨이를 사용하여 bookinfo 기본 라우트를 구성하십시오.
oc create -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/bookinfo-gateway.yaml - Istio Ingress 게이트웨이의 라우트를 가져오십시오.
oc get routes -n istio-system istio-ingressgateway - 앞 단계에서 검색한 호스트 주소를 저장하십시오. 이 주소는 본 튜토리얼의 뒷부분에서 BookInfo 앱에 액세스하는 데 사용됩니다. 호스트 주소를 사용하여
$INGRESS_HOST라는 환경 변수를 작성하십시오.새 탭에서export INGRESS_HOST=<HOST>http://$INGRESS_HOST/productpage로 이동하여 애플리케이션을 방문하십시오. 새로 고치기를 계속 누르면 다른 버전의 페이지가 무작위로 표시됩니다(v1 - 별 없음, v2 - 검은색 별, v3 - 빨간색 별). 나중에 사용할 수 있도록 이 브라우저 탭을 열어 두십시오.
서비스 텔레메트리 관찰: 메트릭 및 추적
Istio의 추적 및 메트릭 기능은 모든 서비스의 상태에 대한 광범위하고 세분화된 통찰력을 제공하도록 설계되었습니다. 서비스 메시로서 Istio는 특히 마이크로서비스 환경에서 관찰 가능성 정보에 대한 이상적인 데이터 소스로 사용됩니다. 요청은 여러 서비스를 거치므로 기존 디버깅 기술로 성능 병목 현상을 식별하는 것이 점점 어려워지고 있습니다. 분산 추적은 여러 서비스를 거치는 요청에 대한 전체적인 보기를 제공하므로 대기 시간 문제를 즉시 식별할 수 있습니다. Istio를 사용하면 분산 추적이 기본적으로 제공됩니다. 따라서 요청의 각 홉에 대한 대기 시간, 재시도 및 실패 정보가 공개됩니다.
Grafana를 사용하여 메트릭 시각화
Grafana를 사용하면 메트릭을 저장된 위치에 상관없이 조회, 시각화, 경보 설정 및 파악할 수 있습니다.
-
Red Hat OpenShift on IBM Cloud 웹 콘솔에서 다음을 수행하십시오.
- 왼쪽 분할창의 네트워킹에서 라우트를 클릭하십시오.
- 맨 위 표시줄에서 istio-system 프로젝트를 선택하십시오.
- grafana 옆에 있는 URL(위치)을 클릭하십시오.
- Red Hat OpenShift on IBM Cloud 에 로그인하고 Grafana 대시보드를 보기 위해 요청된 권한을 허용하십시오.
-
왼쪽 탐색 패널에서 대시보드 메뉴를 클릭하고 관리 탭을 선택한 후 istio 및 Istio Service Dashboard를 선택하십시오.
-
productpage.bookinfo.svc.cluster.local서비스** 드롭 다운에서 **을 선택하십시오. -
IBM Cloud Shell 탭/창으로 이동한 후 마지막 섹션에서 설정한 Ingress 호스트 위치에 트래픽을 전송하여하여 앱에 대한 작은 로드를 생성하십시오.
for i in {1..20}; do sleep 0.5; curl -I $INGRESS_HOST/productpage; done
더 많은 대시보드를 보려면 각 트위스티를 여십시오. 서비스 드롭 다운에서 다른 서비스를 선택하십시오. 이 Grafana 대시보드는 각 워크로드에 대한 메트릭을 제공합니다. 제공된 다른 대시보드도 살펴보십시오.
Kiali로 서비스 메시 관찰
Kiali는 서비스 메시를 시각화하기 위해 Istio 위에 추가 기능으로 설치되는 오픈 소스 프로젝트입니다. Kiali는 마이크로서비스가 서로 상호 작용하는 방식에 대한 심층적인 통찰력을 제공하고 회로 차단기 및 서비스 요청 속도와 같은 기능을 제공합니다.
- Red Hat OpenShift on IBM Cloud 웹 콘솔에서 다음을 수행하십시오.
- 왼쪽 분할창의 네트워킹에서 라우트를 클릭하십시오.
- 맨 위 표시줄에서 istio-system을 프로젝트로 선택하십시오.
- kiali 옆에 있는 URL(위치)을 클릭하고 프롬프트가 표시되면 OpenShift로 로그인을 클릭하십시오.
- 왼쪽 분할창에서 그래프를 클릭하고 맨 위 표시줄에서
bookinfo및istio-system네임스페이스를 선택하여 다양한 서비스의 시각적 버전화된 앱 그래프를 Istio 메시에 표시하십시오. - 요청 비율을 보려면 표시를 클릭하고 트래픽 비율을 선택하십시오.
- 다른 탭/창에서 BookInfo 애플리케이션 URL을 방문하고 페이지를 여러 번 새로 고쳐 약간의 로드를 생성하거나, 앞 절의 로드 스크립트를 실행하여 로드를 생성하십시오.
- 이제 Kiali 그래프를 확인하여 초당 요청 수를 확인하십시오.
Kiali는 서비스를 시각화하는 데 도움이 되는 여러 가지 보기를 제공합니다. 다양한 탭을 클릭하여 서비스 그래프와 워크로드, 애플리케이션 및 서비스에 대한 다양한 보기를 살펴보십시오.
트래픽 관리 수행
Istio의 트래픽 라우팅 규칙을 사용하면 서비스 간의 트래픽 플로우와 API 호출을 쉽게 제어할 수 있습니다. Istio는 회로 차단기, 제한시간 초과, 재시도와 같은 서비스 레벨 속성의 구성을 단순화하며, 백분율 기반의 트래픽 분할을 통해 A/B 테스트, Canary 롤아웃, 스테이징 롤아웃과 같은 중요한 태스크를 쉽게 설정할 수 있도록 해줍니다. 또한 종속 서비스 또는 네트워크의 장애에 대비하여 애플리케이션을 더욱 강력하게 만드는 데 도움이 되는 즉시 사용 가능한 장애 복구 기능도 제공합니다.
Istio의 트래픽 관리 모델은 서비스와 함께 배치되는 Envoy 프록시(사이드카)에 의존합니다. 서비스가 보내고 받는 모든 트래픽(데이터 플레인 트래픽)은 Envoy를 통해 프록시되므로 서비스를 변경하지 않고도 메시 주변의 트래픽을 쉽게 경로 지정하고 제어할 수 있습니다.
Pilot은 상위 레벨 규칙을 하위 레벨 구성으로 변환하고 이 구성을 Envoy 인스턴스에 배포합니다. 파일럿은 서비스 메시 내에서 트래픽을 관리하기 위해 세 가지 유형의 구성 리소스를 사용합니다: 가상 서비스, 목적지 규칙, 서비스 항목.
Istio를 사용한 A/B 테스트
A/B 테스트는 두 개의 개별 서비스 버전에 대해 동일한 테스트를 수행하여 어떤 서비스가 더 나은 성능을 보이는지 판별하는 방법입니다. Istio가 원래 서비스와 현대화된 서비스 간 기본 라우팅 동작을 수행하지 못하게 하려면 다음 규칙을 정의하십시오.
-
다음 명령을 실행하여 Bookinfo 서비스에 대한 기본 대상 규칙을 작성하십시오.
oc create -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/destination-rule-all.yamlDestinationRule 라우팅이 발생한 후 서비스로 향하는 트래픽에 적용되는 정책을 정의합니다. 이 규칙은 로드 밸런싱 풀에서 비정상 호스트를 감지하고 제거하기 위해 로드 밸런싱, 사이드카의 연결 풀 크기 및 아웃라이어(outlier) 발견 설정에 대한 구성을 지정합니다.
host규칙에 참조된 대상subset및VirtualService은 해당DestinationRule에 정의되어 있어야 합니다. -
VirtualService가 호스트 주소 지정 시 적용할 일련의 트래픽 라우팅 규칙을 정의합니다. 각 라우팅 규칙은 특정 프로토콜의 트래픽에 대한 일치 기준을 정의합니다. 일치하는 트래픽은 레지스트리에 정의되어 있는 이름 지정된 대상 서비스(또는 서브세트/버전)로 전송됩니다. 아래 명령을 실행하여 모든 검토 트래픽을 v1에 전송하십시오.
oc create -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/virtual-service-all-v1.yamlVirtualService는 reviews 서비스로 들어오는 모든 HTTP 트래픽을 캡처하고 "version: v1"레이블을 사용하여 트래픽의 100%를 서비스 팟(Pod)으로 라우팅하는 규칙을 정의합니다. 라우트 대상의 서브세트 또는 버전은 이름 지정된 서비스 서브세트(해당DestinationRule에 선언되어 있어야 함)에 대한 참조로 식별됩니다. -
브라우저 탭에서 bookinfo 애플리케이션을 보십시오. bookInfo 애플리케이션의 v1만 표시되어야 합니다(즉, 평가에 대한 별이 없어야 함).
-
새 서비스 버전에 대한 A/B 테스트를 위해 Istio 서비스 메시를 사용으로 설정하려면 Firefox 트래픽만 v2로 보내도록 원래
VirtualService규칙을 수정하십시오.user-agent를 자신의 시스템에 설치된 다른 브라우저로 변경할 수 있습니다.cat <<EOF | oc replace -f - apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - match: - headers: user-agent: regex: '.*Firefox.*' route: - destination: host: reviews subset: v2 - route: - destination: host: reviews subset: v3 EOFIstio
VirtualService의 규칙에서는 각 서비스에 대해 하나의 규칙만 있을 수 있으므로 여러 HTTPRoute 블록을 정의할 때 yaml에 정의된 순서가 중요합니다. 따라서 규칙을 새로 작성하는 대신 원래VirtualService규칙이 수정됩니다. 수정된 규칙을 사용할 경우Firefox브라우저에서 시작된 수신 요청이 bookinfo의 v2 버전(검은색 별)으로 이동합니다. 다른 모든 요청은 다음 블록으로 넘어가므로 모든 트래픽이 bookinfo의 v3(빨간색 별) 버전으로 라우팅됩니다.
Canary 배치
Canary 배치에서는 최신 버전의 버그로 인한 위험과 영향을 최소화하기 위해 최신 버전의 서비스가 점진적으로 사용자에게 롤아웃됩니다. 트래픽을 최신 버전의 bookinfo 서비스로 점진적으로 라우팅하려면 원래 VirtualService 규칙을 수정하십시오.
-
다음 명령을 실행하여 트래픽의 80%를 v1으로 전송하십시오.
oc replace -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/virtual-service-reviews-80-20.yaml수정된 규칙에서는 라우팅된 트래픽이 reviews 마이크로서비스의 두 서브세트 간에 분할됩니다. 이러한 방식으로, reviews의 현대화된 버전 2에 대한 트래픽은 예상치 못한 버그의 영향을 제한하기 위해 백분율로 제어됩니다. 이 규칙은 모든 트래픽이 최신 버전의 서비스로 전달될 때까지 시간이 지나도 수정할 수 있습니다.
-
브라우저 탭에서 bookinfo 애플리케이션을 다시 보십시오. 브라우저 캐싱을 제거하기 위해 강제 새로 고침(Mac에서는 Command+Shift+R, Windows에서는 Ctrl+F5)을 사용하고 있는지 확인하십시오. bookinfo 애플리케이션은 지정한 가중치에 따라 V1 또는 V2 간에 스왑해야 합니다.
-
모든 트래픽을 reviews v3로 라우팅하려면 다음 명령을 실행하십시오.
oc replace -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/virtual-service-reviews-v3.yaml
서비스 보안 설정
Istio는 애플리케이션 코드를 변경하지 않고도 마이크로서비스 간의 통신을 보안 설정할 수 있습니다. 클러스터 내 통신 경로를 인증하고 암호화하는 방식으로 보안이 제공됩니다. 이것은 일반적인 보안 및 규제 준수 요구사항이 되고 있습니다. 통신 보안을 Istio에 위임하면(마이크로서비스마다 TLS를 구현하는 것과 반대임) 일관되고 관리 가능한 보안 정책을 사용하여 애플리케이션을 배치할 수 있습니다.
- mTLS를 구성하려면
ISTIO_MUTUAL을 사용하도록 이전 대상 규칙을 수정해야 합니다.oc replace -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.2/samples/bookinfo/networking/destination-rule-all-mtls.yaml - 추가 트래픽을 애플리케이션으로 전송하십시오. 모든 사항이 예상대로 계속 작동해야 합니다.
- Kiali를 다시 실행하고 그래프로 이동하십시오.
- 맨 위
bookinfo네임스페이스** 표시줄에서 **를 선택하십시오. - 표시에서 보안을 선택하십시오. 모든 화살표(트래픽)에 잠금 아이콘이 표시되어야 합니다.
- 트래픽이 안전한지 확인하려면
productpage에서v1을 향하는 화살표를 클릭하십시오. 오른쪽 분할창에 잠금 아이콘이 있는mTLS Enabled가 표시되어야 합니다.
클러스터로 들어오는 트래픽에 SSL 사용(HTTPS)
이 절에서는 Red Hat OpenShift on IBM Cloud에서 제공하는 기본 인증서를 사용하여 에지 종료로 Ingress 게이트웨이에 대한 보안 라우트를 작성합니다. 에지 라우트를 사용하면 Ingress 제어기가 트래픽을 istio-ingressgateway 팟(Pod)에 전달하기 전에 TLS 암호화를 종료합니다.
- Red Hat OpenShift on IBM Cloud 콘솔을 실행하십시오.
- 네트워킹에서 라우트를 클릭하십시오.
- 맨 위 표시줄에서 istio-system 프로젝트를 선택한 후 라우트 작성을 클릭하십시오.
- 이름:
istio-ingressgateway-secure - 서비스:
istio-ingressgateway - 대상 포트
80->8080(TCP) - 검사
Secure Route - TLS 종료:
Edge - 비보안 트래픽:
None
- 이름:
- 작성을 클릭하십시오.
- istio-ingressgateway-secure 라우트의 위치 섹션 아래에 있는 새 HTTPS URL을 방문하십시오. 반드시 URL 끝에
/productpage를 추가하십시오.
자원 제거
개별 리소스를 단계적으로 제거하거나, 이러한 단계를 건너뛰고 전체 클러스터를 직접 삭제할 수 있습니다.
애플리케이션 프로젝트 삭제
- bookinfo 프로젝트를 삭제하려면 다음 명령을 실행하십시오.
oc delete project bookinfo
CLI에서 ServiceMeshControlPlane 제거
- 이 명령을 실행하여 설치된 ServiceMeshControlPlane의 이름을 검색하십시오,
oc get servicemeshcontrolplanes -n istio-system <NAME_OF_CUSTOM_RESOURCE>을(를) 이전 명령의 이름으로 대체하고 이 명령을 실행하여 사용자 정의 리소스를 제거하십시오.
연관된oc delete servicemeshcontrolplanes -n istio-system <NAME_OF_CUSTOM_RESOURCE>ServiceMeshMemberRoll리소스를 삭제하면ServiceMeshControlPlane리소스가 자동으로 삭제됩니다.
Operator 제거
- 웹 콘솔의 Operator → 설치된 Operator 페이지로 이동하십시오.
- Red Hat OpenShift 서비스 메시 작업자 세부사항 페이지의 오른쪽에서 작업자 세부사항의 작업 드롭다운 메뉴에서 작업자 세부사항( 운영자 제거 )을 선택합니다.
- 프롬프트에서 설치 제거를 클릭하십시오.
- 목록에 있는 Operator마다 2단계와 3단계를 반복하십시오.
클러스터 삭제
클러스터를 삭제하면 한 번에 모든 것이 삭제됩니다. 이 조치는 되돌릴 수 없습니다.
- OpenShift 클러스터 페이지로 이동하십시오.
<your-initials>-myopenshiftcluster옆에 있는 조치 메뉴를 클릭하고 삭제를 선택하십시오.- 클러스터에서 사용하는 지속적 스토리지 삭제를 선택하고 확인을 위해 클러스터 이름을 입력하십시오.
- 삭제를 클릭하십시오.