정책 관리자 설치

이 페이지에서는 클러스터가 보안, 규정 또는 비즈니스 규칙과 관련된 정책을 준수하는지 확인, 감사 및 시행하는 Kubernetes 승인 컨트롤러인 Policy Controller를 설치하는 방법을 설명합니다.

시작하기 전에

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

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

  • Anthos Config Management를 사용하여 정책 컨트롤러를 설치하려면 Anthos 권한이 있어야 합니다. 자세한 내용은 Anthos 설정을 참조하세요.

  • 구성 동기화가 이미 설치된 Kubernetes 버전1.14.x 이상을 실행하는 클러스터가 있어야 합니다.

정책 관리자 설치

다음 단계에 따라 Policy Controller 동적 승인 컨트롤러를 클러스터에 설치하도록 Anthos Config Management를 구성합니다.

콘솔

Cloud Console에서 Policy Controller를 구성하려면 다음 단계를 완료하세요.

  1. Google Cloud Console에서 Anthos Config Management 메뉴로 이동합니다.

    Anthos Config Management 메뉴로 이동

  2. Policy Controller를 사용할 클러스터를 선택하고 구성을 클릭합니다.

  3. 클러스터의 ACM 설정 제목을 클릭합니다.

  4. Policy Controller 제목 아래에서 Policy Controller 사용 설정 체크박스를 선택합니다.

    1. 공통 정책 유형에 대한 제약조건 템플릿 라이브러리를 설치하려면 기본 템플릿 라이브러리 설치 체크박스를 선택한 상태로 둡니다.
    2. 감사 간격 필드에서 연속 동기화 사이의 간격을 초 단위로 선택합니다. 기본값은 60초이며 감사 간격을 0으로 설정하면 감사가 사용 중지됩니다.
    3. 예외 네임스페이스 필드에 유효한 네임스페이스 목록을 제공합니다. 이 네임스페이스의 객체는 모든 정책에서 무시됩니다. 네임스페이스는 현재 존재할 필요가 없습니다.
    4. 현재 평가 중인 객체가 아닌 객체를 참조하는 제약조건 템플릿 사용 설정 체크박스를 선택하여 참조 제약조건을 사용 설정합니다. 참조 제약조건에 대한 자세한 내용은 참조 제약 조건 사용 설정을 참조하세요.
  5. 완료를 클릭합니다. Anthos Config Management 메뉴로 돌아갑니다.

gcloud

다음 단계에 따라 Policy Controller 동적 승인 컨트롤러를 클러스터에 설치하도록 Anthos Config Management를 구성합니다.

기본적으로 Policy Controller는 일반적인 정책 유형에 대한 제약조건 템플릿 라이브러리를 설치합니다. 제약조건 템플릿 설치를 건너뛰려면 매니페스트에서 templateLibraryInstalled로 시작하는 행의 주석 처리를 삭제합니다.

  1. Anthos Config Management 구성 파일에서 spec.policyController 객체 내의 enabled 값을 true로 설정합니다.

    # config-management.yaml
    
    apiVersion: configmanagement.gke.io/v1
    kind: ConfigManagement
    metadata:
      name: config-management
    spec:
      # Set to true to install and enable Policy Controller
      policyController:
        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 exempt namespaces
        # exemptableNamespaces: ["namespace-name"]
      # ...other fields...
    

    참조 제약조건 지원은 기본적으로 사용되지 않습니다. 사용하기 전에 eventual consistency에 대한 주의사항을 이해해야 합니다.

  2. config-management.yaml 파일을 적용합니다.

     gcloud alpha container hub config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    다음을 바꿉니다.

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

pod가 생성되고 Policy Controller가 제약조건을 확인하고 적용하기 시작합니다.

kubectl

기본적으로 Policy Controller는 일반적인 정책 유형에 대한 제약조건 템플릿 라이브러리를 설치합니다. 제약조건 템플릿 설치를 건너뛰려면 매니페스트에서 templateLibraryInstalled로 시작하는 행의 주석 처리를 삭제합니다.

  1. Anthos Config Management 구성 파일에서 spec.policyController 객체 내의 enabled 값을 true로 설정합니다.

    # config-management.yaml
    
    apiVersion: configmanagement.gke.io/v1
    kind: ConfigManagement
    metadata:
      name: config-management
    spec:
      # Set to true to install and enable Policy Controller
      policyController:
        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 exempt namespaces
        # exemptableNamespaces: ["namespace-name"]
      # ...other fields...
    

    참조 제약조건 지원은 기본적으로 사용되지 않습니다. 사용하기 전에 eventual consistency에 대한 주의사항을 이해해야 합니다.

  2. kubectl apply를 사용하여 구성을 적용합니다.

    kubectl apply -f config-management.yaml
    

pod가 생성되고 Policy Controller가 제약조건을 확인하고 적용하기 시작합니다.

설치 확인

Policy Controller가 올바르게 설치되면 해당 pod가 실행 중입니다. Pod를 사용하기 전에 여러 번 다시 시작될 수 있습니다.

Pod 상태를 보려면 다음 명령어를 실행합니다.

kubectl get pods -n gatekeeper-system

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

NAME                              READY   STATUS    RESTARTS   AGE
gatekeeper-controller-manager-0   1/1     Running   1          53s

제약조건 템플릿 라이브러리가 기본적으로 설치됩니다. 완료되는 데 몇 분 정도 걸릴 수 있습니다. 템플릿 라이브러리가 설치되었는지 확인하려면 모든 ConstraintTemplate 객체를 나열합니다.

kubectl get constrainttemplates

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

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

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

Anthos Config Management와의 Policy Controller 상호작용

Anthos Config Management는 Policy Controller를 실행하는 데 필요한 리소스를 관리합니다. Anthos Config Management와 Policy Controller 사이의 경합을 피하려면 Anthos Config Management 저장소에 무엇이 들어가는지 알고 있어야 합니다.

Policy Controller를 사용할 때는 다음 사항을 고려하세요.

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

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

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

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

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

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

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

정책 컨트롤러 버전 보기

Gatekeeper Policy Controller가 사용하는 버전을 보려면 다음 명령어를 실행하여 이미지 태그를 확인합니다.

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 바이너리 버전과 함께 볼 수 있습니다.

정책 컨트롤러 제거

클러스터에서 Policy Controller를 제거하려면 다음 단계를 따르세요.

콘솔

클러스터에서 Policy Controller를 사용 중지하려면 다음 작업을 완료하세요.

  1. Google Cloud Console에서 Anthos Config Management 메뉴로 이동합니다.

    Anthos Config Management 메뉴로 이동

  2. Policy Controller를 사용 중지할 클러스터를 선택합니다.

  3. 구성을 클릭합니다.

  4. 클러스터의 ACM 설정 제목을 클릭합니다.

  5. Policy Controller 섹션에서 Policy Controller 체크박스를 선택 취소합니다.

  6. 완료를 클릭합니다.

gcloud

Policy Controller를 제거하려면 다음 안내를 따르세요.

  1. config-management.yaml 파일에서 Anthos Config Management 구성을 수정하고 policyController.enabledfalse로 설정합니다.

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

     gcloud alpha container hub config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    다음을 바꿉니다.

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

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

kubectl

Policy Controller를 제거하려면 config-management.yaml 파일에서 Anthos Config Management 구성을 수정하고 policyController.enabledfalse로 설정합니다. Anthos Config Management가 policycontroller.configmanagement.gke.io 종료자를 제거하면 설치 제거가 완료됩니다.

Anthos Config Management를 완전히 제거하려면 클러스터에서 구성 동기화 제거를 참조하세요.

다음 단계