[마이크로서비스 취약성 최소화] Kubernetes 어드미션 컨트롤러: 강화된 보안을 위한 필수 도구

IMKUNYOUNG·2024년 6월 21일
0

CKS

목록 보기
45/70

Kubernetes 클러스터 운영 시, kubectl 유틸리티를 사용해 다양한 작업을 수행하며, 파드 생성 등의 요청을 API 서버로 전달하는 과정을 이미 경험해 보셨을 것입니다. 이 글에서는 어드미션 컨트롤러(admission controller)에 대해 알아보고, 이를 활용하여 클러스터 보안을 강화하는 방법을 설명합니다.

API 서버로의 요청 흐름

파드를 생성하는 요청을 예로 들어보겠습니다. 요청이 API 서버에 도달하면 다음과 같은 과정을 거치게 됩니다:

  1. 인증(Authentication): 요청을 보낸 사용자를 식별하고 유효성을 확인합니다. 이는 보통 인증서를 통해 이루어지며, kubeconfig 파일에 구성된 인증서를 사용합니다.
  2. 인가(Authorization): 사용자가 요청한 작업을 수행할 권한이 있는지 확인합니다. 역할 기반 접근 제어(Role-Based Access Control, RBAC)를 통해 특정 역할(role)을 할당받은 사용자가 파드를 생성, 나열, 삭제할 수 있도록 권한을 설정합니다.

이 과정에서 역할 기반 접근 제어를 통해 사용자의 권한을 세밀하게 제어할 수 있지만, 이는 API 수준에서의 접근 권한에 국한됩니다. 예를 들어, 파드 생성 요청 시 이미지 소스를 특정 레지스트리로 제한하거나, 특정 메타데이터를 포함하도록 강제하는 등의 세부적인 정책을 적용하기 위해서는 어드미션 컨트롤러를 사용해야 합니다.

어드미션 컨트롤러란?

어드미션 컨트롤러는 Kubernetes 클러스터의 보안을 강화하고, 더 나은 정책을 구현할 수 있도록 돕는 도구입니다. 요청이 API 서버에 도달하여 인증 및 인가를 통과한 후, 실제로 etcd 데이터베이스에 기록되기 전에 어드미션 컨트롤러가 요청을 검토하고 필요한 조치를 수행합니다.

주요 어드미션 컨트롤러

Kubernetes에는 여러 가지 내장 어드미션 컨트롤러가 있습니다. 몇 가지 예를 들어보겠습니다:

  • AlwaysPullImages: 파드가 생성될 때마다 이미지를 항상 풀링하도록 보장합니다.
  • DefaultStorageClass: PVC 생성 시 기본 스토리지 클래스를 자동으로 추가합니다(지정되지 않은 경우).
  • EventRateLimit: API 서버가 처리할 수 있는 요청 수를 제한하여 과부하를 방지합니다.
  • NamespaceExists: 존재하지 않는 네임스페이스에 대한 요청을 거부합니다.

이 외에도 다양한 어드미션 컨트롤러가 있으며, 이를 통해 클러스터 보안을 강화할 수 있습니다.

어드미션 컨트롤러의 작동 원리

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 어드미션 컨트롤러를 활성화하는 예를 살펴보겠습니다:

  1. kube-apiserver 매니페스트 파일을 엽니다.
  2. --enable-admission-plugins 플래그에 NamespaceAutoProvision을 추가합니다.
  3. 설정을 저장하고 API 서버를 재시작합니다.

이제 존재하지 않는 네임스페이스에서 파드를 생성하려고 할 때, NamespaceAutoProvision 어드미션 컨트롤러가 자동으로 네임스페이스를 생성하여 요청을 처리합니다.

마무리

어드미션 컨트롤러는 Kubernetes 클러스터의 보안을 강화하고, 세부적인 정책을 구현하는 데 중요한 역할을 합니다. 이를 통해 API 수준에서의 접근 제어를 넘어서, 더 복잡하고 세밀한 보안 정책을 적용할 수 있습니다.

0개의 댓글