정책 컨트롤러 설치

이 페이지에서는 정책 컨트롤러를 설치하는 방법을 보여줍니다. 정책 컨트롤러는 보안, 규정, 비즈니스 규칙과 관련된 정책에 따라 클러스터를 확인 및 감사하고 규정 준수를 시행합니다.

정책 컨트롤러는 Google Kubernetes Engine(GKE) Enterprise 버전을 사용하는 경우 사용할 수 있습니다. 자세한 내용은 Google Kubernetes Engine(GKE) Enterprise 버전 가격 책정을 참조하세요. 무료로 설치하기 전에 정책 컨트롤러를 사용해 보도록 보고서를 만들 수 있습니다.

시작하기 전에

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

  1. 이 안내에서 사용되는 gcloud, gsutil, kubectlnomos 명령어를 제공하는 Google Cloud CLI를 설치하고 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다. Cloud Shell을 사용하는 경우 Google Cloud CLI가 사전 설치됩니다.
  2. 오픈소스 오픈 정책 에이전트 게이트키퍼가 클러스터에 설치되어 있지 않은지 확인합니다. 그렇다면 정책 컨트롤러를 설치하기 전에 Gatekeeper를 제거합니다.
  3. GKE Enterprise API를 사용 설정합니다.

    GKE Enterprise API 사용 설정

  4. Kubernetes 버전 1.14.x 이상을 실행하는 클러스터를 만들거나 액세스할 수 있는지 확인합니다. 정책 컨트롤러가 1.14.x 이전 버전의 Kubernetes에서 실행되는 것처럼 보일 수 있지만 제품이 올바르게 작동하지 않습니다.

  5. 클러스터를 등록하는 사용자에게 필요한 IAM 역할을 부여합니다.

  6. Google Cloud CLI를 사용하여 정책 컨트롤러를 구성하려면 지금 Fleet클러스터를 등록합니다. Google Cloud 콘솔을 사용하려는 경우 정책 컨트롤러를 설치할 때 클러스터를 등록합니다.

  7. GKE 연결 클러스터를 사용하는 경우 AKS 클러스터에 Azure 정책 부가기능이 없는지 확인하고 control-plane 키로 네임스페이스에 라벨 지정을 하지 않습니다.

  8. GKE on VMware 또는 베어메탈용 Google Distributed Cloud Virtual를 사용하는 경우 사용자 클러스터에 정책 컨트롤러를 설치해야 합니다. 관리자 클러스터에는 정책 컨트롤러를 설치할 수 없습니다.

정책 컨트롤러 설치

버전 1.16.0부터 Google Cloud CLI를 사용하는 경우 ConfigManagement 객체를 통해 직접(권장) 정책 컨트롤러를 설치하고 관리할 수 있습니다.

콘솔

Google Cloud 콘솔에서 정책 컨트롤러를 설치하려면 다음 단계를 완료하세요.

  1. Google Cloud 콘솔에서 상태 관리 섹션에서 GKE Enterprise 정책 페이지로 이동합니다.

    정책으로 이동

  2. 정책 컨트롤러 설치를 선택합니다.

  3. 정책 컨트롤러 설치 창에서 다음 설치 옵션 중 하나를 선택합니다.

    • Fleet의 모든 클러스터에 정책 컨트롤러를 설치하려면 다음 안내를 따르세요.

      1. Fleet에 설치를 선택한 상태로 둡니다.

        프로젝트에 Fleet이 없으면 다음 단계에서 Fleet을 만들 수 있습니다.

      2. 아직 Fleet이 없으면 Fleet 이름을 선택합니다.

      3. 정책 컨트롤러 활성화를 선택합니다.

    • 개별 클러스터에 정책 컨트롤러 설치하기

      1. 개별 클러스터에 설치를 선택합니다.

      2. 사용 가능한 클러스터 테이블에서 정책 컨트롤러를 설치할 클러스터를 선택합니다.

      3. 정책 컨트롤러 활성화를 선택합니다.

