관측 가능성 문제 해결

이 페이지에서는 Google Cloud 콘솔의 Anthos Service Mesh 페이지에서 문제를 해결하는 방법을 설명합니다.

서비스 목록에 특정 서비스가 누락됨

목록에서 서비스가 누락된 경우 클러스터에 Kubernetes 서비스 구성이 있는지 확인합니다.

모든 Kubernetes 서비스 목록을 가져오려면 다음 안내를 따르세요.

 kubectl get services --all-namespaces

특정 네임스페이스에서 Kubernetes 서비스 목록을 가져오려면 다음 안내를 따르세요.

kubectl get services -n YOUR_NAMESPACE

서비스에 대한 원격 분석 데이터가 누락되거나 잘못됨

기본적으로 Anthos Service Mesh를 설치할 때 Google Cloud 프로젝트에서 Cloud Monitoring 및 Cloud Logging이 사용 설정됩니다. 원격 분석 데이터를 보고하기 위해 서비스 pod에 삽입되는 각 사이드카 프록시가 Cloud Monitoring API 및 Cloud Logging API를 호출합니다. 워크로드를 배포한 후 Google Cloud Console에 원격 분석 데이터가 표시되는 데 1~2분 정도 걸립니다. Anthos Service Mesh는 서비스 대시보드를 자동으로 최신 상태로 유지합니다.

  • 측정항목의 경우 사이드카 프록시는 약 1분 간격으로 Cloud Monitoring API를 호출합니다.

  • 토폴로지 그래프를 업데이트하기 위해 사이드카 프록시는 약 1분 간격으로 증분 보고서를, 약 10분 간격으로 전체 보고서를 전송합니다.

  • 로깅의 경우 사이드카 프록시는 약 10초 간격으로 Cloud Logging API를 호출합니다.

  • 추적의 경우 Cloud Trace를 사용 설정해야 합니다. Trace는 구성한 샘플링 빈도(일반적으로 100개의 요청 중 1개)에 따라 보고됩니다.

측정항목은 Anthos Service Mesh 측정항목 페이지에 있는 HTTP 서비스에만 표시됩니다. 측정항목이 표시되지 않으면 다음 사항을 확인하세요.

사이드카 프록시가 삽입되었는지 확인

애플리케이션 서비스 네임스페이스의 모든 Pod에 사이드카 프록시가 삽입되었는지 확인합니다.

kubectl get pod -n YOUR_NAMESPACE --all

이전 명령어의 다음 예시 출력에서는 READY 열에 각 워크로드마다 컨테이너 두 개(기본 컨테이너와 사이드카 프록시 컨테이너)가 있음이 표시됩니다.

NAME                    READY   STATUS    RESTARTS   AGE
YOUR_WORKLOAD           2/2     Running   0          20s
...

2개의 컨테이너가 표시되지 않으면 네임스페이스에 자동 사이드카 주입이 사용 설정되었음을 나타내는 istio-injection=enabled 라벨이 있는지 확인합니다.

  kubectl get ns --show-labels

출력 예시:

NAME              STATUS   AGE   LABELS
default           Active   35m   istio-injection=enabled
istio-system      Active   34m   istio-injection=disabled,istio-operator-managed=Reconcile
  • istio-injection=enabled 라벨이 보이지 않으면 다음 명령어를 실행하여 자동 사이드카 삽입을 사용 설정합니다.

    kubectl label namespace YOUR_NAMESPACE istio-injection=enabled --overwrite
  • istio-injection=enabled 라벨이 있고 워크로드가 있는 기존 Google Kubernetes Engine 클러스터에 Anthos Service Mesh를 설치한 경우, 실행 중인 Pod를 다시 시작하여 현재 Anthos Service Mesh 버전으로 사이드카 프록시를 삽입하거나 업데이트해야 합니다. 자세한 내용은 기존 Pod의 사이드카 업데이트를 참조하세요.

Kubernetes 서비스 포트 이름 확인

Kubernetes 서비스 포트 이름을 확인하여 Anthos Service Mesh가 서비스를 HTTP 서비스로 인식하는지 확인합니다. Anthos Service Mesh에 포함하려면 서비스 포트 이름을 지정해야 하고 이름에 포트의 프로토콜이 포함되어야 합니다. 예를 들면 다음과 같습니다.

apiVersion: v1
kind: Service
metadata:
  name: ratings
  labels:
    app: ratings
    service: ratings
spec:
  ports:
  - port: 9080
    name: http

