1.22. 서비스 메시 문제 해결

이 섹션에서는 Red Hat OpenShift Service Mesh의 일반적인 문제를 식별하고 해결하는 방법을 설명합니다. 다음 섹션을 사용하여 OpenShift Container Platform에 Red Hat OpenShift Service Mesh를 배포할 때 문제를 해결하고 디버깅하는 데 도움이 됩니다.

1.22.1. Service Mesh 버전 이해

시스템에 배포된 Red Hat OpenShift Service Mesh 버전을 이해하려면 각 구성 요소 버전이 관리되는 방식을 이해해야 합니다.

  • Operator 버전 - 최신 Operator 버전은 2.3.2입니다. Operator 버전 번호는 현재 설치된 Operator의 버전만 나타냅니다. Red Hat OpenShift Service Mesh Operator는 Service Mesh Control Plane의 여러 버전을 지원하므로 Operator 버전이 배포된 ServiceMeshControlPlane 리소스의 버전을 결정하지 않습니다.

    중요

    최신 Operator 버전으로 업그레이드하면 패치 업데이트가 자동으로 적용되지만 서비스 메시 컨트롤 플레인을 최신 마이너 버전으로 자동 업그레이드하지는 않습니다.

  • ServiceMeshControlPlane 버전 - ServiceMeshControlPlane 버전은 사용 중인 Red Hat OpenShift Service Mesh 버전을 결정합니다. ServiceMeshControlPlane 리소스의 spec.version 필드 값은 Red Hat OpenShift Service Mesh를 설치하고 배포하는 데 사용되는 아키텍처 및 구성 설정을 제어합니다. Service Mesh Control Plane을 생성할 때 다음 두 가지 방법 중 하나로 버전을 설정할 수 있습니다.

    • 양식 보기에서 구성하려면 컨트롤 플레인 버전 메뉴에서 버전을 선택합니다.
    • YAML View(YAML 보기)에서 구성하려면 YAML 파일에서 spec.version 값을 설정합니다.

OLM(Operator Lifecycle Manager)은 서비스 메시 컨트롤 플레인 업그레이드를 관리하지 않으므로 SMCP를 수동으로 업그레이드하지 않으면 Operator 및 ServiceMeshControlPlane (SMCP)의 버전 번호가 일치하지 않을 수 있습니다.

1.22.2. Operator 설치 문제 해결

이 섹션의 정보 외에도 다음 주제를 검토하십시오.

1.22.2.1. Operator 설치 검증

Red Hat OpenShift Service Mesh Operator를 설치하면 OpenShift에서 성공적인 Operator 설치의 일부로 다음 오브젝트를 자동으로 생성합니다.

  • 구성 맵
  • 사용자 정의 리소스 정의
  • Deployments
  • pods
  • 복제본 세트
  • 역할
  • 역할 바인딩
  • secrets
  • 서비스 계정
  • services

OpenShift Container Platform 콘솔의 경우

OpenShift Container Platform 콘솔을 사용하여 Operator Pod를 사용할 수 있고 실행 중인지 확인할 수 있습니다.

  1. 워크로드Pod로 이동합니다.
  2. openshift-operators 네임스페이스를 선택합니다.
  3. 다음 Pod가 존재하고 running 상태가 있는지 확인합니다.

    • istio-operator
    • jaeger-operator
    • kiali-operator
  4. openshift-operators-redhat 네임스페이스를 선택합니다.
  5. elasticsearch-operator 포드가 있으며 실행 중 상태가 있는지 확인합니다.

명령행에서

  1. 다음 명령을 사용하여 openshift-operators 네임스페이스에서 Operator Pod를 사용할 수 있고 실행 중인지 확인합니다.

    $ 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

  2. 다음 명령을 사용하여 Elasticsearch Operator를 확인합니다.

    $ oc get pods -n openshift-operators-redhat

    출력 예

    NAME                                      READY   STATUS    RESTARTS   AGE
    elasticsearch-operator-d4f59b968-796vq     1/1     Running   0          15s

1.22.2.2. 서비스 메시 Operator 문제 해결

