정책 컨트롤러는 워크로드의 성능 또는 신뢰성 저하 없이 비용 효율적인 GKE 클러스터를 실행하기 위한 권장사항을 채택하는 데 도움이 되는 비용 및 신뢰성 정책 번들과 함께 사용할 수 있는 제약조건 템플릿의 기본 라이브러리와 함께 제공됩니다.
이 페이지에는 정책 번들을 수동으로 적용하는 방법에 관한 안내가 포함되어 있습니다. 또는 정책 번들을 직접 적용할 수 있습니다.
비용 및 신뢰성 정책 번들 제약조건
제약조건 이름 | 제약조건 설명 |
---|---|
cost-reliability-v2023-pod-disruption-budget | Deployments, ReplicaSets, StatefulSets, ReplicationControllers에 대한 PodDisruptionBudget 구성이 필요합니다. |
cost-reliability-v2023-pod-resources-best-practices | 컨테이너에서 리소스 요청을 설정하고 권장사항을 따라야 합니다. |
cost-reliability-v2023-required-labels | 모든 포드 및 컨트롤러(ReplicaSet, Deployment, StatefulSet, DaemonSet)에 필요한 라벨(환경, 팀, 앱)이 있어야 합니다. |
cost-reliability-v2023-restrict-repos | Artifact Registry를 사용해 이미지 스트리밍을 활용하도록 컨테이너 이미지를 허용된 저장소 목록으로 제한합니다. |
cost-reliability-v2023-spotvm-termination-grace | gke-spot이 nodeSelector 또는 nodeAfffinty인 포드 및 포드 템플릿의 terminationGracePeriodSeconds가 15초 이하여야 합니다. |
시작하기 전에
- 이 안내에서 사용되는
gcloud
,kubectl
명령어를 제공하는 Google Cloud CLI를 설치하고 초기화합니다. Cloud Shell을 사용하는 경우 Google Cloud CLI가 사전 설치됩니다. - 제약조건 템플릿의 기본 라이브러리를 사용하여 클러스터에 정책 컨트롤러를 설치합니다. 이 번들에는 참조 제약조건이 포함되어 있으므로 참조 제약조건에 대한 지원을 사용 설정해야 합니다.
참조 제약조건에 맞게 정책 컨트롤러 구성
다음 YAML 매니페스트를 파일에
policycontroller-config.yaml
로 저장합니다. 이 매니페스트는 특정 종류의 객체를 감시하도록 정책 컨트롤러를 구성합니다.apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "" version: "v1" kind: "Service" - group: "policy" version: "v1" kind: "PodDisruptionBudget"
policycontroller-config.yaml
매니페스트를 적용합니다.kubectl apply -f policycontroller-config.yaml
클러스터 및 워크로드 구성
service
에서 선택한 모든pod
에는 준비 프로브가 포함되어야 합니다.- 모든
deployment
,replicaset
,statefulset
,replicationcontroller
에는poddisruptionbudget
이 포함되어야 합니다. - 모든 컨테이너에는
cpu
및memory
요청이 포함되어야 하며memory
한도가 권장사항을 따르는memory
요청과 동일해야 합니다. - 모든 포드 및 포드 템플릿에
environment
,team
,app
라벨을 추가합니다. - 클러스터와 동일한 리전에서 Artifact Registry를 사용하여 컨테이너 이미지를 호스팅해 이미지 스트리밍을 사용 설정합니다.
cost-reliability-v2023-restrict-repos
의 예시를 따라 관련 Artifact Registry를 허용합니다. gke-spot
을 사용하는 모든 포드 및 포드 템플릿에는 15초 이하의terminationGracePeriodSeconds
가 포함되어야 합니다.
비용 및 신뢰성 정책 번들 감사
정책 컨트롤러를 사용하면 Kubernetes 클러스터에 정책을 적용할 수 있습니다. 앞의 테이블에서 설명된 비용 및 신뢰성 정책과 관련하여 워크로드 및 규정 준수를 테스트하는 데 도움이 되도록, '감사' 모드에서 이러한 제약조건을 배포하여 위반 사항을 표시할 수 있고 더 중요하게는 Kubernetes 클러스터에 적용하기 전에 문제를 해결할 기회를 가질 수 있습니다.
kubectl, kpt 또는 구성 동기화를 사용하여 dryrun
으로 설정된 spec.enforcementAction
으로 이러한 정책을 적용할 수 있습니다.
kubectl
(선택사항) kubectl을 사용하여 정책 제약조건을 미리 봅니다.
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
kubectl을 사용하여 정책 제약조건을 적용합니다.
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
출력은 다음과 같습니다.
gkespotvmterminationgrace.constraints.gatekeeper.sh/cost-reliability-v2023-spotvm-termination-grace created k8sallowedrepos.constraints.gatekeeper.sh/cost-reliability-v2023-restrict-repos created k8spoddisruptionbudget.constraints.gatekeeper.sh/cost-reliability-v2023-pod-disruption-budget created k8spodresourcesbestpractices.constraints.gatekeeper.sh/cost-reliability-v2023-pod-resources-best-practices created k8srequiredlabels.constraints.gatekeeper.sh/cost-reliability-v2023-required-labels created
정책 제약조건이 설치되었는지 확인하고 클러스터 전체에 위반 사항이 있는지 확인합니다.
kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023
출력은 다음과 비슷합니다.
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS gkespotvmterminationgrace.constraints.gatekeeper.sh/cost-reliability-v2023-spotvm-termination-grace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spodresourcesbestpractices.constraints.gatekeeper.sh/cost-reliability-v2023-pod-resources-best-practices dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spoddisruptionbudget.constraints.gatekeeper.sh/cost-reliability-v2023-pod-disruption-budget dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sallowedrepos.constraints.gatekeeper.sh/cost-reliability-v2023-restrict-repos dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/cost-reliability-v2023-required-labels dryrun 0
kpt
kpt를 설치하고 설정합니다.
이 안내에서는 kpt를 사용하여 Kubernetes 리소스를 맞춤설정하고 배포합니다.
kpt를 사용하여 GitHub에서 PCI-DSS v3.2.1 정책 번들을 다운로드합니다.
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023
set-enforcement-action
kpt 함수를 실행하여 정책의 시정 조치를dryrun
으로 설정합니다.kpt fn eval cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
변경사항을 추적하는 리소스를 만드는 kpt로 작업 디렉터리를 초기화합니다.
cd cost-reliability-v2023 kpt live init
kpt로 정책 제약조건을 적용합니다.
kpt live apply
정책 제약조건이 설치되었는지 확인하고 클러스터 전체에 위반 사항이 있는지 확인합니다.
kpt live status --output table --poll-until current
CURRENT
상태는 제약조건이 성공적으로 설치되었음을 확인합니다.
구성 동기화
kpt를 설치하고 설정합니다.
이 안내에서는 kpt를 사용하여 Kubernetes 리소스를 맞춤설정하고 배포합니다.
구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.
구성 동기화의 동기화 디렉터리로 변경합니다.
cd SYNC_ROOT_DIR
resourcegroup.yaml
로.gitignore
를 만들거나 추가하려면 다음 안내를 따르세요.echo resourcegroup.yaml >> .gitignore
전용
policies
디렉터리를 만듭니다.mkdir -p policies
kpt를 사용하여 GitHub에서 비용 및 신뢰성 정책 번들을 다운로드합니다.
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/cost-reliability-v2023 policies/cost-reliability-v2023
set-enforcement-action
kpt 함수를 실행하여 정책의 시정 조치를dryrun
으로 설정합니다.kpt fn eval policies/cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(선택사항) 생성될 정책 제약조건을 미리 봅니다.
kpt live init policies/cost-reliability-v2023 kpt live apply --dry-run policies/cost-reliability-v2023
구성 동기화의 동기화 디렉터리에 Kustomize가 사용되는 경우 루트
kustomization.yaml
에policies/cost-reliability-v2023
을 추가합니다. 그렇지 않으면policies/cost-reliability-v2023/kustomization.yaml
파일을 삭제합니다.rm SYNC_ROOT_DIR/policies/cost-reliability-v2023/kustomization.yaml
구성 동기화 저장소에 변경사항을 푸시합니다.
git add SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Adding Cost and Reliability policy audit enforcement' git push
설치 상태를 확인합니다.
watch gcloud beta container fleet config-management status --project PROJECT_ID
SYNCED
상태는 정책 설치를 확인합니다.
정책 위반 보기
정책 제약조건이 감사 모드로 설치되면 정책 컨트롤러 대시보드를 사용하여 UI에서 클러스터 위반을 볼 수 있습니다.
또한 kubectl
을 사용하여 다음 명령어로 클러스터에서 위반 항목을 볼 수 있습니다.
kubectl get constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
위반 항목이 있는 경우 다음을 통해 제약조건당 위반 메시지 목록을 볼 수 있습니다.
kubectl get constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
비용 및 신뢰성 정책 번들 시정 조치 변경
클러스터에서 정책 위반을 검토한 후에는 허용 컨트롤러가 호환되지 않는 리소스가 클러스터에 적용되지 않도록 warn
또는 deny
를 수행할 수 있도록 시행 모드 변경을 고려할 수 있습니다.
kubectl
kubectl을 사용하여 정책의 시정 조치를
warn
로 설정합니다.kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
정책 제약조건 시정 조치가 업데이트되었는지 확인합니다.
kubectl get constraints -l policycontroller.gke.io/bundleName=cost-reliability-v2023
kpt
set-enforcement-action
kpt 함수를 실행하여 정책의 시정 조치를warn
으로 설정합니다.kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
정책 제약조건을 적용합니다.
kpt live apply
구성 동기화
구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.
구성 동기화의 동기화 디렉터리로 변경합니다.
cd SYNC_ROOT_DIR
set-enforcement-action
kpt 함수를 실행하여 정책의 시정 조치를warn
으로 설정합니다.kpt fn eval policies/cost-reliability-v2023 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
구성 동기화 저장소에 변경사항을 푸시합니다.
git add SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Adding Cost and Reliability policy bundle warn enforcement' git push
설치 상태를 확인합니다.
nomos status
클러스터에 설치된 정책과 함께
SYNCED
상태가 표시됩니다.
테스트 정책 시행
다음 명령어를 사용하여 클러스터에 정책을 준수하지 않는 리소스를 만듭니다.
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: wp-non-compliant
labels:
app: wordpress
spec:
containers:
- image: wordpress
name: wordpress
ports:
- containerPort: 80
hostPort: 80
name: wordpress
EOF
다음 예시와 같이 허용 컨트롤러는 이 리소스가 위반하는 정책 위반을 나열하는 경고를 생성해야 합니다.
Warning: [cost-reliability-v2023-pod-resources-best-practices] Container <wordpress> must set <cpu> request. Warning: [cost-reliability-v2023-pod-resources-best-practices] Container <wordpress> must set <memory> request. Warning: [cost-reliability-v2023-required-labels] This app is missing one or more required labels: `environment`, `team`, and `app`. Warning: [cost-reliability-v2023-restrict-repos] container <wordpress> has an invalid image repo <wordpress>, allowed repos are ["gcr.io/gke-release/", "gcr.io/anthos-baremetal-release/", "gcr.io/config-management-release/", "gcr.io/kubebuilder/", "gcr.io/gkeconnect/", "gke.gcr.io/"] pod/wp-non-compliant created
비용 및 신뢰성 정책 번들 삭제
필요한 경우 클러스터에서 비용 및 신뢰성 정책 번들을 삭제할 수 있습니다.
kubectl
kubectl을 사용하여 정책을 삭제합니다.
kubectl delete constraint -l policycontroller.gke.io/bundleName=cost-reliability-v2023
kpt
정책을 삭제합니다.
kpt live destroy
구성 동기화
구성 동기화를 사용하여 클러스터에 정책을 배포하는 운영자는 다음 안내를 따르세요.
구성 동기화 저장소에 변경사항을 푸시합니다.
git rm -r SYNC_ROOT_DIR/policies/cost-reliability-v2023 git commit -m 'Removing Cost and Reliability policies' git push
상태를 확인합니다.
nomos status
클러스터에 리소스가 삭제된 상태로
SYNCED
상태가 표시됩니다.