pod가 생성될 때, 특정 동작을 하는 sidecar를 injection 하도록 동작하는 무엇인가를 만들어 보려 한다.
그러기 위해서 기초부터 많은 공부가 필요한데,, 우선 핵심기능이 되는 k8s admission controller부터 확인해봐야겠다.
kubernetes admission controller? 그게 뭐야?
kubernetes 공식 블로그에서는 아래와 같이 설명한다.
An admission controller is a piece of code that intercepts requests to the Kubernetes API server prior to persistence of the object, but after the request is authenticated and authorized. |
음,, 대충,, k8s API로 가는 request 인터셉트! 해서 무언가를 한다는 것 같다.
controller는 어떠한 기능들의 집합으로 이루어져 있는데, cluster 관리자만 다룰 수 있다고 한다... 사실 자세히는 잘 모르겠는데 내가 관심갖는 내용이 바로 그 다음에 나온다.
there are two special controllers: MutatingAdmissionWebhook and ValidatingAdmissionWebhook. These execute the mutating and validating (respectively) admission control webhooks which are configured in the API. |
MutatingAdmissionWebhook과 ValidatingAdmissionWebhook, 이렇게 두 가지 controller가 있다고한다.
Admission Webhook은 뭐야..!?
admission webhook은 admission request를 수신하고 이를 원하는 형태로 처리하는 HTTP 콜백이다.
쉽게 말해 k8s API로 가는 request를 가로채서 무언가 원하는 작업을 한 다음 응답을 되돌려 주는 것이다.
MutatingAdmissionWebhook , ValidatingAdmissionWebhook 두 가지의 차이는 호출되는 시기라고 생각할 수 있는데, MutatingAdmissionWebhook은 API 호출 초기에 먼저 호출되어 사용자가 지정한 특정값으로 modify 할 수 있다. 반면 ValidatingAdmissionWebhook은 API 호출 마지막에 호출되어 권한, 제약 등 확인을 통해 API를 통해 하려고 하는 작업(CREATE, MODIFY,...)이 타당한지(?) 판단한다.
아래는 k8s 공식 문서에서 제공하는 admission webhook 관련 flow 그림이다.
(https://kubernetes.io/blog/2019/03/21/a-guide-to-kubernetes-admission-controllers/)
이러한 기능을 활용해서 pod가 생성될 때 특정 bind 하는 port를 변경한다던지, pod에 원하는 기능을 하는 sidecar를 붙일 수 있을 것이다..!
이제 k8s의 어떤 기능을 활용해야하는지 알게 되었으니, github에 있는expedia sidecar injector를 분석하고 활용해서 나만의 sidecar injector를 만들어보자 !
( expedia sidecar injector - https://github.com/ExpediaDotCom/kubernetes-sidecar-injector)
'kubernetes' 카테고리의 다른 글
k9s: Kubernetes 환경을 위한 편리한 관리 도구 (0) | 2022.12.02 |
---|---|
kubernetes 의 runtime이 containerd 일 때 nsenter로 container 접속 (tcpdump) (0) | 2022.10.26 |
tumblr kubernetes sidecar injector deploy ! (0) | 2021.07.25 |
mac에서 docker-machine + minikube를 활용해 k8s cluster 만들기 ! (0) | 2021.07.20 |
minikube+katacoda 이용해서 kubernetes 환경 구성 (0) | 2021.07.14 |