정책 컨트롤러 설정 탭으로 리디렉션됩니다. 클러스터에 정책 컨트롤러가 설치되고 구성되면 상태 열에 설치됨 이 표시됩니다. 몇 분 정도 걸릴 수 있습니다.

gcloud 정책 컨트롤러

다음 명령어를 실행하여 정책 컨트롤러를 사용 설정합니다.

gcloud container fleet policycontroller enable \
    --memberships=MEMBERSHIP_NAME

추가 필드를 설정하여 정책 컨트롤러를 구성할 수 있습니다. 예를 들어 정책 컨트롤러가 일부 네임스페이스를 시행에서 제외하도록 할 수 있습니다. 구성할 수 있는 필드의 전체 목록은 정책 컨트롤러 Google Cloud CLI 문서를 참조하거나 gcloud container fleet policycontroller enable --help를 실행하세요.

gcloud ConfigManagement

  1. apply-spec.yaml 매니페스트를 만들거나 기존 매니페스트를 추가하여 구성을 준비합니다. 기존 매니페스트를 사용하면 다른 클러스터에 사용되는 것과 동일한 설정으로 클러스터를 구성할 수 있습니다.

    새 매니페스트 만들기

    클러스터에 대해 정책 컨트롤러를 새 설정으로 구성하려면 apply-spec.yaml이라는 파일을 만들고 이 파일에 다음 YAML 파일을 복사합니다.

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      policyController:
        # Set to true to install and enable Policy Controller
        enabled: true
        # Uncomment to prevent the template library from being installed
        # templateLibraryInstalled: false
        # Uncomment to enable support for referential constraints
        # referentialRulesEnabled: true
        # Uncomment to disable audit, adjust value to set audit interval
        # auditIntervalSeconds: 0
        # Uncomment to log all denies and dryrun failures
        # logDeniesEnabled: true
        # Uncomment to enable mutation
        # mutationEnabled: true
        # Uncomment to exempt namespaces
        # exemptableNamespaces: ["namespace-name"]
        # Uncomment to change the monitoring backends
        # monitoring:
        #     backends:
        #     - cloudmonitoring
        #     - prometheus
      # ...other fields...
    

    spec.policyController 필드를 추가하고 enabled의 값을 true로 설정해야 합니다. 다른 정책 컨트롤러 기능을 사용 설정하도록 선택할 수 있습니다. 하지만 참조 제약조건에 대한 지원은 기본적으로 사용 중지됩니다. 사용하기 전에 eventual consistency에 대한 주의사항을 숙지해야 합니다.

    기존 매니페스트 사용

    다른 클러스터에서 사용하는 것과 동일한 설정으로 클러스터를 구성하려면 등록된 클러스터에서 설정을 가져옵니다.

    gcloud alpha container fleet config-management fetch-for-apply \
         --membership=MEMBERSHIP_NAME \
         --project=PROJECT_ID \
         > CONFIG_YAML_PATH
    

    다음을 바꿉니다.

    • MEMBERSHIP_NAME: 사용할 정책 컨트롤러 설정이 있는 등록된 클러스터의 멤버십 이름
    • PROJECT_ID: 프로젝트 ID입니다.
    • CONFIG_YAML_PATH: apply-spec.yaml 파일의 경로입니다.
  2. apply-spec.yaml 파일을 적용합니다.

    gcloud beta container fleet config-management apply \
        --membership=MEMBERSHIP_NAME \
        --config=CONFIG_YAML \
        --project=PROJECT_ID
    

    다음을 바꿉니다.

    • MEMBERSHIP_NAME: 사용할 정책 컨트롤러 설정이 있는 등록된 클러스터의 멤버십 이름입니다.
    • CONFIG_YAML: apply-spec.yaml 파일의 경로를 추가합니다.
    • PROJECT_ID: 프로젝트 ID를 추가합니다.

포드가 생성되고 정책 컨트롤러가 제약조건을 확인하고 적용하기 시작합니다.

정책 컨트롤러 설치 확인

정책 컨트롤러를 설치하면 성공적으로 완료되었는지 확인할 수 있습니다.

콘솔

