Kubernetes는 클러스터 내의 자원을 관리하고 제어하기 위해 다양한 어드미션 컨트롤러를 제공합니다. 이들은 클러스터 리소스의 생성, 수정, 삭제 등의 작업을 처리하며, 이를 통해 보안, 정책 준수, 자원 관리 등을 관리할 수 있습니다. 이번 글에서는 Kubernetes의 입장 컨트롤러와 웹훅 서버에 대해 자세히 알아보고, 어떻게 사용자 정의 입장 컨트롤러를 설정할 수 있는지를 다룰 것입니다.
Kubernetes에서 Admission Controller는 API 서버에 들어오는 요청을 처리하고, 이 요청이 클러스터 정책에 부합하는지를 검사하거나 요청을 수정할 수 있는 기능을 수행합니다. 이는 클러스터의 안전성과 보안을 유지하며, 운영 정책을 강제하는 데 중요한 역할을 합니다.
Kubernetes의 Admission 컨트롤러는 크게 검증(Validating)과 변형(Mutating) 두 가지 유형으로 나뉩니다.
Validating Admission 컨트롤러: 요청이 클러스터 정책을 준수하는지를 검사합니다. 예를 들어, 특정 네임스페이스가 존재하는지, 특정 리소스가 유효한지를 확인할 수 있습니다.
Mutating Admission 컨트롤러: 요청을 수정하거나 변형할 수 있습니다. 예를 들어, 사용자가 요청을 생성할 때 자동으로 필수 레이블을 추가하거나, 특정 필드를 기본 값으로 설정할 수 있습니다.
Kubernetes에는 기본적으로 활성화된 몇 가지 Default Admission 컨트롤러가 있습니다. 그 중 하나가 DefaultStorageClass Admission 컨트롤러입니다. 이 컨트롤러는 Persistant Volume Claim (PVC)를 생성하는 요청을 감시하고, 이 요청에 스토리지 클래스가 명시되어 있는지 확인합니다. 만약 명시되어 있지 않다면, 클러스터에서 설정된 기본 스토리지 클래스(DefaultStorageClass를 요청에 추가합니다.
이제 우리가 자신만의 Admission 컨트롤러를 설정하고 싶다면 어떻게 해야 할까요? Kubernetes에서는 MutatingAdmissionWebhook과 ValidatingAdmissionWebhook이라는 두 가지 특별한 웹훅 서버를 제공합니다. 이를 통해 외부에 있는 서버나 Kubernetes 클러스터 내의 다른 서비스로부터 웹훅을 설정할 수 있습니다.
웹훅 서버 개발: 먼저, 웹훅 서버를 개발합니다. 이는 Go, Python 등 다양한 언어로 작성할 수 있으며, Kubernetes가 요구하는 mutate와 validate API를 구현해야 합니다.
서버 호스팅: 개발한 웹훅 서버를 서버로 실행하거나 Kubernetes 클러스터 내에 배포하여 컨테이너화합니다. 이 경우, 서비스(Service)를 설정하여 접근할 수 있도록 해야 합니다.
웹훅 구성 설정: Kubernetes에서는 ValidatingWebhookConfiguration 또는 MutatingWebhookConfiguration 객체를 생성하여 웹훅을 설정합니다. 이 객체는 웹훅 서버의 위치와 API 호출 조건을 정의합니다. 예를 들어, 특정 리소스를 생성할 때만 웹훅을 호출하도록 할 수 있습니다.
이번 글에서는 Kubernetes의 Admission 컨트롤러 웹훅 서버에 대해 알아보았습니다. Admission 컨트롤러는 클러스터 리소스를 관리하고 보호하는 데 중요한 역할을 하며, 사용자 정의 Admission 컨트롤러를 설정하여 클러스터의 동작을 커스터마이즈할 수 있는 방법을 배웠습니다.