Kubernetes 클러스터 운영 시, kubectl
유틸리티를 사용해 다양한 작업을 수행하며, 파드 생성 등의 요청을 API 서버로 전달하는 과정을 이미 경험해 보셨을 것입니다. 이 글에서는 어드미션 컨트롤러(admission controller)에 대해 알아보고, 이를 활용하여 클러스터 보안을 강화하는 방법을 설명합니다.
파드를 생성하는 요청을 예로 들어보겠습니다. 요청이 API 서버에 도달하면 다음과 같은 과정을 거치게 됩니다:
이 과정에서 역할 기반 접근 제어를 통해 사용자의 권한을 세밀하게 제어할 수 있지만, 이는 API 수준에서의 접근 권한에 국한됩니다. 예를 들어, 파드 생성 요청 시 이미지 소스를 특정 레지스트리로 제한하거나, 특정 메타데이터를 포함하도록 강제하는 등의 세부적인 정책을 적용하기 위해서는 어드미션 컨트롤러를 사용해야 합니다.
어드미션 컨트롤러는 Kubernetes 클러스터의 보안을 강화하고, 더 나은 정책을 구현할 수 있도록 돕는 도구입니다. 요청이 API 서버에 도달하여 인증 및 인가를 통과한 후, 실제로 etcd 데이터베이스에 기록되기 전에 어드미션 컨트롤러가 요청을 검토하고 필요한 조치를 수행합니다.
Kubernetes에는 여러 가지 내장 어드미션 컨트롤러가 있습니다. 몇 가지 예를 들어보겠습니다:
이 외에도 다양한 어드미션 컨트롤러가 있으며, 이를 통해 클러스터 보안을 강화할 수 있습니다.
NamespaceExists
어드미션 컨트롤러를 예로 들어 작동 원리를 살펴보겠습니다. blue라는 네임스페이스에서 파드를 생성하려고 하지만 해당 네임스페이스가 존재하지 않는다고 가정해봅시다. 이 경우, 요청이 인증되고 인가된 다음 NamespaceExists
어드미션 컨트롤러를 거치게 되며, 네임스페이스가 존재하지 않는 경우 요청이 거부됩니다. 이처럼 어드미션 컨트롤러는 요청을 검토하고 필요에 따라 승인 또는 거부합니다.
기본적으로 활성화되지 않은 어드미션 컨트롤러 중 하나는 NamespaceAutoProvision
입니다. 이 컨트롤러는 네임스페이스가 존재하지 않는 경우 자동으로 네임스페이스를 생성합니다. 이를 활성화하려면 kube-apiserver 서비스의 enable-admission-plugins
플래그를 업데이트해야 합니다.
어드미션 컨트롤러를 활성화하려면 kube-apiserver 설정을 업데이트해야 합니다. 다음 명령을 사용하여 기본적으로 활성화된 어드미션 컨트롤러 목록을 확인할 수 있습니다:
kubectl exec kube-apiserver-controlplane -n kube-system -- kube-apiserver -h | grep enable-admission-plugins
kubeadm 기반 설정에서 어드미션 컨트롤러를 추가하려면 kube-apiserver 매니페스트 파일을 업데이트해야 합니다. 설정을 변경한 후 API 서버를 재시작하면 새로운 어드미션 컨트롤러가 활성화됩니다.
NamespaceAutoProvision
활성화NamespaceAutoProvision
어드미션 컨트롤러를 활성화하는 예를 살펴보겠습니다:
--enable-admission-plugins
플래그에 NamespaceAutoProvision
을 추가합니다.이제 존재하지 않는 네임스페이스에서 파드를 생성하려고 할 때, NamespaceAutoProvision
어드미션 컨트롤러가 자동으로 네임스페이스를 생성하여 요청을 처리합니다.
어드미션 컨트롤러는 Kubernetes 클러스터의 보안을 강화하고, 세부적인 정책을 구현하는 데 중요한 역할을 합니다. 이를 통해 API 수준에서의 접근 제어를 넘어서, 더 복잡하고 세밀한 보안 정책을 적용할 수 있습니다.