다음 단계를 완료합니다.

  1. Google Cloud 콘솔에서 상태 관리 섹션에서 GKE Enterprise 정책 페이지로 이동합니다.

    정책으로 이동

  2. 설정 탭의 클러스터 테이블에서 정책 컨트롤러 상태 열을 확인합니다. 설치가 완료되면 설치됨 상태가 표시됩니다.

gcloud 정책 컨트롤러

다음 명령어를 실행합니다.

gcloud container fleet policycontroller describe --memberships=MEMBERSHIP_NAME

설치에 성공하면 membershipStates: MEMBERSHIP_NAME: policycontroller: state: ACTIVE가 표시됩니다.

gcloud ConfigManagement

다음 명령어를 실행합니다.

gcloud beta container fleet config-management status \
    --project=PROJECT_ID

PROJECT_ID를 프로젝트 ID로 바꿉니다.

다음과 비슷한 출력이 표시됩니다.

Name          Status  Last_Synced_Token  Sync_Branch  Last_Synced_Time      Policy_Controller
CLUSTER_NAME  SYNCED  a687c2c            1.0.0        2021-02-17T00:15:55Z  INSTALLED

설치가 완료되면 정책 컨트롤러 열에서 INSTALLED 상태가 됩니다.

제약조건 템플릿 라이브러리 설치 확인

정책 컨트롤러를 설치하면 제약조건 템플릿 라이브러리가 기본적으로 설치됩니다. 이 설치를 완료하는 데 몇 분 정도 걸릴 수 있습니다. 템플릿 라이브러리가 성공적으로 완료되었는지 확인할 수 있습니다.

콘솔

다음 단계를 완료합니다.

  1. Google Cloud 콘솔에서 상태 관리 섹션에서 GKE Enterprise 정책 페이지로 이동합니다.

    정책으로 이동

  2. 설정 탭의 클러스터 테이블에서 설치된 번들 열에 나열된 번호를 선택합니다. 정책 콘텐츠 상태 창에서 템플릿 라이브러리가 성공적으로 설치되면 설치됨 상태가 됩니다.

gcloud

다음 명령어를 실행합니다.

kubectl get constrainttemplates

다음과 비슷한 출력이 표시됩니다.

NAME                                      AGE
k8sallowedrepos                           84s
k8scontainerlimits                        84s
k8spspallowprivilegeescalationcontainer   84s
...[OUTPUT TRUNCATED]...

개별 제약조건 템플릿이 올바르게 설치되면 status.created 필드는 true입니다.

Fleet 수준 기본값 구성

Google Kubernetes Engine(GKE) Enterprise 버전을 사용 설정한 경우 정책 컨트롤러를 클러스터의 Fleet 수준 기본값으로 사용 설정하고 구성할 수 있습니다. 즉, 클러스터 생성 중에 등록된 모든 새 Google Cloud 기반 GKE 클러스터는 지정한 설정으로 클러스터에 정책 컨트롤러를 사용 설정합니다. Fleet 기본 구성에 대한 자세한 내용은 Fleet 수준 기능 관리를 참조하세요.

정책 컨트롤러의 Fleet 수준 기본값을 구성하려면 다음 단계를 수행합니다.

