반응형

들어가는 글

App을 개발해서 Container image로 build하여 Kubernetes cluster에 배포하다보면, 어느 순간 비슷하면서 반복적인 YAML 파일을 작성하는 나를 보게된다.

좀더 구체적으로 얘기하자면, HelloWorld라는 App을 구성하는 Pod가 hw-frontend, hw-backend, hw-db 등 3개의 Pod로 구성되어 있다면 Kubernetes cluster에 HelloWorld App을 배포하기 위해서는 이 3개의 Pod를 모두 배포할 수 있는 deployment.yaml을 작성해야 한다.

아마 Kubernetes 운영 경험이 있는 개발자라면 Helm chart로 반복적이거나 뻔한 YAML code를 template 파일로 만들고, 변경되어야 할 부분만 values.yaml로 작성할 것이다.

그런데 이 helm chart도 일정 부분의 반복적이고 루틴한 작업이 계속 만들어지게 된다.

뻔하면서 반복되는 비슷하지만 약간씩 다른 설정 작업을 기계가 대신 해주면 좋겠다는 소망이 생긴다.

(아마 Kubernetes를 1년 정도 사용해서 App을 반복 배포하다보면, 이런 느낌적인 느낌이 생길 듯 ^^)

 

그래서 이런 저런 고민을 해결할 방법을 찾다가 'Mutating Admission Controller + WebHook'이라는 Kubernetes에 내장된 기능을 발견했다.

 

서론이 길어졌다.

이제 본론으로 들어가서, Kubernetes가 제공하는 Admission controller가 무엇이고 일반 개발자가 이 기능을 어떻게 확장할 수 있는지 설명해보겠다.

 

Mutating WebHook 사용 사례 (Use Case)

Admisson controller를 통한 Mutating Webhook 기능을 개발하는 사례는 많이 다양할 것이다.

내가 Mutating Webhook 서버를 개발한 Case를 나열해보면,

  • 특정 namespace에 기동하는 모든 pod의 /etc/hosts에 'ip address + domain name'을 Patch하기
    더 구체적으로 설명하면, Pod의 Deployment를 위한 원본 YAML(Manifest)에 일괄적으로 'hostAliases' item을 추가하는 기능이 필요했고, 이 기능을 Mutating Webhook 서버에 개발했다.
  • 사내에서 사용하는 운영 관리용 Container(EMS, O&M Container)를 모든 Pod에 Inject하기
    더 구체적으로 설명하면, Pod의 Deployment를 위한 원본 YAML(Manifest)에 일괄적으로 Sidecar Container를 Patch하는 기능을 수행하도록 Mutating Webhook 서버를 개발했다.
  • 특정 조건(namespace, labels)을 만족하는 Pod가 있는 검사하여, 해당 Pod에만 /my_volume/pkg 같은 storage를 Mount하도록 원본 Menifest를 Patch하기

 

Admission Controller와 Mutating WebHook의 개념 및 동작 원리

 

## TODO:  이 부분은 작성 중... (언제 그림을 그리고 글을 작성하나 ~~~, 2021년이 끝나기 전에 작성을 마무리해야 할텐데 ㅠㅠ)

 

 

 

Practical Practice (실전 예제)

실제 동작하는 그럴 듯한 Mutating WebHook Server의 code를 작성해보자.

Mutating WebHook Server를 구현하기 위한 Programming language는 아무거나 사용해도 상관없지만, 나는 Golang이 편해서 Golang을 예제 코드를 작성했다.

처음부터 모든 코드를 작성할 필요가 없다. 아래 stackrox 라는 github repository에 완성도가 높고, 간단하게 만들어 놓은 예제 코드가 있니, 이 Example Code를 git clone해서 사용하면 된다.

https://github.com/stackrox/admission-controller-webhook-demo

 

GitHub - stackrox/admission-controller-webhook-demo: Kubernetes admission controller webhook example

Kubernetes admission controller webhook example. Contribute to stackrox/admission-controller-webhook-demo development by creating an account on GitHub.

github.com

$  git clone https://github.com/stackrox/admission-controller-webhook-demo.git

admission controller webhook server 예제는 README.md가 잘 되어 있고,

deploy.sh 스크립트만 돌려도 완벽하게 Example 시나리오가 동작하기 때문에 쉽게 배울 수 있다.

 

Mutating WebHook Server를 Pod 형태로 배포하기 위한 작업

Helm Chart 작성하기

WebHook 조건 설정하기

 

 

Reference

https://github.com/stackrox/admission-controller-webhook-demo

 

GitHub - stackrox/admission-controller-webhook-demo: Kubernetes admission controller webhook example

Kubernetes admission controller webhook example. Contribute to stackrox/admission-controller-webhook-demo development by creating an account on GitHub.

github.com

 

+ Recent posts