Gatekeeper로 첫 번째 Kubernetes OPA 정책 작성
13620 단어 kubernetesgitdevopscloud
이제 해당 블로그 게시물의 이론을 알았으니 실습 방법에 대해 이야기해 보겠습니다.
이 블로그 게시물에서는 Gatekeeper 설치 및 Kubernetes 클러스터에 대한 정책 구성 방법에 대해 알아봅니다.
게이트키퍼 설치
먼저 Kubernetes 클러스터에 Gatekeeper를 설치해야 합니다. 이를 위해 Helm을 사용할 수 있습니다.
Gatekeeper 저장소를 추가하십시오.
helm repo add gatekeeper https://open-policy-agent.github.io/gatekeeper/charts
다음으로 설치를 실행합니다.
helm install gatekeeper/gatekeeper --name-template=gatekeeper --namespace gatekeeper-system --create-namespace
아래와 비슷한 출력이 표시되어야 합니다.
NAME: gatekeeper
LAST DEPLOYED: Thu Sep 8 12:36:20 2022
NAMESPACE: gatekeeper-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
구성 구현
Gatekeeper가 설치되면 구성해야 합니다. 세 가지 유형의 구성이 있습니다.
구성
구성은 Gatekeeper가 정책을 만들 수 있는 대상에 대한 정의입니다. 예를 들어 아래의
config.yaml
에서 Gatekeeper는 Pod에 대한 정책만 지정할 수 있고 다른 Kubernetes 리소스는 지정할 수 없다는 것을 알고 있습니다.apiVersion: config.gatekeeper.sh/v1alpha1
kind: Config
metadata:
name: config
namespace: "gatekeeper-system"
spec:
sync:
syncOnly:
- group: ""
version: "v1"
kind: "Pod"
구성은 또한 정책이 Gatekeeper가 설치된 노드뿐만 아니라 클러스터 전반에 걸쳐 설정되도록 합니다.
예를 들어 여러 작업자 노드에서 실행 중인 Pod가 있는 경우 Gatekeeper가 여러 작업자 노드에서 Pod에 액세스할 수 있도록 Config가 필요합니다.
제약 조건 템플릿
제약 조건 템플릿은 환경에 대해 구성하려는 규칙/정책입니다. 템플릿이므로 여러 제약 조건에서 사용할 수 있습니다.
예를 들어, 아무도 컨테이너 이미지의
latest
태그를 사용할 수 없도록 보장하는 Rego 정책이 이 디렉터리의 제약 조건 템플릿에 있습니다.아래 제약 조건 템플릿을 복사하여 YAML 파일에 추가합니다. 완료되면 YAML 파일에서 실행
kubectl apply -f
합니다.apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: blocklatesttag
annotations:
description: Blocks container images from using the latest tag
spec:
crd:
spec:
names:
kind: blocklatesttag # this must be the same name as the name on metadata.name (line 4)
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package blocklatesttag
violation[{"msg": msg, "details": {}}]{
input.review.object.kind == "Pod"
imagename := input.review.object.spec.containers[_].image
endswith(imagename,"latest")
msg := "Images with tag the tag \"latest\" is not allowed"
}
제약 조건 구성
제약 조건 자체는 위에서 만든 템플릿을 가져와 생명을 불어넣는 것입니다. 이를 통해 템플릿을 활용하여 Kubernetes 클러스터 내부에 자체 정책을 생성할 수 있습니다.
아래 제약 조건 템플릿을 복사하여 YAML 파일에 추가합니다. 완료되면 YAML 파일에서 실행
kubectl apply -f
합니다.apiVersion: constraints.gatekeeper.sh/v1beta1
kind: blocklatesttag
metadata:
name: nolatestcontainerimage
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
parameters:
annotation: "no-latest-tag-used"
구성 테스트
구현한 OPA 정책이 작동하는지 확인하려면 아래의 두 Kubernetes 매니페스트를 사용하여 테스트할 수 있습니다.
latest
태그가 있는 매니페스트는 이전 단계에서 latest
태그를 사용할 수 없도록 정책을 만들었기 때문에 작동하지 않습니다. 배포 자체는 배포되지만 포드는 온라인 상태가 되지 않습니다.apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginxdeployment
replicas: 2
template:
metadata:
labels:
app: nginxdeployment
spec:
containers:
- name: nginxdeployment
image: nginx:latest
ports:
- containerPort: 80
아래 매니페스트가 작동하고 컨테이너 이미지 버전 번호가 지정되어 있기 때문에 포드가 온라인 상태가 됩니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginxdeployment
replicas: 2
template:
metadata:
labels:
app: nginxdeployment
spec:
containers:
- name: nginxdeployment
image: nginx:1.23.1
ports:
- containerPort: 80
축하해요! 전체 OPA 통합을 성공적으로 설정했습니다.
Reference
이 문제에 관하여(Gatekeeper로 첫 번째 Kubernetes OPA 정책 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thenjdevopsguy/writing-your-first-kubernetes-opa-policy-with-gatekeeper-145a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)