Console

  1. Google Cloud 콘솔에서 기능 관리자 페이지로 이동합니다.

    기능 관리자로 이동

  2. 정책 창에서 구성을 클릭합니다.

  3. Fleet 수준 설정을 검토합니다. Fleet에 등록하는 새 클러스터가 모두 이러한 설정을 상속합니다.

  4. 선택사항: 기본 설정을 변경하려면 Fleet 맞춤설정을 클릭합니다. 대화상자가 나타나면 다음을 수행합니다.

    1. 정책 번들 추가/수정 섹션에서 관련 전환 버튼을 클릭하여 정책 번들을 포함하거나 제외합니다.
    2. 정책 컨트롤러 구성 수정 섹션에서 다음을 수행합니다.
      1. 변형 웹훅을 사용 설정하려면 변형 웹훅 사용 설정 체크박스를 선택합니다. 이 기능은 Autopilot 클러스터와 호환되지 않습니다.
      2. 감사 간격 상자에 두 개의 연속 감사 사이의 기간(초)을 입력합니다.
      3. 제외 가능한 네임스페이스 상자에 네임스페이스 목록을 입력합니다. 정책 컨트롤러는 이러한 네임스페이스의 객체를 무시합니다.
      4. 참조 제약조건을 사용 설정하려면 현재 평가 중인 객체가 아닌 객체를 참조하는 제약조건 템플릿을 사용 설정합니다. 체크박스를 선택합니다.
      5. 버전 목록에서 사용할 정책 컨트롤러 버전을 선택합니다.
    3. 변경사항 저장을 클릭합니다.
  5. 구성을 클릭합니다.

  6. 확인 대화상자에서 확인을 클릭합니다. 이전에 정책 컨트롤러를 사용 설정하지 않은 경우 확인을 클릭하면 anthospolicycontroller.googleapis.com API가 사용 설정됩니다.

  7. 선택사항: 기존 클러스터를 기본 설정으로 동기화합니다.

    1. Fleet의 클러스터 목록에서 동기화할 클러스터를 선택합니다.
    2. Fleet 설정과 동기화를 클릭하고 확인 대화상자가 나타나면 확인을 클릭합니다. 이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다.

gcloud

  1. 정책 컨트롤러의 기본 구성이 포함된 fleet-default.yaml이라는 파일을 만듭니다. Fleet 수준 기본값을 사용 설정하려면 installSpec 필드가 필요합니다. 이 예시에서는 구성할 수 있는 옵션을 보여줍니다.

    # cat fleet-default.yaml
    
     policyControllerHubConfig:
      installSpec: INSTALL_SPEC_ENABLED 
      # Uncomment to set default deployment-level configurations.
      # deploymentConfigs:
      #   admission:
      #     containerResources:
      #       limits:
      #        cpu: 1000m
      #         memory: 8Gi
      #       requests:
      #         cpu: 500m
      #         memory: 4Gi
      # Uncomment to set policy bundles that you want to install by default.
      # policyContent:
      #   bundles:
      #     cis-k8s-v1.5.1:
      #       exemptedNamespaces:
      #       - "namespace-name"
      # Uncomment to exempt namespaces from admission.
      # exemptableNamespaces:
      # - "namespace-name"
      # Uncomment to enable support for referential constraints
      # referentialRulesEnabled: true
      # Uncomment to disable audit, adjust value to set audit interval
      # auditIntervalSeconds: 0
      # Uncomment to log all denies and dryrun failures
      # logDeniesEnabled: true
      # Uncomment to enable mutation
      # mutationEnabled: true
      # Uncomment to adjust the value to set the constraint violation limit
      # constraintViolationLimit: 20
      # ... other fields ...
    
  2. Fleet에 기본 구성을 적용합니다.

    gcloud container fleet policycontroller enable \
      --fleet-default-member-config=fleet-default.yaml
    
  3. 구성이 적용되었는지 확인하려면 다음 명령어를 실행합니다.

    gcloud container fleet policycontroller describe
    
  4. Fleet 수준의 기본 구성을 삭제하려면 다음 명령어를 실행합니다.

    gcloud container fleet policycontroller enable \
      --no-fleet-default-member-config
    

구성 동기화로 정책 컨트롤러 상호작용

구성 동기화에서 정책 컨트롤러를 사용하는 경우, 구성 동기화에서 동기화되는 정보 소스에 저장된 리소스와 다음 상호작용을 알고 있어야 합니다.

  • 제약조건 템플릿 라이브러리가 비활성화되어 있지 않으면 템플릿 라이브러리의 일부인 제약조건 템플릿을 동기화할 수 없습니다.

  • gatekeeper-system 네임스페이스에 저장된 Config 리소스를 동기화하려면 정보 소스에 Config 리소스만 정의해야 합니다. gatekeeper-system Namespace를 이 값으로 정의해서는 안 됩니다.