Operator 문제가 발생하는 경우 다음을 수행합니다.

  • Operator 서브스크립션 상태를 확인합니다.
  • 지원되는 Red Hat 버전 대신 커뮤니티 버전의 Operator를 설치하지 않았는지 확인합니다.
  • Red Hat OpenShift Service Mesh를 설치할 cluster-admin 역할이 있는지 확인합니다.
  • 문제가 Operator 설치와 관련된 경우 Operator Pod 로그에 오류가 있는지 확인합니다.
참고

OpenShift 콘솔을 통해서만 Operator를 설치할 수 있으며 명령줄에서 OperatorHub에 액세스할 수 없습니다.

1.22.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

1.22.3. 컨트롤 플레인 문제 해결

서비스 메시 컨트롤 플레인 은 이전 여러 컨트롤 플레인 구성 요소(Citadel, Galley, Pilot)를 단일 바이너리로 통합하는 Istiod로 구성됩니다. ServiceMeshControlPlane 을 배포하면 아키텍처 항목에 설명된 대로 Red Hat OpenShift Service Mesh를 구성하는 다른 구성 요소도 생성됩니다.

1.22.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 Operator를 호출하여 SMCP 또는 Jaeger 사용자 정의 리소스의 구성을 기반으로 분산 추적 플랫폼 구성 요소를 생성합니다.

    참고

    Service Mesh Operator가 아닌 Red Hat OpenShift distributed tracing platform Operator 및 Elasticsearch 구성 요소 아래에 있는 Jaeger 구성 요소를 확인합니다.

    OpenShift Container Platform 콘솔의 경우

    OpenShift Container Platform 웹 콘솔에서 Service Mesh Control Plane 설치를 확인할 수 있습니다.

    1. Operators설치된 Operator로 이동합니다.
    2. <istio-system> 네임스페이스를 선택합니다.
    3. Red Hat OpenShift Service Mesh Operator를 선택합니다.

      1. Istio Service Mesh Control Plane 탭을 클릭합니다.
      2. 컨트롤 플레인의 이름을 클릭합니다(예: basic ).
      3. 배포에서 생성한 리소스를 보려면 Resources (리소스) 탭을 클릭합니다. 예를 들어 필터를 사용하여 보기 범위를 좁힐 수 있습니다. 예를 들어 모든 Pod 의 상태가 running 인지 확인할 수 있습니다.
      4. SMCP 상태가 문제가 표시되면 YAML 파일의 status: 출력에서 자세한 내용을 확인합니다.
      5. Operator → 설치된 Operator 로 다시 이동합니다.
    4. OpenShift Elasticsearch Operator를 선택합니다.

      1. Elasticsearch 탭을 클릭합니다.
      2. 배포 이름을 클릭합니다(예: elasticsearch ).
      3. 배포에서 생성된 리소스를 보려면 리소스 탭을 클릭합니다. .
      4. Status (상태) 열에 문제가 있는 경우 자세한 내용은 YAML 탭에서 status: 출력을 확인합니다.
      5. Operator → 설치된 Operator 로 다시 이동합니다.
    5. Red Hat OpenShift distributed tracing platform Operator를 선택합니다.

      1. Jaeger 탭을 클릭합니다.
      2. 배포 이름을 클릭합니다(예: jaeger ).
      3. 배포에서 생성한 리소스를 보려면 Resources (리소스) 탭을 클릭합니다.
      4. Status 열이 문제를 나타내는 경우 자세한 내용은 YAML 탭에서 status: 출력을 확인합니다.
      5. Operators설치된 Operator로 이동합니다.
    6. Kiali Operator를 선택합니다.

      1. Istio Service Mesh Control Plane 탭을 클릭합니다.
      2. 배포 이름을 클릭합니다(예: kiali ).
      3. 배포에서 생성한 리소스를 보려면 Resources (리소스) 탭을 클릭합니다.
      4. Status (상태) 열에 문제가 있는 경우 자세한 내용은 YAML 탭에서 status: 출력을 확인합니다.

