2.25. 서비스 메시 문제 해결
이 섹션에서는 Red Hat OpenShift Service Mesh의 일반적인 문제를 식별하고 해결하는 방법을 설명합니다. 다음 섹션을 사용하여 OpenShift Container Platform에 Red Hat OpenShift Service Mesh를 배포할 때 문제를 해결하고 디버그하는 데 도움이 됩니다.
2.25.1. Service Mesh 버전 이해
시스템에 배포한 Red Hat OpenShift Service Mesh의 버전을 이해하려면 각 구성 요소 버전을 관리하는 방법을 이해해야 합니다.
Operator 버전 - 최신 Operator 버전은 2.6.2입니다. Operator 버전 번호는 현재 설치된 Operator의 버전만 나타냅니다. Red Hat OpenShift Service Mesh Operator는 여러 버전의 Service Mesh Control Plane을 지원하므로 Operator의 버전은 배포된
ServiceMeshControlPlane
리소스의 버전을 확인하지 않습니다.중요최신 Operator 버전으로 업그레이드하면 패치 업데이트가 자동으로 적용되지만 Service Mesh Control Plane을 최신 마이너 버전으로 자동으로 업그레이드하지는 않습니다.
ServiceMeshControlPlane 버전 -
ServiceMeshControlPlane
버전은 사용 중인 Red Hat OpenShift Service Mesh의 버전을 결정합니다.ServiceMeshControlPlane
리소스의spec.version
필드 값은 Red Hat OpenShift Service Mesh를 설치하고 배포하는 데 사용되는 아키텍처 및 구성 설정을 제어합니다. Service Mesh Control Plane을 생성할 때 다음 두 가지 방법 중 하나로 버전을 설정할 수 있습니다.- 양식 보기에서 구성하려면 컨트롤 플레인 버전 메뉴에서 버전을 선택합니다.
-
YAML 보기에서 구성하려면 YAML 파일에서
spec.version
값을 설정합니다.
OLM(Operator Lifecycle Manager)은 Service Mesh Control Plane 업그레이드를 관리하지 않으므로 SMCP를 수동으로 업그레이드하지 않는 한 Operator 및 ServiceMeshControlPlane
(SMCP)의 버전 번호가 일치하지 않을 수 있습니다.
2.25.2. Operator 설치 문제 해결
이 섹션의 정보 외에도 다음 주제를 검토하십시오.
2.25.2.1. Operator 설치 검증
Red Hat OpenShift Service Mesh Operator를 설치하면 OpenShift에서 성공적인 Operator 설치의 일부로 다음 오브젝트를 자동으로 생성합니다.
- 구성 맵
- 사용자 정의 리소스 정의
- 배포
- pods
- 복제본 세트
- 역할
- 역할 바인딩
- secrets
- 서비스 계정
- services
OpenShift Container Platform 콘솔에서
OpenShift Container Platform 콘솔을 사용하여 Operator Pod를 사용할 수 있고 실행 중인지 확인할 수 있습니다.
-
워크로드
Pod로 이동합니다. -
openshift-operators
네임스페이스를 선택합니다. 다음 Pod가 존재하고
running
상태가 있는지 확인합니다.-
istio-operator
-
jaeger-operator
-
kiali-operator
-
-
openshift-operators-redhat
네임스페이스를 선택합니다. -
elasticsearch-operator
pod가 존재하고running
상태가 있는지 확인합니다.
명령줄에서
다음 명령을 사용하여 Operator Pod를 사용할 수 있고
openshift-operators
네임스페이스에서 실행 중인지 확인합니다.$ oc get pods -n openshift-operators
출력 예
NAME READY STATUS RESTARTS AGE istio-operator-bb49787db-zgr87 1/1 Running 0 15s jaeger-operator-7d5c4f57d8-9xphf 1/1 Running 0 2m42s kiali-operator-f9c8d84f4-7xh2v 1/1 Running 0 64s
다음 명령을 사용하여 Elasticsearch Operator를 확인합니다.
$ oc get pods -n openshift-operators-redhat
출력 예
NAME READY STATUS RESTARTS AGE elasticsearch-operator-d4f59b968-796vq 1/1 Running 0 15s
2.25.2.2. 서비스 메시 Operator 문제 해결
Operator 문제가 발생하는 경우:
- Operator 서브스크립션 상태를 확인합니다.
- 지원되는 Red Hat 버전 대신 Operator의 커뮤니티 버전을 설치하지 않았는지 확인합니다.
-
Red Hat OpenShift Service Mesh를 설치할
cluster-admin
역할이 있는지 확인합니다. - 문제가 Operator 설치와 관련된 경우 Operator Pod 로그의 오류가 있는지 확인합니다.
OpenShift 콘솔을 통해서만 Operator를 설치할 수 있으며 명령줄에서 OperatorHub에 액세스할 수 없습니다.
2.25.2.2.1. Operator Pod 로그 보기
oc logs
명령을 사용하여 Operator 로그를 볼 수 있습니다. Red Hat은 지원 케이스를 해결하기 위해 로그를 요청할 수 있습니다.
프로세스
Operator Pod 로그를 보려면 명령을 입력합니다.
$ oc logs -n openshift-operators <podName>
예를 들면 다음과 같습니다.
$ oc logs -n openshift-operators istio-operator-bb49787db-zgr87
2.25.3. 컨트롤 플레인 문제 해결
Service Mesh Control Plane은 여러 이전 컨트롤 플레인 구성 요소(Citadel, Galley, Pilot)를 단일 바이너리로 통합하는 Istiod로 구성됩니다. ServiceMeshControlPlane
을 배포하면 아키텍처 주제에 설명된 대로 Red Hat OpenShift Service Mesh를 구성하는 다른 구성 요소도 생성합니다.
2.25.3.1. Service Mesh Control Plane 설치 검증
Service Mesh Control Plane을 생성할 때 Service Mesh Operator는 ServiceMeshControlPlane
리소스 파일에 지정한 매개변수를 사용하여 다음을 수행합니다.
Istio 구성 요소를 생성하고 다음 Pod를 배포합니다.
-
Istiod
-
istio-ingressgateway
-
istio-egressgateway
-
grafana
-
prometheus
-
Kiali Operator를 호출하여 SMCP 또는 Kiali 사용자 정의 리소스의 구성에 따라 Kaili 배포를 생성합니다.
참고Service Mesh Operator가 아닌 Kiali Operator에서 Kiali 구성 요소를 봅니다.
Red Hat OpenShift distributed tracing Platform (Jaeger) Operator를 호출하여 SMCP 또는 Jaeger 사용자 정의 리소스의 구성을 기반으로 분산 추적 플랫폼(Jaeger) 구성 요소를 생성합니다.
참고Service Mesh Operator가 아닌 Red Hat Elasticsearch Operator에서 Red Hat OpenShift distributed tracing Platform (Jaeger) Operator 및 Elasticsearch 구성 요소를 통해 Jaeger 구성 요소를 봅니다.
OpenShift Container Platform 콘솔에서
OpenShift Container Platform 웹 콘솔에서 Service Mesh Control Plane 설치를 확인할 수 있습니다.
-
Operators
설치된 Operator로 이동합니다. -
istio-system
네임스페이스를 선택합니다. Red Hat OpenShift Service Mesh Operator를 선택합니다.
- Istio Service Mesh Control Plane 탭을 클릭합니다.
-
컨트롤 플레인의 이름을 클릭합니다(예:
basic
). -
배포에서 생성한 리소스를 보려면 리소스 탭을 클릭합니다. 예를 들어 필터를 사용하여 뷰의 범위를 좁힐 수 있습니다. 예를 들어 모든 Pod 의 상태가
running
인지 확인할 수 있습니다. -
SMCP 상태에 문제가 표시되면 YAML 파일의
status:
출력을 확인하여 자세한 내용을 확인합니다.
-
Operator
설치된 Operator 로 다시 이동합니다. OpenShift Elasticsearch Operator를 선택합니다.
- Elasticsearch 탭을 클릭합니다.
-
배포 이름을 클릭합니다(예:
elasticsearch
). - 배포에서 생성한 리소스를 보려면 리소스 탭 을 클릭합니다.
-
Status
열에 문제가 있는 경우 YAML 탭에서status:
output을 확인하여 자세한 내용을 확인합니다.
-
Operator
설치된 Operator 로 다시 이동합니다. Red Hat OpenShift distributed tracing Platform (Jaeger) Operator를 선택합니다.
- Jaeger 탭을 클릭합니다.
-
배포 이름을 클릭합니다(예:
jaeger
). - 배포에서 생성한 리소스를 보려면 리소스 탭을 클릭합니다.
-
Status
열에 문제가 표시되면 YAML 탭에서status:
output을 확인하여 자세한 내용을 확인합니다.
-
Operators
설치된 Operator로 이동합니다. Kiali Operator를 선택합니다.
- Istio Service Mesh Control Plane 탭을 클릭합니다.
-
배포 이름을 클릭합니다(예:
kiali
). - 배포에서 생성한 리소스를 보려면 리소스 탭을 클릭합니다.
-
Status
열에 문제가 있는 경우 YAML 탭에서status:
output을 확인하여 자세한 내용을 확인합니다.
-
Operators
명령줄에서
다음 명령을 실행하여 Service Mesh Control Plane Pod를 사용 가능하고 실행 중인지 확인합니다. 여기서
istio-system
은 SMCP를 설치한 네임스페이스입니다.$ oc get pods -n istio-system
출력 예
NAME READY STATUS RESTARTS AGE grafana-6776785cfc-6fz7t 2/2 Running 0 102s istio-egressgateway-5f49dd99-l9ppq 1/1 Running 0 103s istio-ingressgateway-6dc885c48-jjd8r 1/1 Running 0 103s istiod-basic-6c9cc55998-wg4zq 1/1 Running 0 2m14s jaeger-6865d5d8bf-zrfss 2/2 Running 0 100s kiali-579799fbb7-8mwc8 1/1 Running 0 46s prometheus-5c579dfb-6qhjk 2/2 Running 0 115s
다음 명령을 사용하여 Service Mesh Control Plane 배포 상태를 확인합니다.
istio-system
을 SMCP를 배포한 네임스페이스로 교체합니다.$ oc get smcp -n istio-system
STATUS 열이
ComponentsReady
이면 설치가 성공적으로 완료되었습니다.출력 예
NAME READY STATUS PROFILES VERSION AGE basic 10/10 ComponentsReady ["default"] 2.1.3 4m2s
Service Mesh Control Plane을 수정하고 재배포한 경우 상태는
UpdateSuccessful
여야 합니다.출력 예
NAME READY STATUS TEMPLATE VERSION AGE basic-install 10/10 UpdateSuccessful default v1.1 3d16h
SMCP 상태에
ComponentsReady
이외의 항목이 표시되면 SCMP 리소스의status:
출력을 확인하여 자세한 내용을 확인합니다.$ oc describe smcp <smcp-name> -n <controlplane-namespace>
출력 예
$ oc describe smcp basic -n istio-system
다음 명령을 사용하여 Jaeger 배포의 상태를 확인합니다. 여기서
istio-system
은 SMCP를 배포한 네임스페이스입니다.$ oc get jaeger -n istio-system
출력 예
NAME STATUS VERSION STRATEGY STORAGE AGE jaeger Running 1.30.0 allinone memory 15m
다음 명령을 사용하여 Kiali 배포의 상태를 확인합니다. 여기서
istio-system
은 SMCP를 배포한 네임스페이스입니다.$ oc get kiali -n istio-system
출력 예
NAME AGE kiali 15m
2.25.3.1.1. Kiali 콘솔에 액세스
Kiali 콘솔에서 애플리케이션의 토폴로지, 상태 및 지표를 볼 수 있습니다. 서비스에 문제가 발생하면 Kiali 콘솔을 사용하여 서비스를 통해 데이터 흐름을 볼 수 있습니다. 추상 애플리케이션, 서비스 및 워크로드를 포함하여 다양한 수준에서 메시 구성 요소에 대한 인사이트를 볼 수 있습니다. Kiali는 네임스페이스에 대한 대화형 그래프 보기도 실시간으로 제공합니다.
Kiali 콘솔에 액세스하려면 Red Hat OpenShift Service Mesh가 설치되어 Kiali가 설치되어 구성되어 있어야 합니다.
설치 프로세스에서 Kiali 콘솔에 액세스할 경로를 생성합니다.
Kiali 콘솔의 URL을 알고 있는 경우 직접 액세스할 수 있습니다. URL을 모르는 경우 다음 지침을 사용합니다.
관리자 절차
- 관리자 역할을 사용하여 OpenShift Container Platform 웹 콘솔에 로그인합니다.
-
홈
프로젝트를 클릭합니다. - 프로젝트 페이지에서 필요한 경우 필터를 사용하여 프로젝트 이름을 찾습니다.
-
프로젝트 이름을 클릭합니다(예:
info
). - 프로젝트 세부 정보 페이지의 시작자 섹션에서 Kiali 링크를 클릭합니다.
OpenShift Container Platform 콘솔에 액세스하는 데 사용하는 것과 동일한 사용자 이름 및 암호를 사용하여 Kiali 콘솔에 로그인합니다.
Kiali 콘솔에 처음 로그인하면 볼 수 있는 권한이 있는 서비스 메시의 모든 네임스페이스가 표시되는 개요 페이지가 표시됩니다.
콘솔 설치 및 네임스페이스가 아직 메시에 추가되지 않은 경우
istio-system
이외의 표시할 데이터가 없을 수 있습니다.
개발자를 위한 절차
- 개발자 역할을 사용하여 OpenShift Container Platform 웹 콘솔에 로그인합니다.
- 프로젝트를 클릭합니다.
- 프로젝트 세부 정보 페이지에서 필요한 경우 필터를 사용하여 프로젝트 이름을 찾습니다.
-
프로젝트 이름을 클릭합니다(예:
info
). - 프로젝트 페이지의 시작 관리자 섹션에서 Kiali 링크를 클릭합니다.
- OpenShift를 사용하여 로그인을 클릭합니다.
2.25.3.1.2. Jaeger 콘솔에 액세스
Jaeger 콘솔에 액세스하려면 Red Hat OpenShift Service Mesh가 설치되어 있어야 합니다. Red Hat OpenShift distributed tracing Platform (Jaeger)이 설치되어 구성되어 있어야 합니다.
설치 프로세스는 Jaeger 콘솔에 액세스하기 위한 경로를 생성합니다.
Jaeger 콘솔의 URL을 알고 있으면 직접 액세스할 수 있습니다. URL을 모르는 경우 다음 지침을 사용합니다.
Red Hat OpenShift Service Mesh 2.5부터 Red Hat OpenShift distributed tracing Platform (Jaeger) 및 OpenShift Elasticsearch Operator는 더 이상 사용되지 않으며 향후 릴리스에서 제거됩니다. Red Hat은 현재 릴리스 라이프사이클 동안 이 기능에 대한 버그 수정 및 지원을 제공하지만 이 기능은 더 이상 개선 사항을 받지 않으며 제거됩니다. Red Hat OpenShift distributed tracing Platform (Jaeger) 대신 Red Hat OpenShift distributed tracing Platform (Tempo)을 대신 사용할 수 있습니다.
OpenShift 콘솔의 절차
-
OpenShift Container Platform 웹 콘솔에 cluster-admin 권한이 있는 사용자로 로그인합니다. Red Hat OpenShift Dedicated를 사용하는 경우
dedicated-admin
역할의 계정이 있어야 합니다. -
네트워킹
경로로 이동합니다. 경로 페이지의 네임스페이스 메뉴에서 Service Mesh Control Plane 프로젝트(예:
istio-system
)를 선택합니다.위치 열에는 각 경로에 연결된 주소가 표시됩니다.
-
필요한 경우 필터를 사용하여
jaeger
경로를 찾습니다. 콘솔을 시작하려면 경로 위치를 클릭합니다. - OpenShift를 사용하여 로그인을 클릭합니다.
Kiali 콘솔의 절차
- Kiali 콘솔을 시작합니다.
- 왼쪽 탐색 창에서 분산 추적 을 클릭합니다.
- OpenShift를 사용하여 로그인을 클릭합니다.
CLI의 프로세스
cluster-admin
역할의 사용자로 OpenShift Container Platform CLI에 로그인합니다. Red Hat OpenShift Dedicated를 사용하는 경우dedicated-admin
역할의 계정이 있어야 합니다.$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
명령줄을 사용하여 경로 세부 정보를 쿼리하려면 다음 명령을 입력합니다. 이 예에서
istio-system
은 Service Mesh Control Plane 네임스페이스입니다.$ oc get route -n istio-system jaeger -o jsonpath='{.spec.host}'
-
브라우저를 시작하고
https://<JAEGER_URL>
로 이동합니다. 여기서<JAEGER_URL>
은 이전 단계에서 발견한 경로입니다. - OpenShift Container Platform 콘솔에 액세스하는 데 사용하는 것과 동일한 사용자 이름 및 암호를 사용하여 로그인합니다.
서비스 메시에 서비스를 추가하고 추적을 생성한 경우 필터를 사용하고 추적 찾기 버튼을 사용하여 추적 데이터를 검색할 수 있습니다.
콘솔 설치를 검증하는 경우 표시할 추적 데이터가 없습니다.
2.25.3.2. 서비스 메시 컨트롤 플레인 문제 해결
Service Mesh Control Plane을 배포하는 동안 문제가 발생하는 경우
-
ServiceMeshControlPlane
리소스가 서비스 및 Operator와 별도의 프로젝트에 설치되어 있는지 확인합니다. 이 문서에서는istio-system
프로젝트를 예로 사용하지만 Operator 및 서비스가 포함된 프로젝트와 별도로 모든 프로젝트에 컨트롤 플레인을 배포할 수 있습니다. -
ServiceMeshControlPlane
및Jaeger
사용자 정의 리소스가 동일한 프로젝트에 배포되었는지 확인합니다. 예를 들어 둘 다istio-system
프로젝트를 사용합니다.
2.25.4. 데이터 플레인 문제 해결
데이터 플레인 은 서비스 메시의 서비스 간 인바운드 및 아웃바운드 네트워크 통신을 가로채고 제어하는 지능형 프록시 집합입니다.
Red Hat OpenShift Service Mesh는 애플리케이션 Pod 내의 프록시 사이드카를 사용하여 애플리케이션에 서비스 메시 기능을 제공합니다.
2.25.4.1. 사이드카 삽입 문제 해결
Red Hat OpenShift Service Mesh는 Pod에 프록시 사이드카를 자동으로 삽입하지 않습니다. 사이드카 삽입을 선택해야 합니다.
2.25.4.1.1. Istio 사이드카 삽입 문제 해결
애플리케이션의 배포에서 자동 삽입이 활성화되어 있는지 확인합니다. Envoy 프록시에 대한 자동 삽입이 활성화된 경우 spec.template.metadata.annotations
아래의 Deployment
리소스에 sidecar.istio.io/inject:"true"
주석이 있어야 합니다.
2.25.4.1.2. Jaeger 에이전트 사이드카 삽입 문제 해결
애플리케이션의 배포에서 자동 삽입이 활성화되어 있는지 확인합니다. Jaeger 에이전트에 대한 자동 삽입이 활성화된 경우 Deployment
리소스에 sidecar.jaegertracing.io/inject:"true"
주석이 있어야 합니다.
사이드카 삽입에 대한 자세한 내용은 자동 삽입 활성화를참조하십시오.