버전 1.9

Anthos Service Mesh에서 VM 지원 문제 해결

다음 단계와 로그는 Anthos Service Mesh VM 지원과 관련된 문제를 해결하는 데 유용합니다.

VM 디버그

VM 인스턴스가 실행 중이지만 메시에서 연결할 수 없는 경우 VM 인스턴스에서 다음 단계를 수행합니다.

에이전트 확인

  1. Envoy 프록시 상태를 확인합니다.

    curl localhost:15000/ready -v
    
  2. envoy 오류 로그를 확인합니다.

    less /var/log/envoy/envoy.err.log
    
  3. service-proxy-agent 오류가 있는지 확인합니다.

    journalctl -u service-proxy-agent
    
  4. 인스턴스의 Google Cloud 운영 제품군 로그 또는 /var/log/syslog 아래의 VM에서 syslog를 확인합니다.

프록시 상태 확인

  1. 프록시 구성을 디버깅하려면 VM에서 다음 명령어를 실행합니다.

    curl localhost:15000/config_dump > config.out
    
  2. 파일을 복사하고 다음 명령어를 실행합니다.

    istioctl proxy-config [cluster|route|listener] --file config.out
    

잘못된 토큰 오류

Envoy 오류 로그에 다음과 유사한 오류가 표시될 수 있습니다.

E0217 17:59:17.206995798    2411 oauth2_credentials.cc:152]  Call to http server ended with error 500 [{
  "error": "invalid_target",
  "error_description": "federated token response does not have access token. {\"error\":\"invalid_grant\",\"error_description\":\"JWT expired.\"}",
  "error_uri": ""
}].

이 경우 VM에서 /var/run/secrets/tokens/istio-token의 토큰이 만료되었는지 확인하고 exp(에포크 초) 값이 경과되지 않았는지 확인합니다.

cat /var/run/secrets/tokens/istio-token | cut -d '.' -f2 | base64 -d | python -m json.tool
{
    ...
    "azp": "...",
    "email": "example-service-account@developer.gserviceaccount.com",
    "email_verified": true,
    "exp": 1613995395,
    "google": {
        "compute_engine": {
            "instance_creation_timestamp": 1613775765,
            "instance_id": "5678",
            "instance_name": "vm-instance-03-0mqh",
            "project_id": "...",
            "project_number": 1234,
            "zone": "us-central1-c"
        }
    },
    "iat": ...,
    "iss": "https://accounts.google.com",
    "sub": "..."
}

클러스터 디버그

다음 단계에 따라 클러스터 관련 문제를 해결할 수 있습니다.

자동 등록이 작동하는지 확인

  1. istiod에서 자동 생성된 WorkloadEntry를 확인합니다.

    kubectl get workloadentry -n WORKLOAD_NAMESPACE
    

    Kubernetes 객체 브라우저가 존재하는지도 확인할 수 있습니다.

  2. 존재하지 않으면 Google Cloud 운영 제품군에서 사용할 수 있는 istiod 로그에서 오류를 확인합니다. 또는 직접 검색할 수 있습니다.

    kubectl -n istio-system get pods -l app=istiod
    

    예상 출력은 다음과 비슷합니다.

    NAME                                       READY   STATUS    RESTARTS   AGE
    istiod-asm-190-1-7f6699cfb-5mzxw           1/1     Running   0          5d13h
    istiod-asm-190-1-7f6699cfb-pgvpf           1/1     Running   0          5d13h
    
  3. Pod 환경 변수를 설정하고 이를 사용하여 로그를 내보냅니다.

    export ISTIO_POD=istiod-asm-190-1-7f6699cfb-5mzxw
    kubectl logs -n istio-system {ISTIO_POD} | grep -i 'auto-register\|WorkloadEntry
    

연결된 프록시 확인

proxy-status 명령어를 사용하여 VM의 프록시를 포함해 연결된 모든 프록시를 나열할 수 있습니다.

istioctl proxy-status

출력에 다음과 유사한 연결된 프록시가 표시됩니다.

NAME                                                    CDS        LDS        EDS        RDS          ISTIOD                               VERSION
details-v1-5f449bdbb9-bhl8d.default                     SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-5mzxw     1.9.0-asm.1
httpbin-779c54bf49-647vd.default                        SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0-asm.1
istio-eastwestgateway-5b6d4ddd9d-5rzx2.istio-system     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0-asm.1
istio-ingressgateway-66b6ddd7cb-ctb6b.istio-system      SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0-asm.1
istio-ingressgateway-66b6ddd7cb-vk4bb.istio-system      SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-5mzxw     1.9.0-asm.1
vm-instance-03-39b3.496270428946                        SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0
vm-instance-03-nh5k.496270428946                        SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0
vm-instance-03-s4nl.496270428946                        SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-5mzxw     1.9.0

명령어 옵션에 대한 자세한 내용은 istioctl proxy-config를 참조하세요.

Istio VM 문제 해결 가이드

추가 문제 해결 단계는 가상 머신 디버깅을 참조하세요.