이 주제에서는 클러스터가 보안, 규정 또는 비즈니스 규칙과 관련된 정책을 준수하는지 확인, 감사 및 시행하는 Kubernetes 승인 컨트롤러인 정책 컨트롤러를 설치하는 방법을 설명합니다.
시작하기 전에
Anthos Config Management를 사용하여 정책 컨트롤러를 설치하려면 Anthos 권한이 있어야 합니다.
Anthos Config Management가 이미 설치된 GKE v1.14.x 이상을 실행하는 클러스터가 필요합니다.
Anthos Config Management를 사용하여 Policy Controller 설치
다음 단계에 따라 Policy Controller 동적 승인 컨트롤러를 클러스터에 설치하도록 Anthos Config Management를 구성합니다.
기본적으로 Policy Controller는 일반적인 정책 유형에 대한 제약조건 템플릿 라이브러리를 설치합니다. 제약조건 템플릿 설치를 건너뛰려면 매니페스트에서 templateLibraryInstalled
로 시작하는 행의 주석 처리를 삭제합니다.
Operator에 대한 구성 파일에서
spec.policyController
객체 내의enabled
값을true
로 설정합니다.# config-management.yaml apiVersion: configmanagement.gke.io/v1 kind: ConfigManagement metadata: name: config-management namespace: config-management-system spec: # clusterName is required and must be unique among all managed clusters clusterName: my-cluster # 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 disable audit, adjust value to set audit interval # auditIntervalSeconds: 0
참조 제약조건 지원은 기본적으로 사용되지 않습니다. 사용하기 전에 eventual consistency에 대한 주의사항을 이해해야 합니다.
kubectl apply
를 사용하여 구성을 적용합니다.kubectl apply -f config-management.yaml
pod가 생성되고 Policy Controller가 제약조건을 확인하고 적용하기 시작합니다.
설치 확인
Policy Controller가 올바르게 설치되면 해당 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
입니다.
Policy Controller 및 Anthos Config Management
Policy Controller를 실행하는 데 필요한 리소스는 Config Management Operator가 관리합니다. Operator와 Policy Controller 사이의 경합을 피하려면 Anthos Config Management 저장소에 무엇이 들어가는지 알고 있어야 합니다.
다음은 문제가 되는 부분입니다.
제약조건 템플릿 라이브러리가 비활성화되어 있지 않으면 템플릿 라이브러리의 일부인 제약조건 템플릿을 동기화할 수 없습니다.
gatekeeper-system
네임스페이스에 저장된 구성 리소스를 동기화하려면 네임스페이스가 저장소에 정의되어 있지 않거나 Operator가 설치하려는 구성과 일치해야 합니다.정보 출처 저장소에서
gatekeeper-system
네임스페이스가 제거되면 Operator가 복구하지 못할 수 있습니다. 복구하려면 Policy Controller에 대한 유효성 검증 웹훅 구성을 삭제합니다.
제약조건 템플릿 라이브러리 관리
제약조건 템플릿, 연관된 제약조건 또는 제약조건 템플릿 라이브러리의 설치 제거 또는 재설치에 대한 정보는 제약조건 작성을 참조하세요.
시행에서 네임스페이스 면제
네임스페이스 내의 객체를 무시하도록 정책 컨트롤러를 구성할 수 있습니다. 자세한 정보는 Policy Controller에서 네임스페이스 제외를 참조하세요.
정책 컨트롤러 버전 보기
정책 컨트롤러는 Gatekeeper 오픈소스 프로젝트에서 빌드됩니다. 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
바이너리 버전과 함께 볼 수 있습니다.
정책 컨트롤러 제거
정책 컨트롤러를 설치 제거하려면 config-management.yaml
에서 Operator 구성을 편집하고 policyController.enabled
를 false
로 설정합니다. Operator가 policycontroller.configmanagement.gke.io
종료자를 제거하면 설치 제거가 완료됩니다.
Anthos Config Management를 완전히 제거하려면 클러스터에서 Operator 제거를 참조하세요.
다음 단계
- 정책 컨트롤러 자세히 알아보기
- 제약조건 작성
- Google에서 제공한 제약조건 템플릿 라이브러리 사용
- PodSecurityPolicies 대신 제약조건을 사용하는 방법 알아보기