이 페이지에서는 Google Kubernetes Engine (GKE) Autopilot 클러스터에 배포하는 권한이 있는 워크로드의 문제를 해결하는 방법을 보여줍니다.
허용 목록 동기화 문제
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
필드는 오류에 관한 자세한 정보를 제공합니다. 이 정보를 사용하여 문제를 해결하세요.
권한이 있는 워크로드 배포 문제
허용 목록을 설치한 후 클러스터에 상응하는 권한이 있는 워크로드를 배포합니다. 경우에 따라 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
라는 볼륨 마운트가 지정되어 있지 않습니다.
- 워크로드는
서드 파티 제공업체에서 제공하는 워크로드를 배포하는 경우 해당 제공업체에 문제를 제출하여 위반사항을 해결하세요. 문제의 이전 단계에서 나온 출력을 제공합니다.
권한이 있는 워크로드 및 허용 목록의 버그 및 기능 요청
파트너는 권한이 있는 워크로드와 허용 목록을 만들고 개발하고 유지보수할 책임이 있습니다. 버그가 발생하거나 권한이 있는 워크로드 또는 허용 목록에 관한 기능 요청이 있는 경우 해당 파트너에게 문의하세요.