제약조건 템플릿 라이브러리 관리

제약조건 템플릿, 연관된 제약조건 또는 제약조건 템플릿 라이브러리의 설치 제거 또는 설치에 대한 정보는 제약조건 작성을 참조하세요.

시행 시 네임스페이스 예외

네임스페이스 내의 객체를 무시하도록 정책 컨트롤러를 구성할 수 있습니다. 자세한 정보는 Policy Controller에서 네임스페이스 제외를 참조하세요.

리소스 변형

또한 정책 컨트롤러는 변형 웹훅 역할을 합니다. 자세한 내용은 리소스 변형을 참조하세요.

정책 컨트롤러 버전 보기

Gatekeeper 정책 컨트롤러가 사용하는 버전을 보려면 다음 명령어를 실행하여 이미지 태그를 확인합니다.

kubectl get deployments -n gatekeeper-system gatekeeper-controller-manager \
  -o="jsonpath={.spec.template.spec.containers[0].image}"

Gatekeeper를 빌드하는 데 사용되는 Git 태그(또는 해시)와 ConfigManagement Operator 버전 번호가 다음과 같이 이미지 태그에 포함됩니다.

.../gatekeeper:VERSION_NUMBER-GIT_TAG.gBUILD_NUMBER

다음 이미지를 예시로 들어보겠습니다.

gcr.io/config-management-release/gatekeeper:anthos1.3.2-480baac.g0
  • anthos1.3.2는 버전 번호입니다.
  • 480baac는 Git 태그입니다.
  • 0은 빌드 번호입니다.

또한 출시 버전 매트릭스에서 모든 정책 컨트롤러 버전 목록을 해당 매니페스트, 설치, nomos 바이너리 버전과 함께 볼 수 있습니다.

정책 컨트롤러 업그레이드

정책 컨트롤러를 업그레이드하기 전에 버전 간의 변경사항에 대한 자세한 내용은 출시 노트를 참조하세요.

정책 컨트롤러를 업그레이드하려면 다음 단계를 완료하세요.

Console

  1. Google Cloud 콘솔에서 상태 관리 섹션에서 GKE Enterprise 정책 페이지로 이동합니다.

    정책으로 이동

  2. 설정 탭에서 버전을 업그레이드할 클러스터 옆의 구성 수정을 선택합니다.
  3. 정책 컨트롤러 구성 수정 메뉴를 확장합니다.
  4. 버전 드롭다운 목록에서 업그레이드할 버전을 선택합니다.
  5. 변경사항 저장을 클릭합니다.

gcloud

다음 명령어를 실행합니다.

gcloud container fleet policycontroller update \
  --version=VERSION \
  --membership=MEMBERSHIP_NAME

다음을 바꿉니다.

  • VERSION: 업그레이드할 버전입니다.
  • MEMBERSHIP_NAME: 클러스터를 등록할 때 선택한 멤버십 이름입니다. gcloud container fleet memberships list를 실행하면 멤버십 이름을 찾을 수 있습니다.

정책 컨트롤러 제거

클러스터에서 정책 컨트롤러를 제거하려면 다음 단계를 따르세요.

콘솔

클러스터에서 정책 컨트롤러를 사용 중지하려면 다음 태스크를 완료하세요.

  1. Google Cloud 콘솔에서 상태 관리 섹션에서 GKE Enterprise 정책 페이지로 이동합니다.

    정책으로 이동

  2. 설정 탭의 클러스터 테이블에서 구성 수정 열의 수정 을 선택합니다.
  3. 클러스터 창에서 아래로 스크롤하여 정책 컨트롤러 정보 메뉴를 확장합니다.
  4. 정책 컨트롤러 제거를 선택합니다.
  5. 확인 대화상자의 안내에 따라 확인을 선택하여 제거를 확인합니다.

정책 컨트롤러가 제거되면 상태 열에 설치되지 않음 이 표시됩니다.

gcloud 정책 컨트롤러

정책 컨트롤러를 제거하려면 다음 명령어를 실행합니다.

gcloud container fleet policycontroller disable \
  --memberships=MEMBERSHIP_NAME

