GKE Autopilot 파트너의 권한이 있는 워크로드 실행


이 페이지에서는 Google Kubernetes Engine (GKE) Autopilot 파트너의 권한이 있는 워크로드를 실행하는 방법을 보여줍니다. 클러스터에 허용 목록을 설치하고 허용 목록을 최신 상태로 유지하는 동기화 워크로드를 설정하는 방법을 알아봅니다.

이 페이지는 다음 유형의 역할을 대상으로 합니다.

  • 서드 파티 워크로드가 클러스터에서 실행되려면 허용 목록이 필요하고 GKE에서 승인한 소스에서 가져와야 한다고 확인하려는 보안 엔지니어
  • 클러스터에서 서드 파티 워크로드를 사용 설정하여 애플리케이션팀의 차단을 해제하려는 플랫폼 엔지니어

문서에서 참조하는 일반적인 역할 및 예시 작업에 대해 자세히 알아보려면 일반 GKE Enterprise 사용자 역할 및 작업을 참고하세요.

이 페이지를 읽기 전에 다음 사항을 숙지해야 합니다.

Autopilot의 권한이 있는 파트너 워크로드 정보

GKE를 사용하면 승인된 파트너의 하위 집합이 Autopilot 클러스터에서 권한이 있는 워크로드를 실행할 수 있습니다. 이러한 권한이 있는 워크로드는 Autopilot에서 적용하는 일부 보안 제약조건을 우회할 수 있습니다. 예를 들어 파트너는 특정 Linux 기능을 사용하거나 권한이 있는 컨테이너가 필요한 워크로드를 실행해야 할 수 있습니다.

파트너는 권한이 있는 워크로드의 허용 목록을 만들고 유지합니다. 각 허용 목록은 특정 권한이 있는 파트너 워크로드와 일치하는 파일입니다. 파트너는 이러한 허용 목록 파일을 승인을 위해 GKE에 제출합니다. 승인 후 GKE는 Google이 관리하는 저장소에 허용 목록 파일을 호스팅합니다.

파트너 워크로드를 실행하려면 클러스터에 해당하는 허용 목록 파일을 설치합니다. GKE는 허용 목록을 설치하고 최신 상태로 유지하는 AllowlistSynchronizer라는 Kubernetes 커스텀 리소스를 제공합니다. 허용 목록이 성공적으로 설치되면 해당하는 권한이 있는 파트너 워크로드를 배포할 수 있습니다.

권한이 있는 워크로드 및 허용 목록의 버그 및 기능 요청

파트너는 권한이 있는 워크로드와 허용 목록을 만들고 개발하고 유지보수할 책임이 있습니다. 버그가 발생하거나 권한이 있는 워크로드 또는 허용 목록에 관한 기능 요청이 있는 경우 해당 파트너에게 문의하세요.

AllowlistSynchronizer 컨트롤러 정보

AllowlistSynchronizer는 GKE 컨트롤 플레인에서 실행되는 컨트롤러입니다. 다른 Kubernetes 워크로드를 배포하는 것과 마찬가지로 새 AllowlistSynchronizer를 YAML 매니페스트로 배포합니다. 매니페스트에서 서드 파티 파트너로부터 가져온 설치하려는 허용 목록 파일의 경로를 지정합니다. 동기화 도구는 Google 관리 저장소에서 파트너의 허용 목록 파일을 찾아 클러스터에 허용 목록을 설치합니다.

동기화 도구는 10분마다 허용 목록 파일의 업데이트를 확인합니다. 업데이트가 있는 경우 동기화 도구가 클러스터에 업데이트된 허용 목록을 설치합니다.

특정 워크로드의 허용을 중지하려면 기존 AllowlistSynchronizers를 업데이트하여 해당 허용 목록 파일 경로를 삭제한 후 클러스터에서 WorkloadAllowlist 객체를 삭제합니다. 허용 목록 동기화 도구에서 경로를 삭제하지 않고 설치된 WorkloadAllowlist 객체를 삭제하면 동기화 도구가 허용 목록을 다시 설치합니다. 파트너는 Google에서 관리하는 저장소에서 허용 목록 파일을 삭제할 수 없습니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

