정책 컨트롤러 설치

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

정책 컨트롤러는 Anthos 또는 Google Kubernetes Engine(GKE)을 사용하는 경우 사용할 수 있습니다. GKE에서 정책 컨트롤러는 유료 기능입니다. 자세한 내용은 가격 책정을 참조하세요. 무료로 설치하기 전에 보고서를 만들어 Policy Controller를 사용해 볼 수 있습니다.

시작하기 전에

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

  1. 이 안내에서 사용되는 gcloud, gsutil, kubectlnomos 명령어를 제공하는 Google Cloud CLI를 설치하고 초기화합니다. Cloud Shell을 사용하는 경우 Google Cloud CLI가 사전 설치됩니다.

  2. Anthos Config Management를 처음 사용하는 경우 Anthos Config Management를 사용 설정합니다.

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

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

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

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

정책 컨트롤러 설치

다음 단계에 따라 Policy Controller 동적 승인 컨트롤러를 클러스터에 설치하도록 Anthos Config Management를 구성합니다. Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 구성 동기화를 설치할 때는 나중에 kubectl 명령어를 사용하여 구성을 수정할 수 없습니다.

콘솔

클러스터 등록

Anthos Config Management를 사용하려면 먼저 클러스터를 등록합니다. 클러스터를 등록하면 공통적인 구성 및 정책 집합을 공유할 수 있습니다.

클러스터를 등록하려면 다음 작업을 완료합니다.

  1. Google Cloud 콘솔에서 다음을 수행합니다.
    • Google Kubernetes Engine을 사용하는 경우 구성 및 정책 섹션에서 GKE 정책 페이지로 이동합니다.

      Config Management로 이동

    • Anthos를 사용하는 경우 구성 및 정책 섹션에서 Anthos 정책 페이지로 이동합니다.

      Config Management로 이동

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

  3. Config Management를 위해 등록된 클러스터 선택 페이지에서 이 페이지에서 등록 해제된 클러스터 테이블을 찾고 등록하려는 클러스터를 찾습니다.

  4. 등록하려는 클러스터 옆에서 등록을 클릭합니다.

    클러스터가 성공적으로 등록되면 Config Management를 위해 등록된 클러스터 선택 테이블에 표시됩니다.

정책 컨트롤러 구성

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

  1. Config Management를 위해 등록된 클러스터 선택 페이지에서 정책 컨트롤러를 사용 설정할 등록된 클러스터를 선택하고 다음을 클릭합니다.
  2. 정책 컨트롤러 사용 설정 체크박스를 선택한 상태로 둡니다.
  3. 선택사항: 추가 설정을 구성하려면 고급 설정 표시를 클릭합니다.
  4. 선택사항: 리소스를 변형하려면 변형 웹훅 사용 설정 체크박스를 선택한 상태로 둡니다.

  5. 선택사항: 일반적인 정책 유형에 대해 제약조건 템플릿 라이브러리를 설치하려면 기본 템플릿 라이브러리 설치 체크박스를 선택한 상태로 둡니다.

  6. 선택사항: 감사 간격 필드에서 연속 동기화 간격(초)을 추가합니다. 기본값은 60초이며 감사 간격을 0으로 설정하면 감사가 사용 중지됩니다.

  7. 선택사항: 네임스페이스 면제 필드에 네임스페이스 목록을 추가합니다. 이 네임스페이스의 객체는 모든 정책에서 무시됩니다. 네임스페이스는 현재 존재하지 않아도 됩니다.

  8. 선택사항: 참조 제약조건을 사용 설정하려면 현재 평가 중인 객체가 아닌 다른 객체를 참조하는 제약조건 템플릿 사용 기능 사용 설정 체크박스를 선택한 상태로 둡니다.

  9. 선택사항: 구성 동기화를 설치하지 않으려면 다음을 클릭하고 구성 동기화 사용 설정 체크박스를 선택 해제합니다.

  10. 설치를 완료하려면 완료를 클릭합니다. Config Management 페이지로 돌아갑니다.

    몇 분 후에 구성한 클러스터 옆에 있는 정책 컨트롤러 상태 열에 Installed가 표시되어야 합니다.

