반응형
    
    
    
  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 | 
