구성 문제 해결

이 섹션에서는 일반적인 Cloud Service Mesh 문제와 해결 방법을 설명합니다. 추가 지원이 필요하면 지원 받기를 참조하세요.

MembershipState 확인

언제든지 다음 명령어를 실행하여 메시의 최근 상태를 확인할 수 있습니다.

gcloud container fleet mesh describe

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

...
membershipSpecs:
  projects/project_id/locations/global/memberships/cluster:
    mesh:
      management: MANAGEMENT_AUTOMATIC
membershipStates:
  projects/project_id/locations/global/memberships/cluster:
    servicemesh:
      ...
      conditions:
        - code: CONFIG_VALIDATION_WARNING
          documentationLink: https://cloud.google.com/...
          details: Application of one or more configs has failed. Error details are shown on individual config resources. See documentation link for more detail.
          severity: WARNING
...

MembershipState 오류 코드

Cloud Service Mesh가 클러스터의 MembershipState에 조건을 보고한다면 메시 구성(예: Istio 커스텀 리소스)을 적용하지 못했다는 의미일 수 있습니다. 다음 오류 코드 설명은 오류 해결 방법에 대한 자세한 정보를 제공합니다.

오류 코드 원인 해결 방법
CONFIG_APPLY_INTERNAL_ERROR 내부 오류로 인해 하나 이상의 구성을 적용할 수 없습니다. 고객지원팀에 문의하세요.
QUOTA_EXCEEDED_* 리소스가 할당량 한도에 도달하여 하나 이상의 구성을 적용할 수 없습니다. 구체적인 할당량과 할당량 상향 조정 방법에 대한 자세한 내용은 할당량을 참조하세요.
CONFIG_VALIDATION_ERROR 잘못된 구성으로 인해 하나 이상의 구성을 적용할 수 없습니다. 특정 오류는 오류를 일으킨 구성에 기록됩니다. 이를 진단하는 방법에 관한 자세한 내용은 구성 검증 오류 섹션을 참고하세요.
CONFIG_VALIDATION_WARNING 하나 이상의 구성에서 잠재적인 문제가 발생했습니다. 이러한 변경사항이 적용되지 않았을 수도 있으며, 적용되었더라도 의도치 않은 동작이 발생할 수 있습니다. 이를 진단하는 방법에 관한 자세한 내용은 구성 검증 오류 섹션을 참고하세요.

구성 검증 오류

CONFIG_VALIDATION_WARNING CONFIG_VALIDATION_ERROR 코드는 메시 구성(Istio 또는 Kubernetes 커스텀 리소스)에서 문제가 발견되었고 구성의 하위 집합이 올바르게 적용되지 않았을 수 있음을 나타냅니다.

많은 리소스별 오류 세부정보가 해당 리소스에 기록됩니다. 다음 명령어를 사용하여 잘못된 구성을 찾고 특정 오류 메시지를 볼 수 있습니다. (참고: 이 오류들은 Istio 리소스에 대한 것으로, 여기에 모든 검증 오류가 표시되지는 않을 수 있습니다.)

for resource in serviceentries destinationrules virtualservices gateways peerauthentications authorizationpolicies requestauthentications sidecars telemetries envoyfilters;
  do kubectl get $resource --all-namespaces --output=json | \
   jq  '.items[] | select(.status.conditions != null and any(.status.conditions[]; .type == "Accepted" and .status == "False")) | {"name": .metadata.name, "namespace": .metadata.namespace, "kind": .kind, "conditions": .status.conditions}';
done

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

{
  "name": "demo-envoy-filter",
  "namespace": "default",
  "kind": "EnvoyFilter",
  "conditions": [
    {
      "lastTransitionTime": "2024-04-04T21:10:18.046975988Z",
      "message": "This API is not supported",
      "reason": "Invalid",
      "status": "False",
      "type": "Accepted"
    }
  ]
}