2.8. Service Mesh에 애플리케이션 배포
더 이상 지원되지 않는 Red Hat OpenShift Service Mesh 릴리스에 대한 문서를 보고 있습니다.
서비스 메시 버전 1.0 및 1.1 컨트롤 플레인은 더 이상 지원되지 않습니다. 서비스 메시 컨트롤 플레인 업그레이드에 대한 자세한 내용은 서비스 메시 업그레이드를 참조하십시오.
특정 Red Hat OpenShift Service Mesh 릴리스의 지원 상태에 대한 자세한 내용은 제품 라이프사이클 페이지를 참조하십시오.
Service Mesh에 애플리케이션을 배포할 때 Istio의 업스트림 커뮤니티 버전과 Red Hat OpenShift Service Mesh 설치 내의 애플리케이션 동작 간의 몇 가지 차이점이 있습니다.
2.8.1. 사전 요구 사항
2.8.2. 컨트롤 플레인 템플릿 생성
ServiceMeshControlPlane
템플릿을 사용하여 재사용 가능한 구성을 생성할 수 있습니다. 개별 사용자는 생성한 템플릿을 자체 구성으로 확장할 수 있습니다. 템플릿은 다른 템플릿의 구성 정보를 상속할 수도 있습니다. 예를 들어, 회계 팀에 대한 계정 컨트롤 플레인과 마케팅 팀에 대한 마케팅 컨트롤 플레인을 생성할 수 있습니다. 개발 템플릿과 프로덕션 템플릿을 생성하는 경우 마케팅 팀과 회계 팀의 구성원은 팀별 사용자 지정을 통해 개발 및 프로덕션 템플릿을 확장할 수 있습니다.
ServiceMeshControlPlane
과 동일한 구문을 따르는 컨트롤 플레인 템플릿을 구성하면, 사용자는 계층적으로 설정을 상속합니다. Operator는 Red Hat OpenShift Service Mesh의 기본 설정이 포함된 default
템플릿과 함께 제공됩니다. 사용자 지정 템플릿을 추가하려면 openshift-operators
프로젝트에서 smcp-templates
라는 ConfigMap을 생성하고 /usr/local/share/istio-operator/templates
에서 Operator 컨테이너에 ConfigMap을 마운트해야 합니다.
2.8.2.1. ConfigMap 생성
다음 절차에 따라 ConfigMap을 생성합니다.
사전 요구 사항
- Service Mesh Operator 설치 및 검증.
-
cluster-admin
역할이 있는 계정. - Operator 배포 위치.
-
OpenShift CLI(
oc
)에 액세스합니다.
절차
- OpenShift Container Platform CLI에 클러스터 관리자로 로그인합니다.
CLI에서 이 명령을 실행하여
openshift-operators
프로젝트에서smcp-templates
라는 ConfigMap을 생성하고<templates-directory>
를 로컬 디스크의ServiceMeshControlPlane
파일의 위치로 교체합니다.$ oc create configmap --from-file=<templates-directory> smcp-templates -n openshift-operators
Operator ClusterServiceVersion 이름을 찾습니다.
$ oc get clusterserviceversion -n openshift-operators | grep 'Service Mesh'
출력 예
maistra.v1.0.0 Red Hat OpenShift Service Mesh 1.0.0 Succeeded
Operator 클러스터 서비스 버전을 편집하여 Operator에서
smcp-templates
ConfigMap을 사용하도록 지시합니다.$ oc edit clusterserviceversion -n openshift-operators maistra.v1.0.0
Operator 배포에 볼륨 마운트 및 볼륨을 추가합니다.
deployments: - name: istio-operator spec: template: spec: containers: volumeMounts: - name: discovery-cache mountPath: /home/istio-operator/.kube/cache/discovery - name: smcp-templates mountPath: /usr/local/share/istio-operator/templates/ volumes: - name: discovery-cache emptyDir: medium: Memory - name: smcp-templates configMap: name: smcp-templates ...
- 변경 사항을 저장하고 편집기를 종료합니다.
이제
ServiceMeshControlPlane
에서template
매개변수를 사용하여 템플릿을 지정할 수 있습니다.apiVersion: maistra.io/v1 kind: ServiceMeshControlPlane metadata: name: minimal-install spec: template: default
2.8.3. 자동 사이드카 삽입 활성화
애플리케이션을 배포할 때 배포
오브젝트에서 spec.template.metadata.annotations
에서 true로 주석 sidecar.istio.io/inject
를 true
로 구성하여 삽입을 선택해야 합니다. 이 설정을 통해 사이드카 삽입이 OpenShift Container Platform 에코시스템 내 여러 프레임 워크에서 사용되는 builder pod와 같은 다른 OpenShift Container Platform 기능을 방해하지 않도록 할 수 있습니다.
사전 요구 사항
- 서비스 메시의 일부인 네임스페이스와 자동 사이드카 삽입이 필요한 배포를 식별합니다.
절차
배포를 찾으려면
oc get
명령을 사용합니다.$ oc get deployment -n <namespace>
예를 들어
info
네임스페이스에서 'ratings-v1' 마이크로 서비스에 대한 배포 파일을 보려면 다음 명령을 사용하여 YAML 형식의 리소스를 확인합니다.oc get deployment -n info ratings-v1 -o yaml
- 편집기에서 애플리케이션의 배포 구성 YAML 파일을 엽니다.
다음 예와 같이
spec.template.metadata.annotations.sidecar.istio/inject
를 Deployment YAML에 추가하고sidecar.istio.io/inject
를true
로 설정합니다.info deployment-ratings-v1.yaml의 스니펫 예
apiVersion: apps/v1 kind: Deployment metadata: name: ratings-v1 namespace: info labels: app: ratings version: v1 spec: template: metadata: annotations: sidecar.istio.io/inject: 'true'
- 배포 구성 파일을 저장합니다.
앱이 포함된 프로젝트에 파일을 다시 추가합니다.
$ oc apply -n <namespace> -f deployment.yaml
이 예제에서
info
는ratings-v1
app 및deployment-ratings-v1.yaml
이 포함된 프로젝트의 이름입니다.$ oc apply -n info -f deployment-ratings-v1.yaml
리소스가 업로드되었는지 확인하려면 다음 명령을 실행합니다.
$ oc get deployment -n <namespace> <deploymentName> -o yaml
예를 들면 다음과 같습니다.
$ oc get deployment -n info ratings-v1 -o yaml
2.8.4. 주석을 통해 프록시 환경 변수 설정
Envoy 사이드카 프록시에 대한 구성은 ServiceMeshControlPlane
에서 관리합니다.
injection-template.yaml
파일의 배포에 Pod 주석을 추가하여 애플리케이션의 사이드카 프록시의 환경 변수를 설정할 수 있습니다. 환경 변수가 사이드카에 삽입됩니다.
예: injection-template.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: resource spec: replicas: 7 selector: matchLabels: app: resource template: metadata: annotations: sidecar.maistra.io/proxyEnv: "{ \"maistra_test_env\": \"env_value\", \"maistra_test_env_2\": \"env_value_2\" }"
고유한 사용자 정의 리소스를 생성할 때 maistra.io/
레이블 및 주석을 포함하지 않아야 합니다. 이러한 라벨 및 주석은 Operator에서 리소스를 생성하고 관리함을 나타냅니다. 자체 리소스를 생성할 때 Operator 생성 리소스에서 콘텐츠를 복사하는 경우 maistra.io/
로 시작하는 레이블 또는 주석을 포함하지 마십시오. 이러한 라벨 또는 주석을 포함하는 리소스는 다음 조정 중에 Operator에 의해 덮어쓰거나 삭제됩니다.
2.8.5. Mixer 정책 시행 업데이트
이전 버전의 Red Hat OpenShift Service Mesh에서는 기본적으로 Mixer의 정책 시행이 활성화되었습니다. 이제 Mixer 정책 시행은 기본적으로 비활성화되었습니다. 정책 작업을 실행하기 전에 활성화해야 합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)에 액세스합니다.
예에서는 <istio-system>
을 컨트롤 플레인 네임스페이스로 사용합니다. 이 값을 SMCP(Service Mesh Control Plane)를 배포한 네임스페이스로 교체합니다.
프로세스
- OpenShift Container Platform CLI에 로그인합니다.
이 명령을 실행하여 현재 Mixer 정책 시행 상태를 확인합니다.
$ oc get cm -n <istio-system> istio -o jsonpath='{.data.mesh}' | grep disablePolicyChecks
disablePolicyChecks: true
인 경우 Service Mesh ConfigMap을 편집합니다.$ oc edit cm -n <istio-system> istio
-
ConfigMap 내에서
disablePolicyChecks: true
를 찾고 값을false
로 변경합니다. - 구성을 저장하고 편집기를 종료합니다.
-
Mixer 정책 시행 상태를 다시 점검하여
false
로 설정되어 있는지 확인합니다.
2.8.5.1. 올바른 네트워크 정책 설정
서비스 메시는 서비스 메시 컨트롤 플레인과 멤버 네임스페이스에서 네트워크 정책을 생성하여 트래픽을 허용합니다. 배포하기 전에 다음 조건을 고려하여 OpenShift Container Platform 경로를 통해 이전에 노출된 서비스 메시의 서비스를 확인하십시오.
- Istio가 제대로 작동하려면 서비스 메시로 들어오는 트래픽이 항상 Ingress-gateway를 통과해야 합니다.
- 서비스 메시에 없는 별도의 네임스페이스에서 서비스 메시 외부에 서비스를 배포합니다.
-
서비스 메시 등록 네임스페이스에 배포해야 하는 메시 외 서비스는 해당 배포
maistra.io/expose-route: "true"
에 레이블을 지정하여 OpenShift Container Platform 경로가 여전히 작동하도록 해야 합니다.
2.8.6. Bookinfo 예제 애플리케이션
Bookinfo 예제 애플리케이션에서는 OpenShift Container Platform에서 Red Hat OpenShift Service Mesh 2.4.4 설치를 테스트할 수 있습니다.
Bookinfo 애플리케이션은 온라인 서점의 단일 카탈로그 항목과 유사하게 한 권의 책에 대한 정보를 표시합니다. 애플리케이션은 도서 설명, 도서 세부 정보(ISBN, 페이지 수, 기타 정보), 도서 리뷰가 설명된 페이지를 표시합니다.
Bookinfo 애플리케이션은 이러한 마이크로 서비스로 구성됩니다.
-
productpage
마이크로 서비스는details
및reviews
마이크로 서비스를 호출하여 페이지를 채웁니다. -
details
마이크로 서비스에는 도서 정보가 포함되어 있습니다. -
reviews
마이크로 서비스에는 도서 리뷰가 포함되어 있습니다. 이를ratings
마이크로 서비스라고도 합니다. -
ratings
마이크로 서비스에는 도서 리뷰와 함께 제공되는 도서 순위 정보가 포함되어 있습니다.
리뷰 마이크로 서비스의 세 가지 버전이 있습니다.
-
버전 v1에서는
ratings
서비스를 호출하지 않습니다. -
버전 v2는
ratings
서비스를 호출하고 각 평가를 1~5개의 검정별로 표시합니다. -
버전 v3은
ratings
서비스를 호출하고 각 평가를 1~5개의 빨강별로 표시합니다.
2.8.6.1. Bookinfo 애플리케이션 설치
이 튜토리얼에서는 프로젝트를 생성하고, Bookinfo 애플리케이션을 해당 프로젝트에 배포하고, 서비스 메시에서 실행 중인 애플리케이션을 확인하여 샘플 애플리케이션을 생성하는 방법을 안내합니다.
사전 요구 사항
- OpenShift Container Platform 4.1 이상이 설치되었습니다.
- Red Hat OpenShift Service Mesh 2.4.4가 설치되었습니다.
-
OpenShift CLI(
oc
)에 액세스합니다. -
cluster-admin
역할이 있는 계정.
Bookinfo 샘플 애플리케이션은 IBM Z 및 IBM Power Systems에 설치할 수 없습니다.
이 섹션의 명령은 Service Mesh Control Plane 프로젝트가 istio-system
이라고 가정합니다. 컨트롤 플레인을 다른 네임스페이스에 설치한 경우 실행하기 전에 각 명령을 편집합니다.
프로세스
-
OpenShift Container Platform 웹 콘솔에 cluster-admin 권한이 있는 사용자로 로그인합니다. Red Hat OpenShift Dedicated를 사용하는 경우
dedicated-admin
역할의 계정이 있어야 합니다. -
홈
프로젝트를 클릭합니다. - 프로젝트 만들기를 클릭합니다.
Project Name 으로
info
를 입력하고 Display Name 을 입력하고 Description 을 입력한 다음 Create 를 클릭합니다.또는 CLI에서 이 명령을 실행하여
info
프로젝트를 생성할 수도 있습니다.$ oc new-project info
-
Operators
설치된 Operators를 클릭합니다. -
프로젝트 메뉴를 클릭하고 Service Mesh Control Plane 네임스페이스를 사용합니다. 이 예제에서는
istio-system
을 사용합니다. - Red Hat OpenShift Service Mesh Operator를 클릭합니다.
Istio Service Mesh 멤버 목록 탭을 클릭합니다.
- 이미 Istio Service Mesh 멤버 롤을 생성한 경우, 이름을 클릭한 다음 YAML 탭을 클릭하여 YAML 편집기를 엽니다.
-
ServiceMeshMemberRoll
을 생성하지 않은 경우 ServiceMeshMemberRoll 생성을 클릭합니다.
- Members를 클릭한 다음 Value 필드에 프로젝트 이름을 입력합니다.
생성을 클릭하여 업데이트된 서비스 메시 멤버 롤을 저장합니다.
또는 다음 예제를 YAML 파일에 저장합니다.
Bookinfo ServiceMeshMemberRoll example servicemeshmemberroll-default.yaml
apiVersion: maistra.io/v1 kind: ServiceMeshMemberRoll metadata: name: default spec: members: - info
다음 명령을 실행하여 해당 파일을 업로드하고
istio-system
네임스페이스에ServiceMeshMemberRoll
리소스를 만듭니다. 이 예제에서istio-system
은 Service Mesh Control Plane 프로젝트의 이름입니다.$ oc create -n istio-system -f servicemeshmemberroll-default.yaml
다음 명령을 실행하여
ServiceMeshMemberRoll
이 성공적으로 생성되었는지 확인합니다.$ oc get smmr -n istio-system -o wide
STATUS
열이Configured
인 경우 설치가 성공적으로 완료된 것입니다.NAME READY STATUS AGE MEMBERS default 1/1 Configured 70s ["info"]
CLI에서
bookinfo.yaml
파일을 적용하여 'info' 프로젝트에 Bookinfo 애플리케이션을 배포합니다.$ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.4/samples/bookinfo/platform/kube/bookinfo.yaml
출력은 다음과 유사합니다.
service/details created serviceaccount/info-details created deployment.apps/details-v1 created service/ratings created serviceaccount/info-ratings created deployment.apps/ratings-v1 created service/reviews created serviceaccount/info-reviews created deployment.apps/reviews-v1 created deployment.apps/reviews-v2 created deployment.apps/reviews-v3 created service/productpage created serviceaccount/info-productpage created deployment.apps/productpage-v1 created
info-gateway.yaml
파일을 적용하여 수신 게이트웨이를 생성합니다.$ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.4/samples/bookinfo/networking/bookinfo-gateway.yaml
출력은 다음과 유사합니다.
gateway.networking.istio.io/info-gateway created virtualservice.networking.istio.io/info created
GATEWAY_URL
매개변수 값을 설정합니다.$ export GATEWAY_URL=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.host}')
2.8.6.2. 기본 대상 규칙 추가
Bookinfo 애플리케이션을 사용하기 전에 먼저 기본 대상 규칙을 추가해야 합니다. 상호 TLS(Transport layer security) 인증을 활성화했는지 여부에 따라 사전 구성된 YAML 파일이 두 개 있습니다.
프로세스
대상 규칙을 추가하려면 다음 명령 중 하나를 실행합니다.
상호 TLS를 활성화하지 않은 경우:
$ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.4/samples/bookinfo/networking/destination-rule-all.yaml
상호 TLS를 활성화한 경우:
$ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.4/samples/bookinfo/networking/destination-rule-all-mtls.yaml
출력은 다음과 유사합니다.
destinationrule.networking.istio.io/productpage created destinationrule.networking.istio.io/reviews created destinationrule.networking.istio.io/ratings created destinationrule.networking.istio.io/details created
2.8.6.3. Bookinfo 설치 확인
샘플 Bookinfo 애플리케이션이 성공적으로 배포되었는지 확인하려면 다음 단계를 수행합니다.
사전 요구 사항
- Red Hat OpenShift Service Mesh가 설치되어 있어야 합니다.
- Bookinfo 샘플 애플리케이션을 설치하는 단계를 완료합니다.
CLI의 프로시저
- OpenShift Container Platform CLI에 로그인합니다.
다음 명령으로 모든 pod가 준비되었는지 확인합니다.
$ oc get pods -n info
모든 pod의 상태는
Running
이어야 합니다. 출력은 다음과 유사합니다.NAME READY STATUS RESTARTS AGE details-v1-55b869668-jh7hb 2/2 Running 0 12m productpage-v1-6fc77ff794-nsl8r 2/2 Running 0 12m ratings-v1-7d7d8d8b56-55scn 2/2 Running 0 12m reviews-v1-868597db96-bdxgq 2/2 Running 0 12m reviews-v2-5b64f47978-cvssp 2/2 Running 0 12m reviews-v3-6dfd49b55b-vcwpf 2/2 Running 0 12m
다음 명령을 실행하여 제품 페이지의 URL을 검색합니다.
echo "http://$GATEWAY_URL/productpage"
- 웹 브라우저에 출력을 복사하여 붙여넣어 Bookinfo 제품 페이지가 배포되었는지 확인합니다.
Kiali 웹 콘솔의 절차
Kiali 웹 콘솔의 주소를 가져옵니다.
-
OpenShift Container Platform 웹 콘솔에
cluster-admin
권한이 있는 사용자로 로그인합니다. Red Hat OpenShift Dedicated를 사용하는 경우dedicated-admin
역할의 계정이 있어야 합니다. -
네트워킹
경로로 이동합니다. 경로 페이지의 네임스페이스 메뉴에서 Service Mesh Control Plane 프로젝트(예:
istio-system
)를 선택합니다.위치 열은 각 경로에 대한 연결된 주소를 표시합니다.
- Kiali의 위치 열에서 링크를 클릭합니다.
- OpenShift로 로그인 을 클릭합니다. Kiali 개요 화면에 각 프로젝트 네임스페이스에 대한 타일이 표시됩니다.
-
OpenShift Container Platform 웹 콘솔에
- Kiali에서 그래프 를 클릭합니다.
- 네임스페이스 목록에서 info를 선택하고 그래프 유형 목록에서 앱 그래프 를 선택합니다.
디스플레이 메뉴에서 유휴 노드 표시를 클릭합니다.
이렇게 하면 정의되었지만 요청 수신 또는 전송되지 않은 노드가 표시됩니다. 애플리케이션이 올바르게 정의되었지만 요청 트래픽이 보고되지 않았는지 확인할 수 있습니다.
- Duration 메뉴를 사용하여 오래된 트래픽이 캡처되도록 기간을 늘립니다.
- Refresh Rate 메뉴를 사용하여 트래픽을 더 자주 새로 고치거나 전혀 새로 고침하지 않습니다.
- 서비스,워크로드 또는 Istio Config 를 클릭하여 정보 구성 요소의 목록 보기를 확인하고 정상인지 확인합니다.
2.8.6.4. Bookinfo 애플리케이션 제거
다음 단계에 따라 Bookinfo 애플리케이션을 제거하십시오.
사전 요구 사항
- OpenShift Container Platform 4.1 이상이 설치되었습니다.
- Red Hat OpenShift Service Mesh 2.4.4가 설치되었습니다.
-
OpenShift CLI(
oc
)에 액세스합니다.
2.8.6.4.1. Bookinfo 프로젝트 삭제
절차
- OpenShift Container Platform 웹 콘솔에 로그인합니다.
-
홈
프로젝트를 클릭합니다. -
정보
메뉴 를 클릭한 다음 프로젝트 삭제 를 클릭합니다. 확인 대화 상자에
info
를 입력한 다음 삭제 를 클릭합니다.또는 CLI를 사용하여 이 명령을 실행하여
info
프로젝트를 생성할 수도 있습니다.$ oc delete project info
2.8.6.4.2. 서비스 메시 멤버 롤에서 Bookinfo 프로젝트를 제거
절차
- OpenShift Container Platform 웹 콘솔에 로그인합니다.
-
Operators
설치된 Operators를 클릭합니다. -
프로젝트 메뉴를 클릭하고 목록에서
istio-system
을 선택합니다. - Red Hat OpenShift Service Mesh Operator에 대해 제공된 APIS에서 Istio Service Mesh 멤버 롤 링크를 클릭합니다.
-
ServiceMeshMemberRoll
메뉴 를 클릭하고 서비스 메시 멤버 롤 편집 을 선택합니다. 기본 서비스 메시 멤버 롤 YAML을 편집하고 멤버 목록에서
정보를
제거합니다.또는 CLI를 사용하여 이 명령을 실행하여
ServiceMeshMemberRoll
에서info
프로젝트를 제거할 수 있습니다. 이 예제에서istio-system
은 Service Mesh Control Plane 프로젝트의 이름입니다.$ oc -n istio-system patch --type='json' smmr default -p '[{"op": "remove", "path": "/spec/members", "value":["'"info"'"]}]'
- 저장을 클릭하여 서비스 메시 멤버 롤을 업데이트합니다.
2.8.7. 예제 추적 생성 및 추적 데이터 분석
Jaeger는 오픈 소스 분산 추적 시스템입니다. Jaeger를 사용하면 애플리케이션을 구성하는 다양한 마이크로 서비스를 통해 요청의 경로를 따라 추적할 수 있습니다. Jaeger는 기본적으로 서비스 메시의 일부로 설치됩니다.
이 튜토리얼에서는 서비스 메시와 Bookinfo 샘플 애플리케이션을 사용하여 Jaeger로 분산 추적을 수행하는 방법을 보여줍니다.
사전 요구 사항
- OpenShift Container Platform 4.1 이상이 설치되었습니다.
- Red Hat OpenShift Service Mesh 2.4.4가 설치되었습니다.
- 설치 중에 Jaeger가 활성화되었습니다.
- Bookinfo 예제 애플리케이션이 설치되었습니다.
절차
Bookinfo 샘플 애플리케이션을 설치한 후 트래픽을 메시로 보냅니다. 다음 명령을 여러 번 입력합니다.
$ curl "http://$GATEWAY_URL/productpage"
이 명령은 애플리케이션의
productpage
마이크로 서비스에 액세스하는 사용자를 시뮬레이션합니다.OpenShift Container Platform 콘솔에서 네트워킹
경로로 이동하여 위치에 나열된 URL인 Jaeger 경로를 검색합니다. 다른 방법으로 CLI를 사용하여 경로에 대한 세부 정보를 쿼리합니다. 이 예제에서
istio-system
은 Service Mesh Control Plane 네임스페이스입니다.$ export JAEGER_URL=$(oc get route -n istio-system jaeger -o jsonpath='{.spec.host}')
다음 명령을 입력하여 Jaeger 콘솔의 URL을 표시합니다. 결과를 브라우저에 붙여넣고 해당 URL로 이동합니다.
echo $JAEGER_URL
- OpenShift Container Platform 콘솔에 액세스하는 데 사용하는 것과 동일한 사용자 이름 및 암호를 사용하여 로그인합니다.
- 서비스 메뉴에서 Jaeger 대시보드 왼쪽 창에 있는 productpage.info 를 선택하고 창 하단에 있는 추적 찾기를 클릭합니다. 추적 목록이 표시됩니다.
-
목록의 추적 중 하나를 클릭하여 해당 추적에 대한 상세 보기를 엽니다. 목록의 첫 번째 (가장 최근) 추적을 클릭하면
/productpage
의 최신 새로 고침에 해당하는 세부 사항이 표시됩니다.