요구사항

  • AllowlistSynchronizer 맞춤 리소스를 사용하려면 GKE 버전 1.32.1-gke.1729000 이상이 필요합니다.
  • 클러스터에서 실행할 파트너 워크로드를 알아야 합니다. 권한이 있는 워크로드를 설치하는 방법은 파트너 문서를 참고하세요.

AllowlistSynchronizer를 만듭니다.

파트너의 권한이 있는 워크로드를 실행하려면 상응하는 허용 목록 파일의 경로를 AllowlistSynchronizer 맞춤 리소스에 추가합니다. 그런 다음 클러스터에 AllowlistSynchronizer를 배포합니다.

  1. 텍스트 편집기에서 새 YAML 파일을 만듭니다.
  2. YAML 파일에 다음 콘텐츠를 추가합니다.

    apiVersion: auto.gke.io/v1
    kind: AllowlistSynchronizer
    metadata:
      name: ALLOWLIST_SYNCHRONIZER_NAME
    spec:
      allowlistPaths:
      - ALLOWLIST1_PATH
      - ALLOWLIST2_PATH
    

    다음을 바꿉니다.

    • ALLOWLIST_SYNCHRONIZER_NAME: 새 동기화 도구의 이름입니다. 허용 목록에서 지원하는 워크로드 또는 팀을 식별하는 설명이 포함된 이름을 선택합니다.
    • ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: 설치할 파트너 허용 목록 파일의 경로 1개 이상입니다. 이 경로에 대해 선택한 파트너의 워크로드 문서를 확인하세요. 전체 디렉터리 또는 개별 파일을 지정할 수 있습니다.
  3. YAML 파일을 클러스터에 배포합니다.

    kubectl apply -f PATH_TO_YAML_FILE
    

    PATH_TO_YAML_FILE을 이전 단계에서 만든 YAML 파일의 경로로 바꿉니다.

    AllowlistSynchronizer 컨트롤러는 지정된 경로의 허용 목록 파일을 클러스터에 설치합니다.

  4. 동기화 도구가 Ready 상태를 보고할 때까지 기다립니다.

    kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \
      --timeout=60s
    

파트너 워크로드 배포를 지속적 통합 및 지속적 배포 (CI/CD) 파이프라인에 통합할 수도 있습니다. 허용 목록이 성공적으로 설치될 때까지 기다린 후 상응하는 워크로드를 배포하도록 워크플로를 구성합니다.

기존 AllowlistSynchronizer 업데이트

기존 AllowlistSynchronizer를 업데이트하여 허용 목록 파일을 추가하거나 삭제할 수 있습니다. 다음과 같은 상황에서 기존 동기화 도구를 업데이트할 수 있습니다.

  • 파트너가 이름이 다른 새 허용 목록 파일을 추가합니다.
  • 관련 허용 목록을 그룹화하는 기존 동기화 도구에 새 워크로드 허용 목록을 추가하려고 합니다.
  • 더 이상 해당 워크로드를 사용하지 않으려 하기 때문에 동기화 도구에서 허용 목록을 삭제하려고 합니다.

기존 AllowlistSynchronizer 객체를 업데이트하려면 다음을 실행합니다.

  1. 클러스터의 기존 동기화 도구를 나열합니다.

    kubectl get allowlistsynchronizer
    
  2. 텍스트 편집기에서 업데이트하려는 동기화기의 사양을 엽니다.

  3. 허용 목록 파일 경로를 추가, 수정 또는 삭제하도록 spec.allowlistPaths 필드를 업데이트합니다.

  4. 텍스트 편집기를 저장하고 닫습니다.

  5. 클러스터에 업데이트된 구성을 적용합니다.

    kubectl apply -f PATH_TO_YAML_FILE
    

    PATH_TO_YAML_FILE를 이전 단계에서 업데이트한 YAML 파일의 경로로 바꿉니다.

업데이트된 동기화기 구성을 배포하면 AllowlistSynchronizer 객체의 상태에 있는 managedAllowlistStatus.generation 필드가 1씩 증가합니다. 그러면 AllowlistSynchronizer 컨트롤러가 변경사항을 적용합니다.

