본문 바로가기

CKS

[CKS] SupplyChain - Admission Controller

Admission Controller

  • Admission Controller는 Kubernetes API 서버로 요청이 객체의 영속화 이전, 인증, 권한 부여 이후 가로챔.
  • 사용 목적
  1. 보안 및 권한 부여: 어드미션 컨트롤러는 인증 및 권한 부여가 된 후에도 요청을 가로채어 추가적인 검사 또는 수정을 수행할 수 있어 보안 및 권한 부여 정책을 강화
  2. 객체 유효성 검사 및 수정: 어드미션 컨트롤러는 객체가 클러스터에 올바르게 추가되기 전에 유효성을 검사하거나, 필요에 따라 해당 객체를 수정
  3. 사용자 지정 동작 및 정책 추가: 어드미션 컨트롤러를 사용하여 특정 동작이나 정책을 추가하거나 변경하여 클러스터 동작을 사용자 지정
  4. 자원 할당 및 관리: 어드미션 컨트롤러는 부가적인 작업을 수행하여 자원 할당이나 다른 리소스와의 상호작용을 관리

 

Admission Controller 사용법

kubeconfig 파일 작성

  • /etc/kubernetes/admission-control/image-policy-webhook.kubeconfig
apiVersion: v1
kind: Config
clusters:
  - name: trivy-k8s-webhook
    cluster:
      certificate-authority: /etc/kubernetes/admission-control/imagepolicywebhook-ca.crt
      server: https://acg.trivy.k8s.webhook:8090/scan
  contexts:
  - name: trivy-k8s-webhook
    context:
      cluster: trivy-k8s-webhook
      user: api-server
  current-context: trivy-k8s-webhook
  preferences: {}
  users:
  - name: api-server
    user:
      client-certificate: /etc/kubernetes/admission-control/api-server-client.crt
      client-key: /etc/kubernetes/admission-control/api-server-client.key

AdmissionConfiguration 파일 작성

  • /etc/kubernetes/admission-control/admission-contol.conf파일
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
  - name: ImagePolicyWebhook
    configuration:
      imagePolicy:
        kubeConfigFile: <path-to-kubeconfig-file>
        allowTTL: 50
        denyTTL: 50
        retryBackoff: 500
        defaultAllow: true   #false일 경우 image pull deny

 

kube-apiserver.yaml 수정

--enable-admission-plugins 값으로 위에서 정의한 plugins.name 값과 일치해야함

apiVersion: v1
kind: Pod
metadata:
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
    - name: kube-apiserver
      image: k8s.gcr.io/kube-apiserver:v1.22.0
      command:
        - kube-apiserver
        - --enable-admission-plugins=ImagePolicyWebhook,NodeRestriction
        - --admission-control-config-file=/etc/kubernetes/admission-control/admission-control.conf
        # Add other necessary flags and configurations below
      volumeMounts:
        - mountPath: /etc/kubernetes/pki
          name: k8s-certs
          readOnly: true
        - mountPath: /etc/kubernetes/admission-control
          name: admission-control
          readOnly: true
  volumes:
    - name: k8s-certs
      hostPath:
        path: /etc/kubernetes/pki
    - name: admission-control
      hostPath:
        path: /etc/kubernetes/admission-control

 

 

 

 

참고페이지

https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#imagepolicywebhook