반응형
1. 개념
- Admission Control 단계에서 사용하는 정책 강제 도구
- 오픈소스 정책 적용 엔진으로서 K8s에서만 사용할 수 있는 것은 아님
- OPA 정책을 K8s가 해석할 수 있도록 CRDs로 정의(ConstraintTemplate)하고, 실제 정책 실행 대상 및 조건은 Constraint에 정의
2. OPA
- 정책 예시 - 모든 파드 생성 차단
# ConstraintTemplate
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8salwaysdeny
spec:
crd:
spec:
names:
kind: K8sAlwaysDeny
validation:
# Schema for the `parameters` field
openAPIV3Schema:
properties:
message:
type: string
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8salwaysdeny
violation[{"msg": msg}] {
1 > 0
msg := input.parameters.message
}
---
# Constraint
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sAlwaysDeny
metadata:
name: pod-always-deny
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
parameters:
message: "ACCESS DENIED!"
- 정책 예시 - default 네임스페이스 사용 차단
# ConstraintTemplate
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8srequirednamespace
spec:
crd:
spec:
names:
kind: K8sRequiredNamespace
listKind: K8sRequiredNamespaceList
plural: k8srequirednamespace
singular: k8srequirednamespace
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8srequirednamespace
violation[{"msg": msg}] {
namespace := input.review.object.metadata.namespace
namespace == "default"
msg := "you must provide a namespace other than default"
}
---
# Constraint
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredNamespace
metadata:
name: namespace-policy
spec:
match:
kinds:
- apiGroups: ["batch", "extensions", "apps", ""]
kinds: ["Deployment", "Pod", "CronJob", "Job", "StatefulSet", "DaemonSet", "ConfigMap", "Service"]
3. 참고
반응형
'Kubernetes' 카테고리의 다른 글
Kubernetes private docker registry 접근 (0) | 2024.03.09 |
---|---|
Kubernetes 안전한 Dockerfiles 작성 (0) | 2024.03.09 |
Kubernetes SecurityContext 개념 및 설정2 (0) | 2024.03.06 |
Kubernetes Container Runtime Sandbox 개념 (0) | 2024.03.06 |
Kubernetes ETCD 암호화 개념 및 실습 (0) | 2024.03.05 |