허용 목록 동기화 상태 모니터링

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"

이러한 필드에 대한 설명은 AllowlistSynchronizer 상태를 참고하세요.

클러스터에 허용 목록이 있는지 확인

클러스터에 허용 목록이 있는지 확인하려면 다음 명령어를 실행합니다.

kubectl get workloadallowlist

출력은 클러스터에 설치된 허용 목록의 목록입니다. 출력에 사용하려는 허용 목록이 포함되어 있는지 확인합니다.

권한이 있는 워크로드 배포

허용 목록이 설치되면 클러스터에 해당 워크로드를 배포할 수 있습니다. 워크로드를 제공하는 파트너는 워크로드의 설치 안내도 제공해야 합니다. Autopilot 파트너 목록과 문서 링크는 Autopilot 파트너를 참고하세요.

권한이 있는 워크로드 삭제

클러스터에서 권한이 있는 워크로드가 실행되도록 허용하지 않으려면 AllowlistSynchronizer에서 해당 허용 목록의 경로를 삭제합니다. 동기화 도구가 허용 목록을 제거합니다.

동기화 도구를 업데이트하는 대신 클러스터에서 WorkloadAllowlist 객체를 삭제하면 동기화 도구가 허용 목록을 다시 설치합니다. AllowlistSynchronizer에서 경로를 삭제해야 합니다.

허용 목록을 제거하려면 다음 단계를 따르세요.

  1. 허용 목록을 관리하는 AllowlistSynchronizer의 YAML 매니페스트에서 제거하려는 허용 목록의 경로를 삭제합니다. 자세한 내용은 기존 AllowlistSynchronizer 섹션 업데이트를 참고하세요.
  2. 허용 목록이 제거되었는지 확인하려면 클러스터의 WorkloadAllowlist 객체 목록을 가져옵니다.

    kubectl get workloadallowlist
    

    출력에서 삭제하려는 허용 목록이 표시되지 않는지 확인합니다.

  3. 클러스터에서 워크로드를 삭제합니다. 자세한 내용은 워크로드 제공업체의 문서를 참고하세요.

클러스터에서 허용 목록 설치 방지

특정 클러스터에 권한이 있는 워크로드 허용 목록이 설치되지 않도록 하려면 ValidatingAdmissionPolicy를 사용하세요. 허용 정책을 검증하면 Kubernetes 리소스가 클러스터에서 실행되기 전에 특정 기준을 충족하는지 확인할 수 있습니다. 예를 들어 라벨에 특정 값이 있는지 검사할 수 있습니다.

클러스터에 허용 목록을 설치하지 않으려면 다음 단계를 따르세요.

  1. 다음 ValidatingAdmissionPolicy 매니페스트를 disallow-allowlists.yaml로 저장합니다.

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicy
    metadata:
      name: "disallow-allowlists"
    spec:
      failurePolicy: Fail
      matchConstraints:
        resourceRules:
        - apiGroups:   ["auto.gke.io"]
          apiVersions: ["*"]
          operations:  ["*"]
          resources:   ["allowlistsynchronizers"]
      validations:
      - expression: "false"
        message: 'AllowlistSynchronizer creation is not allowed'
    
  2. 다음 ValidatingAdmissionPolicyBinding 매니페스트를 disallow-allowlists-binding.yaml로 저장합니다.

    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingAdmissionPolicyBinding
    metadata:
      name: "disallow-allowlists-binding"
    spec:
      policyName: "disallow-allowlists"
      validationActions: [Deny]
    
  3. 클러스터에 ValidatingAdmissionPolicy를 배포합니다.

    kubectl apply -f disallow-allowlists.yaml
    kubectl apply -f disallow-allowlists-binding.yaml
    

이 정책은 클러스터에서 새 AllowlistSynchronizers가 생성되지 않도록 합니다.

문제 해결

동기화 또는 워크로드 배포에 실패하면 권한이 있는 Autopilot 워크로드 배포 문제 해결을 참고하세요.

다음 단계