Google Kubernetes Engine (GKE) Autopilot 클러스터의 권한이 있는 워크로드는 문제를 방지하기 위해 올바르게 구성해야 합니다. 잘못된 구성으로 인해 허용 목록과의 동기화가 실패하거나 워크로드가 거부될 수 있습니다. 이러한 문제로 인해 필수 에이전트나 서비스가 필요한 권한으로 실행되지 않을 수 있습니다.
이 문서를 사용하여 Autopilot에 권한이 있는 워크로드를 배포하는 문제를 해결하세요. 허용 목록 동기화 오류를 해결하고 권한이 있는 워크로드가 거부되는 이유를 진단하는 방법을 알아보세요.
이 정보는 Autopilot 클러스터에 승격된 권한으로 워크로드를 배포하는 플랫폼 관리자, 운영자, 보안팀에 중요합니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할과 예시 태스크에 대한 자세한 내용은 일반 GKE 사용자 역할 및 태스크를 참고하세요.
허용 목록 동기화 문제
AllowlistSynchronizer를 배포하면 GKE는 지정한 허용 목록 파일을 설치하고 동기화하려고 시도합니다. 이 동기화가 실패하면 AllowlistSynchronizer의 status 필드에 오류가 보고됩니다.
AllowlistSynchronizer 객체의 상태를 가져옵니다.
kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml
출력은 다음과 비슷합니다.
...
status:
  conditions:
  - type: Ready
    status: "False"
    reason: "SyncError"
    message: "some allowlists failed to sync: example-allowlist-1.yaml"
    lastTransitionTime: "2024-10-12T10:00:00Z"
    observedGeneration: 2
  managedAllowlistStatus:
    - filePath: "gs://path/to/allowlist1.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/allowlist2.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"
