Anthos Service Mesh에서 VM 지원 문제 해결
다음 단계와 로그는 Anthos Service Mesh VM 지원과 관련된 문제를 해결하는 데 유용합니다.
VM 디버그
VM 인스턴스가 실행 중이지만 메시에서 연결할 수 없는 경우 VM 인스턴스에서 다음 단계를 수행합니다.
에이전트 확인
Envoy 프록시 상태를 확인합니다.
curl localhost:15000/ready -v
envoy 오류 로그를 확인합니다.
less /var/log/envoy/envoy.err.log
service-proxy-agent
오류가 있는지 확인합니다.journalctl -u service-proxy-agent
인스턴스의 Google Cloud 운영 제품군 로그에서 또는 Debian의 경우
/var/log/syslog
, Centos의 경우/var/log/messages
아래 VM에서syslog
를 확인하거나.
프록시 상태 확인
프록시 구성을 디버깅하려면 VM에서 다음 명령어를 실행합니다.
curl localhost:15000/config_dump > config.out
파일을 복사하고 다음 명령어를 실행합니다.
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": "..."
}
지원되지 않는 OS 배포 경고 정보
에이전트를 확인에서 service-proxy-agent 로그에 아래와 유사한 경고 메시지가 표시되는 경우
E0217 17:59:17.206995798 2021-04-09T21:21:29.6091Z service-proxy-agent Warn
Detected image is unsupported: [Ubuntu|Fedora|Suse]. Envoy may not work correctly.
이는 Linux 배포가 지원되지 않아 프록시가 예기치 않게 동작할 수 있음을 의미합니다.
클러스터 디버그
다음 단계에 따라 클러스터 관련 문제를 해결할 수 있습니다.
자동 등록이 작동하는지 확인
istiod
에서 자동 생성된WorkloadEntry
를 확인합니다.kubectl get workloadentry -n WORKLOAD_NAMESPACE
Kubernetes 객체 브라우저가 존재하는지도 확인할 수 있습니다.
존재하지 않으면 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
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를 참조하세요.
워크로드 아이덴티티 구성 확인
클러스터에서 잠재적인 오류가 있는지 mesh
상태를 확인합니다. 최신 gcloud 버전이 필요합니다. 자세한 내용은 최신 버전으로 업데이트를 참조하세요.
gcloud alpha container hub mesh describe --project=PROJECT_ID
유효한 구성에서는 구성원 클러스터의 상태 코드가 OK
입니다.
createTime: '2021-06-15T21:56:10.221032150Z'
featureState:
detailsByMembership:
projects/<your project number>/locations/global/memberships/<your cluster name>:
code: OK
description: Revision(s) ready for use: istiod-asm-195-2.
updateTime: 2021-06-15T21:56:10.221032402Z
lifecycleState: ENABLED
name: projects/<your project name>/locations/global/features/servicemesh
servicemeshFeatureSpec: {}
updateTime: '2021-06-15T21:56:10.221032402Z'
VM이 잘못 구성된 경우 상태 코드가 WARNING
이고 설명(description)에 추가 세부정보가 나와 있습니다.
createTime: '2021-06-15T22:56:10.227167202Z'
featureState:
detailsByMembership:
projects/<your project number>/locations/global/memberships/<your cluster name>:
code: WARNING
description: |-
Revision(s) ready for use: istiod-asm-195-2.
WorkloadGroup <namespace>/<workloadgroup name> missing ServiceAccount field, please see https://cloud.google.com/service-mesh/docs/troubleshooting/troubleshoot-vms#verify_the_workloadgroup_is_set_up_correctly.
servicemeshFeatureState: {}
updateTime: '2021-06-15T22:56:00.220164192Z'
lifecycleState: ENABLED
name: projects/<your project name>/locations/global/features/servicemesh
servicemeshFeatureSpec: {}
updateTime: '2021-06-15T22:56:10.227167402Z'
ID 공급업체가 올바르게 설정되었는지 확인
IdentityProvider
리소스 필드를 확인합니다.
kubectl describe identityprovider
필드가 다음 요구사항을 충족하는지 확인합니다.
serviceAccount
필드가request.auth.claims["email"]
로 설정될 것issuerURI
필드가https://accounts.google.com
으로 설정될 것(현재 발급기관 URI로는 Google만 지원됨)메타데이터 아래의 제공업체
name
필드는 현재 지원되는 유일한 제공업체인google
로 설정해야 합니다.유효한
IdentityProvider
CR 예:apiVersion: security.cloud.google.com/v1alpha1 kind: IdentityProvider metadata: name: google spec: authentication: oidc: issuerUri: https://accounts.google.com serviceAccount: request.auth.claims["email"]
WorkloadGroup
이 올바르게 설정되었는지 확인
WorkloadGroup
을 확인합니다.
kubectl get workloadgroup -n WORKLOAD_NAMESPACE
결과가 다음 요구사항을 충족하는지 확인합니다.
serviceAccount
필드가 올바르게 설정될 것. 예를 들어373206437219-compute@developer.gserviceaccount.com
에서 계정은 VM 인스턴스에서 사용되는 서비스 계정과 동일한 계정입니다.- 주석 필드 아래에
security.cloud.google.com/IdentityProvider
가 설정될 것. 예:security.cloud.google.com/IdentityProvider: google
워크로드 그룹은 유효한
IdentityProvider
를 참조하며 이는 기존 ID 공급업체를 검토하여 확인할 수 있습니다.kubectl describe identityprovider
출력은 다음과 같이 기존 제공업체 목록이어야 합니다.
NAME AGE google 39m
WorkloadGroup
의security.cloud.google.com/IdentityProvider
필드에서 제공업체가 기존 제공업체 목록에 있는지 확인합니다.유효한
WorkloadGroup
CR 예:apiVersion: networking.istio.io/v1alpha3 kind: WorkloadGroup metadata: name: wg-a namespace: foo spec: metadata: annotations: security.cloud.google.com/IdentityProvider: google labels: app: wg-a template: ports: grpc: 3550 http: 8080 serviceAccount: 373206437219-compute@developer.gserviceaccount.com
내부 오류 발견됨
Internal Error Found
메시지가 표시되는 경우 지원 받기를 참조하세요.
Istio VM 문제 해결 가이드
추가 문제 해결 단계는 가상 머신 디버깅을 참조하세요.