MEMBERSHIP_NAME을 정책 컨트롤러를 사용 중지할 등록된 클러스터의 멤버십 이름으로 바꿉니다. 여러 멤버십을 쉼표로 구분하여 지정할 수 있습니다.

gcloud ConfigManagement

정책 컨트롤러를 제거하려면 다음 안내를 따르세요.

  1. apply-spec.yaml 파일에서 ConfigManagement Operator 구성을 수정하고 policyController.enabledfalse로 설정합니다.

  2. apply-spec.yaml 파일의 변경사항을 적용합니다.

     gcloud beta container fleet config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 이 구성을 적용할 등록된 클러스터를 추가합니다.
    • CONFIG_YAML: apply-spec.yaml 파일의 경로를 추가합니다.
    • PROJECT_ID: 프로젝트 ID를 추가합니다.

ConfigManagement Operator 삭제

ConfigManagement 객체를 통해 정책 컨트롤러를 설치한 경우 클러스터에서 ConfigManagement 연산자도 삭제해야 합니다.

ConfigManagement Operator를 삭제하려면 다음 명령어를 실행합니다.

  1. 클러스터에서 ConfigManagement 객체를 삭제합니다.

    kubectl delete configmanagement --all
    

    이 명령어를 실행하면 다음과 같은 결과가 나타납니다.

    • ConfigManagement Operator가 클러스터에 만든 ClusterRole과 ClusterRoleBinding 모두 클러스터에서 삭제됩니다.
    • ConfigManagement Operator가 설치한 허용 컨트롤러 구성이 모두 삭제됩니다.
    • git-creds 보안 비밀, 1.9.0으로 시작하는 정책 컨트롤러, 구성 동기화, 구성 컨트롤러 버전, config-management-operator 배포, config-management-operator 포드를 제외하고 config-management-system 네임스페이스 콘텐츠가 삭제됩니다. ConfigManagement Operator는 config-management-system 네임스페이스가 없으면 작동하지 않습니다. 생성되거나 수정된 클러스터에서 ConfigManagement Operator 컨트롤러가 만들거나 수정한 모든 CustomResourceDefinition(CRD)이 삭제됩니다. ConfigManagement Operator를 실행하는 데 필요한 CRD는 Kubernetes의 관점에서는 ConfigManagement Operator를 설치한 사용자가 추가했으므로 아직 존재합니다. 다음 단계에서 이러한 구성요소 삭제에 대한 정보를 제공합니다.
  2. git-creds 보안 비밀을 유지해야 하는 경우 다음을 수행합니다.

    kubectl -n config-management-system get secret git-creds -o yaml
    
  3. config-management-system 네임스페이스를 삭제합니다.

    kubectl delete ns config-management-system
    
  4. config-management-monitoring 네임스페이스를 삭제합니다.

    kubectl delete ns config-management-monitoring
    
  5. ConfigManagement CustomResourceDefinition을 삭제합니다.

    kubectl delete crd configmanagements.configmanagement.gke.io
    

정책 컨트롤러 RBAC 및 권한

정책 컨트롤러에는 상위 권한이 있는 워크로드가 포함됩니다. 이러한 워크로드의 권한은 정책 에이전트 게이트키퍼 열기 작업 문서에 설명되어 있습니다.

정책 컨트롤러 리소스 요청

다음 표에는 지원되는 각 버전에 대한 Kubernetes 리소스 요구사항이 나와 있습니다. ConfigManagement Operator의 리소스 요청은 ConfigManagement 객체를 통해 정책 컨트롤러를 설치한 경우에만 적용됩니다.

1.16

구성요소 CPU 메모리
ConfigManagement Operator 100m 100Mi
정책 컨트롤러 100m 256Mi

1.15

구성요소 CPU 메모리
ConfigManagement Operator 100m 100Mi
정책 컨트롤러 100m 256Mi

1.14

구성요소 CPU 메모리
ConfigManagement Operator 100m 100Mi
정책 컨트롤러 100m 256Mi

다음 단계