서비스 포트 이름에는 name: protocol[-suffix] 구문에 서픽스가 포함될 수 있습니다. 여기에서 대괄호는 대시로 시작해야 하는 선택적 서픽스를 나타냅니다. 예를 들면 다음과 같습니다.

kind: Service
metadata:
  name: myservice
spec:
  ports:
  - number: 3306
    name: mysql
  - number: 80
    name: http-web

측정항목을 Google Cloud 콘솔에 표시하려면 http, http2 또는 grpc 프로토콜 중 하나를 사용하여 서비스 포트의 이름을 지정해야 합니다. https 프로토콜으로 명명된 서비스 포트는 tcp로 처리되고, 이러한 서비스에 대한 측정항목이 표시되지 않습니다.

필수 API가 사용 설정되었는지 확인

Anthos Service Mesh는 원격 분석을 보고하고 표시하기 위한 몇 가지 API를 필요로 합니다. gcloud services list 명령어를 사용하여 프로젝트에 사용 설정된 API를 확인하거나 필요한 모든 API를 사용 설정하여 모두 가져올 수 있습니다.

  1. Google Cloud CLI의 기본 프로젝트를 설정합니다.

    gcloud config set project YOUR_PROJECT_ID
  2. 필요한 모든 API를 사용 설정합니다.

    gcloud services enable \
       container.googleapis.com \
       compute.googleapis.com \
       monitoring.googleapis.com \
       logging.googleapis.com \
       meshca.googleapis.com \
       meshtelemetry.googleapis.com \
       meshconfig.googleapis.com \
       iamcredentials.googleapis.com \
       anthos.googleapis.com \
       gkeconnect.googleapis.com \
       gkehub.googleapis.com \
       cloudresourcemanager.googleapis.com

ASM Mesh Data Plane 서비스 계정이 있는지 확인

  1. Google Cloud 콘솔에서 IAM 페이지를 엽니다.

    IAM 페이지 열기

  2. 프로젝트를 선택합니다.

  3. 구성원 목록에서 이름이 ASM Mesh Data Plane Service Account인 서비스 계정을 찾습니다.

  4. 서비스 계정이 없는 경우에는 서비스 계정을 만듭니다.

    curl --request POST \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --data '' \
      https://meshconfig.googleapis.com/v1alpha1/projects/YOUR_PROJECT_ID:initialize

워크로드가 실행 중인지 확인

  1. Google Cloud 콘솔에서 GKE 워크로드 페이지를 엽니다.

    GKE 워크로드를 엽니다.

  2. 프로젝트를 선택합니다.

  3. 클러스터에 필터를 추가합니다. 애플리케이션 및 Anthos Service Mesh의 모든 워크로드가 OK 상태로 실행되는지 확인합니다. 제한된 리소스(CPU, 메모리 등)로 인해 워크로드가 실패할 수 있으며 이 경우 클러스터를 더 많은 리소스로 업그레이드해야 합니다. 자세한 내용은 클러스터 크기 조정을 참조하세요.

애플리케이션이 요청을 처리하는지 확인

애플리케이션이 실제로 요청을 처리하는지 확인합니다. QPS가 낮을 수 있지만 트래픽이 수신되어야 합니다.

토폴로지 그래프가 비어 있음

토폴로지 그래프에 서비스가 표시되지 않고 No data available to graph. Check your filters and try again 오류 메시지가 표시되면 다음을 확인합니다.

메시 ID 확인

클러스터에 올바른 mesh_id 라벨이 있는지 확인합니다.

  1. 프로젝트를 만들 때 자동으로 생성되는 고유 번호인 프로젝트 번호를 가져옵니다.

  2. 클러스터에 mesh_id: proj-PROJECT_NUMBER 형식의 mesh_id 라벨이 있는지 확인합니다.

    mesh_id 라벨이 없거나 잘못된 경우 수정합니다. 자세한 내용은 기존 클러스터의 라벨 추가 또는 업데이트를 참조하세요.

  3. 다음 환경 변수를 설정합니다.

    • 클러스터 이름을 설정합니다.

      export CLUSTER_NAME=YOUR_CLUSTER_NAME
    • CLUSTER_LOCATION을 클러스터 영역 또는 클러스터 리전으로 설정합니다.

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION
  4. 이전에 사용한 것과 동일한 옵션으로 Anthos Service Mesh를 다시 배포합니다.

  5. Anthos Service Mesh를 설치하기 전에 클러스터에서 실행 중이었던 모든 워크로드는 현재 Anthos Service Mesh를 포함하도록 사이드카 프록시를 업데이트해야 합니다.

    kubectl rollout restart YOUR_DEPLOYMENT -n YOUR_NAMESPACE