[K8s][Security] Mutating, Validating
이전에 Admission Controller에 대해 포스팅 한 적이 있다.
Admission 컨트롤러는 요청이 인증(Athentic)되고 승인된 후에 Kubernetes API 서버에 대한 요청을 가로채어,
객체를 변형(Mutating)하고 검증(Validating)한다.
Admission Control 단계
Admission Control 프로세스는 두 단계로 진행된다.
첫 번째 단계에서 Controller를 변형하여 실행하고, 두번째 단계에선 검증하여 실행한다.
어느 단계에서든 컨트롤러가 요청을 거부하면 전체 요청이 즉시 거부되고, 오류가 최종 사용자에게 반환된다.
Mutating Webhook
클러스터에 들어오는 요청을 수정할 수 있다. 즉, 리소스가 생성되거나 업데이트 될 때, 요청을 가로채서 해당 리소스의 내용을 변경할 수 있다.
예를 들어, 특정 네임스페이스에서 생성되는 모든 파드에 자동으로 label을 추가하고 싶다고 가정해보자.
- Webhook 서버
- 파드 생성 요청을 받아서 metadata.labels에 {"example-label":"true"}를 추가한다.
- Webhook 설정
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
name: example-mutating-webhook
webhooks:
- name: example-mutating-webhook.k8s.io
clientConfig:
service:
name: example-webhook-service
namespace: default
path: "/mutate"
caBundle: <CA_BUNDLE>
rules:
- operations: ["CREATE"]
apiGroups: [""]
apiVersions: ["v1"]
resources: ["pods"]
admissionReviewVersions: ["v1"]
Validating Webhook
해당 웹훅은 요청을 수정하지 않고, 요청이 유효한지를 검사한다. 요청이 특정 조건을 만족하지 않으면 거부할 수 있다.
예를 들어, 모든 파드가 특정 환경 변수를 포함해야 한다고 생각해보자.
- Webhook 서버
- 파드 생성 요청을 받아서 spec.containers에 env 필드가 포함되어 있는지를 검사한다.
- Webhook 설정
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: example-validating-webhook
webhooks:
- name: example-validating-webhook.k8s.io
clientConfig:
service:
name: example-webhook-service
namespace: default
path: "/validate"
caBundle: <CA_BUNDLE>
rules:
- operations: ["CREATE"]
apiGroups: [""]
apiVersions: ["v1"]
resources: ["pods"]
admissionReviewVersions: ["v1"]
Validating admission까지 전부 통과한 request는 etcd로 요청이 저장되어, 이후 쿠버네티스 controller에 의해 후속 작업이 진행된다.
참고
https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/
https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/
'🐳 Container > K8S' 카테고리의 다른 글
[K8s] 쿠버네티스 컴포넌트 정리 (4) | 2024.09.03 |
---|---|
[K8s][CKS] Admission Controller (0) | 2024.06.19 |
[K8s] SecurityContext (1) | 2024.06.04 |
[K8s][CKS] 감사(auditing) (0) | 2024.06.03 |
[K8s][CKS] 컨테이너의 불변성 보장 (0) | 2024.05.24 |