명령행에서

  1. 다음 명령을 실행하여 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

  2. 다음 명령을 사용하여 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

  3. SMCP 상태가 ComponentsReady 이외의 항목을 나타내는 경우 자세한 내용은 SCMP 리소스의 status: output을 확인하십시오.

    $ oc describe smcp <smcp-name> -n <controlplane-namespace>

    출력 예

    $ oc describe smcp basic -n istio-system

  4. 다음 명령을 사용하여 Jaeger 배포의 상태를 확인합니다. 여기서 istio-system 은 SMCP를 배포한 네임스페이스입니다.

    $ oc get jaeger -n <istio-system>

    출력 예

    NAME     STATUS    VERSION   STRATEGY   STORAGE   AGE
    jaeger   Running   1.30.0    allinone   memory    15m

  5. 다음 명령을 사용하여 Kiali 배포의 상태를 확인합니다. 여기서 istio-system 은 SMCP를 배포한 네임스페이스입니다.

    $ oc get kiali -n <istio-system>

    출력 예

    NAME    AGE
    kiali   15m

1.22.3.1.1. Kiali 콘솔에 액세스

Kiali 콘솔에서 애플리케이션의 토폴로지, 상태 및 지표를 볼 수 있습니다. 서비스에 문제가 발생하면 Kiali 콘솔을 사용하여 서비스를 통해 데이터 흐름을 볼 수 있습니다. 추상 애플리케이션, 서비스 및 워크로드를 포함하여 다양한 수준에서 메시 구성 요소에 대한 인사이트를 볼 수 있습니다. Kiali는 네임스페이스에 대한 대화형 그래프 보기도 실시간으로 제공합니다.

Kiali 콘솔에 액세스하려면 Red Hat OpenShift Service Mesh가 설치되어 있어야 Kiali가 설치 및 구성되어 있어야 합니다.

설치 프로세스는 Kiali 콘솔에 액세스할 수 있는 경로를 생성합니다.

Kiali 콘솔의 URL을 알고 있는 경우 직접 액세스할 수 있습니다. URL을 모르는 경우 다음 지침을 사용합니다.

관리자 절차

  1. 관리자 역할을 사용하여 OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. 프로젝트를 클릭합니다.
  3. 필요한 경우 Projects(프로젝트) 페이지에서 필터를 사용하여 프로젝트 이름을 찾습니다.
  4. 프로젝트 이름을 클릭합니다(예: info ).
  5. Project Details(프로젝트 세부 정보 ) 페이지의 Launcher (시작기) 섹션에서 Kiali 링크를 클릭합니다.
  6. OpenShift Container Platform 콘솔에 액세스하는 데 사용하는 것과 동일한 사용자 이름 및 암호를 사용하여 Kiali 콘솔에 로그인합니다.

    Kiali 콘솔에 처음 로그인하면 볼 권한이 있는 서비스 메시의 모든 네임스페이스를 표시하는 개요 페이지가 표시됩니다.

    콘솔 설치를 검증하고 네임스페이스가 메시에 아직 추가되지 않은 경우 istio-system 이외의 데이터가 표시되지 않을 수 있습니다.

개발자 절차

  1. 개발자 역할을 사용하여 OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. Project(프로젝트 )를 클릭합니다.
  3. 필요한 경우 Project Details(프로젝트 세부 정보) 페이지에서 필터를 사용하여 프로젝트 이름을 찾습니다.
  4. 프로젝트 이름을 클릭합니다(예: info ).
  5. 프로젝트 페이지의 Launcher (시작기) 섹션에서 Kiali 링크를 클릭합니다.
  6. OpenShift로 로그인을 클릭합니다.
1.22.3.1.2. Jaeger 콘솔에 액세스

Jaeger 콘솔에 액세스하려면 Red Hat OpenShift Service Mesh가 설치되어 있어야 하는 Red Hat OpenShift distributed tracing 플랫폼이 설치 및 구성되어 있어야 합니다.

설치 프로세스는 Jaeger 콘솔에 액세스하기 위한 경로를 생성합니다.

Jaeger 콘솔의 URL을 알고 있으면 직접 액세스할 수 있습니다. URL을 모르는 경우 다음 지침을 사용합니다.

OpenShift 콘솔의 프로세스

  1. OpenShift Container Platform 웹 콘솔에 cluster-admin 권한이 있는 사용자로 로그인합니다. Red Hat OpenShift Dedicated를 사용하는 경우 dedicated-admin 역할의 계정이 있어야 합니다.
  2. 네트워킹경로로 이동합니다.
  3. 경로 페이지의 네임스페이스 메뉴에서 Service Mesh Control Plane 프로젝트(예: istio-system )를 선택합니다.

    Location (위치) 열에는 각 경로의 연결된 주소가 표시됩니다.

  4. 필요한 경우 필터를 사용하여 jaeger 경로를 찾습니다. 경로 Location (위치)을 클릭하여 콘솔을 시작합니다.
  5. OpenShift로 로그인을 클릭합니다.