conditions.message 필드와 managedAllowlistStatus.lastError 필드는 오류에 관한 자세한 정보를 제공합니다. 이 정보를 사용하여 문제를 해결하세요.
여러 AllowlistSynchronizer
1.33.4-gke.1035000 이전 버전의 GKE 클러스터에서는 AllowlistSynchronizer이 두 개 이상 있으면 WorkloadAllowlists가 설치되지 않을 수 있습니다.
이 문제를 해결하려면 여러 allowlistPaths이 포함된 단일 AllowlistSynchronizer만 사용하세요.
또는 클러스터를 최신 버전으로 업그레이드할 수 있습니다.
권한이 있는 워크로드 배포 문제
허용 목록을 성공적으로 설치한 후 클러스터에 해당 권한이 있는 워크로드를 배포합니다. 경우에 따라 GKE에서 워크로드를 거부할 수 있습니다.
다음 해결 방법을 시도해 보세요.
- 클러스터의 GKE 버전이 워크로드의 버전 요구사항을 충족하는지 확인합니다.
- 배포하는 워크로드가 허용 목록 파일이 적용되는 워크로드인지 확인합니다.
권한이 있는 워크로드가 거부된 이유를 확인하려면 허용 목록 위반에 관한 자세한 정보를 GKE에 요청하세요.
- 클러스터에 설치된 허용 목록의 목록을 가져옵니다. - kubectl get workloadallowlist- 권한이 있는 워크로드에 적용해야 하는 허용 목록의 이름을 찾습니다. 
- 텍스트 편집기에서 권한이 있는 워크로드의 YAML 매니페스트를 엽니다. 워크로드 배포 프로세스에서 다른 도구를 사용하는 등 YAML 매니페스트에 액세스할 수 없는 경우 워크로드 제공업체에 문의하여 문제를 신고하세요. 나머지 단계는 건너뛰세요. 
- 권한이 있는 워크로드 포드 사양의 - spec.metadata.labels섹션에 다음 라벨을 추가합니다.- labels: cloud.google.com/matching-allowlist: ALLOWLIST_NAME- ALLOWLIST_NAME을 이전 단계에서 가져온 허용 목록의 이름으로 바꿉니다. 허용 목록 파일의 경로가 아닌- kubectl get workloadallowlist명령어의 출력에서 이름을 사용합니다.
- 매니페스트를 저장하고 클러스터에 워크로드를 적용합니다. - kubectl apply -f WORKLOAD_MANIFEST_FILE- WORKLOAD_MANIFEST_FILE를 매니페스트 파일의 경로로 바꿉니다.- 출력에는 다음 예와 같이 워크로드의 어떤 필드가 지정된 허용 목록과 일치하지 않는지에 관한 자세한 정보가 제공됩니다. - Error from server (GKE Warden constraints violations): error when creating "STDIN": admission webhook "warden-validating.common-webhooks.networking.gke.io" denied the request: =========================================================================== Workload Mismatches Found for Allowlist (example-allowlist-1): =========================================================================== HostNetwork Mismatch: Workload=true, Allowlist=false HostPID Mismatch: Workload=true, Allowlist=false Volume[0]: data - data not found in allowlist. Verify volume with matching name exists in allowlist. Container[0]: - Envs Mismatch: - env[0]: 'ENV_VAR1' has no matching string or regex pattern in allowlist. - env[1]: 'ENV_VAR2' has no matching string or regex pattern in allowlist. - Image Mismatch: Workload=k8s.gcr.io/diff/image, Allowlist=k8s.gcr.io/pause2. Verify that image string or regex match. - SecurityContext: - Capabilities.Add Mismatch: the following added capabilities are not permitted by the allowlist: [SYS_ADMIN SYS_PTRACE] - VolumeMount[0]: data - data not found in allowlist. Verify volumeMount with matching name exists in allowlist.- 이 예에서는 다음과 같은 위반이 발생합니다. - 워크로드에서 hostNetwork: true를 지정하지만 허용 목록에서hostNetwork: true를 지정하지 않습니다.
- 워크로드에서 hostPID: true을 지정하지만 허용 목록에서hostPID: true을 지정하지 않습니다.
- 워크로드에서 data라는 볼륨을 지정하지만 허용 목록에서data라는 볼륨을 지정하지 않습니다.
- 컨테이너는 ENV_VAR1및ENV_VAR2라는 환경 변수를 지정하지만 허용 목록은 이러한 환경 변수를 지정하지 않습니다.
- 컨테이너는 이미지 k8s.gcr.io/diff/image를 지정하지만 허용 목록은k8s.gcr.io/pause2를 지정합니다.
- 컨테이너가 SYS_ADMIN및SYS_PTRACE기능을 추가하지만 허용 목록에서는 이러한 기능 추가를 허용하지 않습니다.
- 컨테이너는 data라는 볼륨 마운트를 지정하지만 허용 목록은data라는 볼륨 마운트를 지정하지 않습니다.
 
- 워크로드에서 
서드 파티 제공업체에서 제공하는 워크로드를 배포하는 경우 해당 제공업체에 문제를 신고하여 위반사항을 해결하세요. 문제에 이전 단계의 출력을 제공합니다.
권한이 있는 워크로드 및 허용 목록의 버그 및 기능 요청
파트너는 권한이 있는 워크로드와 허용 목록을 만들고 개발하고 유지보수해야 합니다. 버그가 발생하거나 권한이 있는 워크로드 또는 허용 목록에 대한 기능 요청이 있는 경우 해당 파트너에게 문의하세요.
다음 단계
- 문서에서 문제 해결 방법을 찾을 수 없으면 지원 받기를 참조하여 다음 주제에 대한 조언을 포함한 추가 도움을 요청하세요. - Cloud Customer Care에 문의하여 지원 케이스를 엽니다.
- StackOverflow에서 질문하고 google-kubernetes-engine태그를 사용하여 유사한 문제를 검색해 커뮤니티의 지원을 받습니다.#kubernetes-engineSlack 채널에 가입하여 더 많은 커뮤니티 지원을 받을 수도 있습니다.
- 공개 Issue Tracker를 사용하여 버그나 기능 요청을 엽니다.