구성 문제 해결

이 섹션에서는 일반적인 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 잘못된 구성으로 인해 하나 이상의 구성을 적용할 수 없습니다. Istio CR의 경우 잘못된 구성은 변환에서 완전히 삭제됩니다. 특정 오류는 오류의 원인이 된 구성에 기록됩니다. 이를 진단하는 방법에 관한 자세한 내용은 구성 검증 오류 섹션을 참고하세요.
CONFIG_VALIDATION_WARNING 하나 이상의 구성에서 잠재적인 문제가 발생했습니다. Istio CR의 경우 특정 잘못된 필드는 무시되지만 전체 구성은 처리됩니다. 의도하지 않은 동작이 발생할 수 있습니다. 이를 진단하는 방법에 관한 자세한 내용은 구성 검증 오류 섹션을 참고하세요.
MULTICLUSTER_SECRET_WARNING 클러스터는 엔드포인트 검색에 선언적 멀티 클러스터 API를 사용하는 대신 수동으로 생성한 Istio 멀티 클러스터 비밀을 사용합니다. 멀티 클러스터 엔드포인트 검색 설정을 선언적 구현으로 이동합니다. 자세한 내용은 멀티 클러스터 보안 비밀 페이지를 참조하세요.
WORKLOAD_IDENTITY_REQUIRED 클러스터 또는 하나 이상의 노드 풀에 대해 워크로드 아이덴티티가 사용 설정되어 있지 않습니다. 클러스터 및 노드 풀 수준에서 워크로드 아이덴티티를 사용 설정합니다. 자세한 내용은 워크로드 아이덴티티 사용 설정 페이지를 참조하세요.
MANAGED_CNI_NOT_ENABLED 이 클러스터에 대해 관리형 CNI가 사용 설정되어 있지 않습니다. 관리형 CNI를 사용 설정하여 메시 내에서 권장사항을 유지합니다. 자세한 내용은 관리형 CNI 사용 설정 페이지를 참조하세요.
NON_STANDARD_SIDECAR_BINARY_USAGE Istio 컨테이너 내에서 하나 이상의 명령어가 `envoy`, `pilot_agent` 또는 `iptables` 이외의 바이너리를 사용하고 있습니다. 지원되지 않는 바이너리에 대한 종속 항목을 삭제합니다. 자세한 내용은 지원되지 않는 바이너리 사용 페이지를 참조하세요.
UNSUPPORTED_GATEWAY_CLASS_USAGE 클러스터는 권장사항에 맞게 Istio Ingress Gateway로 마이그레이션해야 하는 게이트웨이 클래스 (Istio 및 Anthos Service Mesh)로 구성됩니다. 자세한 안내는 문서를 참조하세요.
UNSUPPORTED_MULTIPLE_CONTROL_PLANES 클러스터에 여러 컨트롤 플레인 채널이 프로비저닝되었습니다. Cloud Service Mesh는 클러스터당 하나의 채널만 지원합니다. 자세한 내용은 여러 제어 영역 수정을 참조하세요.
REQUIRED_ORG_POLICY_DISABLED 사용 중지된 조직 정책을 사용 설정해야 합니다. Cloud Service Mesh 기능을 사용하려면 프로젝트에 대해 이 정책을 사용 중지하세요. 자세한 내용은 필수 조직 정책 사용 설정을 참조하세요.
MISSING_CONTROL_PLANE_CONFIG 클러스터에 Cloud Service Mesh 구성이 없습니다. 제어 영역 구성 누락 문서의 안내에 따라 이 구성을 만드세요. 서비스 메시가 계속 작동하지만 업데이트가 필요합니다.

구성 검증 오류

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

구성 검증 동작

Cloud Service Mesh는 2단계 구성 검증 프로세스를 사용합니다.

  1. 동기 검증: 검증 웹훅이 초기 구문 검사를 수행합니다. 구성이 근본적으로 잘못된 경우 업데이트는 Kubernetes API 레이어에서 거부되고 kubectl apply가 즉시 실패합니다.
  2. 비동기 검증: 변환 중에 백그라운드에서 시맨틱 검증이 발생합니다. 이 단계에서 잘못된 구성이 감지되면 시스템은 나머지 유효한 구성을 계속 적용하면서 메시의 나머지 부분을 손상시키지 않도록 커스텀 리소스 (CR)를 비동기식으로 삭제합니다.

이 동작을 더 잘 이해하려면 구성 검증 이해 섹션을 검토하세요.

잘못된 구성 찾기

잘못된 커스텀 리소스는 비동기식으로 삭제되므로 상태를 적극적으로 확인해야 합니다. 많은 리소스별 오류 세부정보가 해당 리소스의 상태 필드에 다시 기록되고 Fleet 특성 상태에 표시됩니다.

다음 명령어를 사용하여 잘못된 구성을 찾고 특정 오류 메시지를 볼 수 있습니다. (참고: 이 오류들은 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"
    }
  ]
}