Kiali 콘솔의 프로세스

  1. Kiali 콘솔을 시작합니다.
  2. 왼쪽 네비게이션 창에서 Distributed Tracing (분산 추적)을 클릭합니다.
  3. OpenShift로 로그인을 클릭합니다.

CLI의 프로세스

  1. cluster-admin 역할의 사용자로 OpenShift Container Platform CLI에 로그인합니다. Red Hat OpenShift Dedicated를 사용하는 경우 dedicated-admin 역할의 계정이 있어야 합니다.

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
  2. 명령줄을 사용하여 경로의 세부 정보를 쿼리하려면 다음 명령을 입력합니다. 이 예제에서 istio-system 은 Service Mesh Control Plane 네임스페이스입니다.

    $ export JAEGER_URL=$(oc get route -n istio-system jaeger -o jsonpath='{.spec.host}')
  3. 브라우저를 시작하고 https://<JAEGER_URL> 으로 이동합니다. 여기서 <JAEGER_URL> 은 이전 단계에서 검색한 경로입니다.
  4. OpenShift Container Platform 콘솔에 액세스하는 데 사용하는 것과 동일한 사용자 이름 및 암호를 사용하여 로그인합니다.
  5. 서비스 메시에 서비스를 추가하고 추적을 생성한 경우 필터와 추적 찾기 버튼을 사용하여 추적 데이터를 검색할 수 있습니다.

    콘솔 설치를 검증하는 경우 표시할 추적 데이터가 없습니다.

1.22.3.2. Service Mesh Control Plane 문제 해결

Service Mesh Control Plane을 배포하는 동안 문제가 발생하는 경우

  • ServiceMeshControlPlane 리소스가 서비스 및 Operator와 별도의 프로젝트에 설치되어 있는지 확인합니다. 이 문서에서는 istio-system 프로젝트를 예제로 사용하지만 Operator 및 서비스가 포함된 프로젝트와 별도로 있는 한 모든 프로젝트에 컨트롤 플레인을 배포할 수 있습니다.
  • ServiceMeshControlPlaneJaeger 사용자 정의 리소스가 동일한 프로젝트에 배포되었는지 확인합니다. 예를 들어 두 가지 모두에 istio-system 프로젝트를 사용합니다.

1.22.4. 데이터 플레인 문제 해결

데이터 플레인 은 서비스 메시의 서비스 간에 모든 인바운드 및 아웃바운드 네트워크 통신을 가로채고 제어하는 지능형 프록시 집합입니다.

Red Hat OpenShift Service Mesh는 애플리케이션의 Pod 내에서 프록시 사이드카를 사용하여 애플리케이션에 서비스 메시 기능을 제공합니다.

1.22.4.1. 사이드카 삽입 문제 해결

Red Hat OpenShift Service Mesh는 프록시 사이드카를 Pod에 자동으로 삽입하지 않습니다. 사이드카 삽입을 선택해야 합니다.

1.22.4.1.1. Istio 사이드카 삽입 문제 해결

애플리케이션의 Deployment(배포)에서 자동 삽입이 활성화되어 있는지 확인합니다. Envoy 프록시에 대한 자동 삽입이 활성화된 경우 spec.template .metadata.annotations의 Deployment 리소스에 sidecar.istio. io/inject:"true" 주석이 있어야 합니다.

1.22.4.1.2. Jaeger 에이전트 사이드카 삽입 문제 해결

애플리케이션의 Deployment(배포)에서 자동 삽입이 활성화되어 있는지 확인합니다. Jaeger 에이전트에 대한 자동 삽입이 활성화된 경우 Deployment 리소스에 sidecar.jaegertracing.io/inject:"true" 주석이 있어야 합니다.

사이드카 삽입에 대한 자세한 내용은 자동 삽입 활성화를 참조하십시오. https://access.redhat.com/documentation/en-us/openshift_container_platform/4.9/html-single/service_mesh/#ossm-automatic-sidecar-injection_deploying-applications-ossm