gcloud

  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.8.0 이전 버전을 사용하고 Google Kubernetes Engine(GKE)의 비공개 클러스터에 정책 컨트롤러를 설치하는 경우 추가 단계를 수행하여 설치를 완료합니다. 비공개 클러스터에서 방화벽은 제어 영역이 정책 컨트롤러에 연결을 시도하는 포트 8443의 노드에 제어 영역이 도달하지 못하도록 차단합니다. 제어 영역이 포트 8443(또는 기타 커스텀 포트)에 도달할 수 있도록 방화벽 규칙을 만듭니다. 포드가 권한이 있는 포트 443에서 실행되도록 할 수도 있습니다. 자세한 내용은 Gatekeeper 문서의 비공개 GKE 클러스터 노드에서 실행을 참조하세요.

정책 컨트롤러 설치 확인

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

콘솔

다음 단계를 완료합니다.

  1. Google Cloud 콘솔에서 다음을 수행합니다.
    • Google Kubernetes Engine을 사용하는 경우 구성 및 정책 섹션에서 GKE 정책 페이지로 이동합니다.

      Config Management로 이동

    • Anthos를 사용하는 경우 구성 및 정책 섹션에서 Anthos 정책 페이지로 이동합니다.

      Config Management로 이동

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

gcloud

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

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 상태가 됩니다.

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

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

템플릿 라이브러리가 설치되었는지 확인하려면 모든 ConstraintTemplate 객체를 나열합니다.

kubectl get constrainttemplates

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

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

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

Anthos Config Management와의 정책 컨트롤러 상호작용

Anthos Config Management는 정책 컨트롤러를 실행하는 데 필요한 리소스를 관리합니다. Anthos Config Management와 정책 컨트롤러 사이의 충돌을 피하려면 구성 동기화 저장소에 무엇이 들어가는지 알고 있어야 합니다.

정책 컨트롤러를 사용할 때는 다음 사항을 고려하세요.

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

  • gatekeeper-system 네임스페이스에 저장된 구성 리소스를 동기화하려면 네임스페이스가 저장소에서 정의되지 않거나 Anthos Config Management가 설치할 구성과 일치해야 합니다.

  • 정보 출처 저장소에서 gatekeeper-system 네임스페이스가 삭제되면 Anthos Config Management가 복구하지 못할 수 있습니다. 복구하려면 정책 컨트롤러에 대한 웹훅 구성 유효성 검증을 삭제합니다.

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

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

시행에서 네임스페이스 면제

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

리소스 변형

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

정책 컨트롤러 버전 보기

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

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

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

.../gatekeeper:VERSION_NUMBER-GIT_TAG.gBUILD_NUMBER

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

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

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

정책 컨트롤러 업그레이드

정책 컨트롤러는 Anthos Config Management를 업그레이드할 때마다 업그레이드됩니다. 자세한 내용은 Anthos Config Management 업그레이드를 참조하세요.

정책 컨트롤러 제거

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

콘솔

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

  1. Google Cloud 콘솔에서 다음을 수행합니다.
    • Google Kubernetes Engine을 사용하는 경우 구성 및 정책 섹션에서 GKE 정책 페이지로 이동합니다.

      Config Management로 이동

    • Anthos를 사용하는 경우 구성 및 정책 섹션에서 Anthos 정책 페이지로 이동합니다.

      Config Management로 이동

  2. 설정 탭에서 정책 컨트롤러를 사용 중지하려는 클러스터옆의 컨텍스트 메뉴 > 구성 수정을 클릭합니다.
  3. 정책 컨트롤러 사용 설정 체크박스를 선택 해제합니다.
  4. 완료를 클릭합니다.

gcloud

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

  1. apply-spec.yaml 파일에서 Anthos Config Management 구성을 수정하고 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를 추가합니다.

Anthos Config Management가 policycontroller.configmanagement.gke.io 종료자를 제거하면 설치 제거가 완료됩니다.

Anthos Config Management를 완전히 제거하려면 Anthos Config Management 제거를 참조하세요.

정책 컨트롤러 RBAC 및 권한

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

다음 단계