이 페이지에서는 정책 컨트롤러를 설치하는 방법을 보여줍니다. 정책 컨트롤러는 보안, 규정, 비즈니스 규칙과 관련된 정책에 따라 클러스터를 확인 및 감사하고 규정 준수를 시행합니다.
정책 컨트롤러는 Google Kubernetes Engine(GKE) Enterprise 버전을 사용하는 경우 사용할 수 있습니다. 자세한 내용은 Google Kubernetes Engine(GKE) Enterprise 버전 가격 책정을 참조하세요.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- 이 안내에서 사용되는
gcloud
,gsutil
,kubectl
및nomos
명령어를 제공하는 Google Cloud CLI를 설치하고 초기화합니다. 이전에 gcloud CLI를 설치한 경우gcloud components update
를 실행하여 최신 버전을 가져옵니다. Cloud Shell을 사용하는 경우 Google Cloud CLI가 사전 설치됩니다. - 오픈소스 오픈 정책 에이전트 게이트키퍼가 클러스터에 설치되어 있지 않은지 확인합니다. 그렇다면 정책 컨트롤러를 설치하기 전에 Gatekeeper를 제거합니다.
정책 컨트롤러 API를 사용 설정합니다.
Kubernetes 버전 1.14.x 이상을 실행하는 클러스터를 만들거나 액세스할 수 있는지 확인합니다. 정책 컨트롤러가 1.14.x 이전 버전의 Kubernetes에서 실행되는 것처럼 보일 수 있지만 제품이 올바르게 작동하지 않습니다.
Google Cloud CLI를 사용하여 정책 컨트롤러를 구성하려면 지금 Fleet에 클러스터를 등록합니다. Google Cloud 콘솔을 사용하려는 경우 정책 컨트롤러를 설치할 때 클러스터를 등록합니다.
GKE 연결 클러스터를 사용하는 경우 AKS 클러스터에 Azure 정책 부가기능이 없는지 확인하고
control-plane
키로 네임스페이스에 라벨 지정을 하지 않습니다.VMware 또는 베어메탈용 Google Distributed Cloud를 사용하는 경우 사용자 클러스터에 정책 컨트롤러를 설치해야 합니다. 관리자 클러스터에는 정책 컨트롤러를 설치할 수 없습니다.
정책 컨트롤러 설치
버전 1.16.0부터 Google Cloud CLI를 사용하는 경우 ConfigManagement 객체를 통해 직접(권장) 정책 컨트롤러를 설치하고 관리할 수 있습니다.
콘솔
Google Cloud 콘솔에서 정책 컨트롤러를 설치하려면 다음 단계를 완료하세요.
- Google Cloud 콘솔의 상황 관리 섹션에서 GKE Enterprise 정책 페이지로 이동합니다.
add 정책 컨트롤러 설치를 선택합니다.
정책 컨트롤러 설치 창에서 다음 설치 옵션 중 하나를 선택합니다.
Fleet의 모든 클러스터에 정책 컨트롤러를 설치하려면 다음 안내를 따르세요.
Fleet에 설치를 선택된 상태로 둡니다.
프로젝트에 Fleet이 없으면 다음 단계에서 Fleet을 만들 수 있습니다.
Fleet이 아직 없으면 Fleet 이름을 선택합니다.
정책 컨트롤러 활성화를 선택합니다.
개별 클러스터에 정책 컨트롤러 설치하기
개별 클러스터에 설치를 선택합니다.
사용 가능한 클러스터 테이블에서 정책 컨트롤러를 설치할 클러스터를 선택합니다.
정책 컨트롤러 활성화를 선택합니다.
정책 컨트롤러 설정 탭으로 리디렉션됩니다. 클러스터에 정책 컨트롤러가 설치되고 구성되면 상태 열에 설치됨 check_circle이 표시됩니다. 몇 분 정도 걸릴 수 있습니다.
gcloud 정책 컨트롤러
다음 명령어를 실행하여 정책 컨트롤러를 사용 설정합니다.
gcloud container fleet policycontroller enable \
--memberships=MEMBERSHIP_NAME
정책 컨트롤러를 구성하기 위해 추가 필드를 설정할 수 있습니다. 예를 들어 정책 컨트롤러가 일부 네임스페이스를 시행에서 제외하도록 할 수 있습니다.
구성할 수 있는 필드의 전체 목록은 정책 컨트롤러 Google Cloud CLI 문서를 참조하거나 gcloud container fleet policycontroller enable --help
를 실행하세요.
gcloud ConfigManagement
새
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
파일의 경로입니다.
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를 추가합니다.
포드가 생성되고 정책 컨트롤러가 제약조건을 확인하고 적용하기 시작합니다.
정책 컨트롤러 설치 확인
정책 컨트롤러를 설치하면 성공적으로 완료되었는지 확인할 수 있습니다.
콘솔
다음 단계를 완료합니다.
- Google Cloud 콘솔의 상황 관리 섹션에서 GKE Enterprise 정책 페이지로 이동합니다.
- 설정 탭의 클러스터 테이블에서 정책 컨트롤러 상태 열을 확인합니다. 설치가 완료되면 설치됨 check_circle 상태가 표시됩니다.
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
상태가 됩니다.
제약조건 템플릿 라이브러리 설치 확인
정책 컨트롤러를 설치하면 제약조건 템플릿 라이브러리가 기본적으로 설치됩니다. 이 설치를 완료하는 데 몇 분 정도 걸릴 수 있습니다. 템플릿 라이브러리가 성공적으로 완료되었는지 확인할 수 있습니다.
콘솔
다음 단계를 완료합니다.
- Google Cloud 콘솔의 상황 관리 섹션에서 GKE Enterprise 정책 페이지로 이동합니다.
- 설정 탭의 클러스터 테이블에서 설치된 번들 열에 나열된 번호를 선택합니다. 정책 콘텐츠 상태 창에서 템플릿 라이브러리가 성공적으로 설치되면 설치됨 check_circle 상태가 표시됩니다.
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
Google Cloud 콘솔에서 기능 관리자 페이지로 이동합니다.
정책 창에서 구성을 클릭합니다.
Fleet 수준 설정을 검토합니다. Fleet에 등록하는 새 클러스터가 모두 이러한 설정을 상속합니다.
선택사항: 기본 설정을 변경하려면 Fleet 맞춤설정을 클릭합니다. 대화상자가 나타나면 다음을 수행합니다.
- 정책 번들 추가/수정 섹션에서 관련 전환 버튼을 클릭하여 정책 번들을 포함하거나 제외합니다.
- 정책 컨트롤러 구성 수정 섹션에서 다음을 수행합니다.
- 변경사항 저장을 클릭합니다.
구성을 클릭합니다.
확인 대화상자에서 확인을 클릭합니다. 이전에 정책 컨트롤러를 사용 설정하지 않은 경우 확인을 클릭하면
anthospolicycontroller.googleapis.com
API가 사용 설정됩니다.선택사항: 기존 클러스터를 기본 설정으로 동기화합니다.
- Fleet의 클러스터 목록에서 동기화할 클러스터를 선택합니다.
- Fleet 설정과 동기화를 클릭하고 확인 대화상자가 나타나면 확인을 클릭합니다. 이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다.
gcloud
정책 컨트롤러의 기본 구성이 포함된
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 ...
Fleet에 기본 구성을 적용합니다.
gcloud container fleet policycontroller enable \ --fleet-default-member-config=fleet-default.yaml
구성이 적용되었는지 확인하려면 다음 명령어를 실행합니다.
gcloud container fleet policycontroller describe
Fleet 수준의 기본 구성을 삭제하려면 다음 명령어를 실행합니다.
gcloud container fleet policycontroller enable \ --no-fleet-default-member-config
구성 동기화와 정책 컨트롤러의 상호작용
구성 동기화에서 정책 컨트롤러를 사용하는 경우, 구성 동기화에서 동기화되는 Git 저장소와 같이 정보 소스에 저장된 리소스와 다음 상호작용을 알고 있어야 합니다.
제약조건 템플릿 라이브러리가 비활성화되어 있지 않으면 템플릿 라이브러리의 일부인 제약조건 템플릿을 동기화할 수 없습니다.
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
은 빌드 번호입니다.
정책 컨트롤러 업그레이드
정책 컨트롤러를 업그레이드하기 전에 출시 노트에서 버전 간 변경사항에 대한 자세한 내용을 확인하세요.
정책 컨트롤러를 업그레이드하려면 다음 단계를 완료합니다.
Console
- Google Cloud 콘솔의 상황 관리 섹션에서 GKE Enterprise 정책 페이지로 이동합니다.
- 설정 탭에서 버전을 업그레이드하려는 클러스터 옆에 있는 edit 구성 수정을 선택합니다.
- 정책 컨트롤러 구성 수정 메뉴를 확장합니다.
- 버전 드롭다운 목록에서 업그레이드할 버전을 선택합니다.
- 변경사항 저장을 클릭합니다.
gcloud
다음 명령어를 실행합니다.
gcloud container fleet policycontroller update \
--version=VERSION \
--membership=MEMBERSHIP_NAME
다음을 바꿉니다.
VERSION
: 업그레이드할 버전입니다.MEMBERSHIP_NAME
: 클러스터를 등록할 때 선택한 멤버십 이름입니다.gcloud container fleet memberships list
를 실행하면 멤버십 이름을 찾을 수 있습니다.
정책 컨트롤러 제거
클러스터에서 정책 컨트롤러를 제거하려면 다음 단계를 따르세요.
콘솔
클러스터에서 정책 컨트롤러를 사용 중지하려면 다음 태스크를 완료하세요.
- Google Cloud 콘솔의 상황 관리 섹션에서 GKE Enterprise 정책 페이지로 이동합니다.
- 설정 탭의 클러스터 테이블에서 구성 수정 열의 수정 edit을 선택합니다.
- 클러스터 창에서 아래로 스크롤하여 정책 컨트롤러 정보 메뉴를 확장합니다.
- 정책 컨트롤러 제거를 선택합니다.
- 확인 대화상자의 안내를 따르고 확인을 선택하여 제거를 확인합니다.
정책 컨트롤러가 제거되면 상태 열에 설치되지 않음 do_not_disturb_on이 표시됩니다.
gcloud 정책 컨트롤러
정책 컨트롤러를 제거하려면 다음 명령어를 실행합니다.
gcloud container fleet policycontroller disable \
--memberships=MEMBERSHIP_NAME
정책 컨트롤러를 사용 중지하려면 MEMBERSHIP_NAME
을 등록된 클러스터의 멤버십 이름으로 바꿉니다. 쉼표로 구분하여 여러 멤버십을 지정할 수 있습니다.
gcloud ConfigManagement
정책 컨트롤러를 제거하려면 다음 안내를 따르세요.
apply-spec.yaml
파일에서 ConfigManagement Operator 구성을 수정하고policyController.enabled
를false
로 설정합니다.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 Operator도 삭제해야 합니다.
ConfigManagement Operator를 삭제하려면 다음 명령어를 실행합니다.
클러스터에서 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를 설치한 사용자가 추가했으므로 아직 존재합니다. 다음 단계에서 이러한 구성요소 삭제에 대한 정보를 제공합니다.
git-creds
보안 비밀을 유지해야 하는 경우 다음을 수행합니다.kubectl -n config-management-system get secret git-creds -o yaml
config-management-system
네임스페이스를 삭제합니다.kubectl delete ns config-management-system
config-management-monitoring
네임스페이스를 삭제합니다.kubectl delete ns config-management-monitoring
ConfigManagement CustomResourceDefinition을 삭제합니다.
kubectl delete crd configmanagements.configmanagement.gke.io
정책 컨트롤러 RBAC 및 권한
정책 컨트롤러에는 상위 권한이 있는 워크로드가 포함됩니다. 이러한 워크로드의 권한은 정책 에이전트 게이트키퍼 열기 작업 문서에 설명되어 있습니다.
정책 컨트롤러 리소스 요청
다음 표에는 지원되는 각 정책 컨트롤러 버전에 대한 Kubernetes 리소스 요구사항이 나와 있습니다. ConfigManagement Operator의 리소스 요청은 ConfigManagement
객체를 통해 정책 컨트롤러를 설치한 경우에만 적용됩니다.
구성요소 | CPU | 메모리 |
---|---|---|
ConfigManagement Operator | 100m | 100Mi |
정책 컨트롤러 | 100m | 256Mi |
다음 단계
- 정책 컨트롤러 자세히 알아보기
- 정책 컨트롤러 번들 자세히 알아보기
- 제약조건 작성 방법 알아보기
- 정책 컨트롤러 문제 해결