본문 바로가기

kubernetes

tumblr kubernetes sidecar injector deploy !

지난 시간에 sidecar에 대해서 확인하였고, minikube를 이용하여 local에 k8s cluster를 구축하였다.

https://almostgeneral.tistory.com/2

 

kubernetes sidecar injector란?

pod가 생성될 때, 특정 동작을 하는 sidecar를 injection 하도록 동작하는 무엇인가를 만들어 보려 한다. 그러기 위해서 기초부터 많은 공부가 필요한데,, 우선 핵심기능이 되는 k8s admission controller부터

almostgeneral.tistory.com

https://almostgeneral.tistory.com/7

 

mac에서 docker-machine + minikube를 활용해 k8s cluster 만들기 !

이전에 minikube+katacoda를 이용한 k8s cluster만들기 라는 게시글을 작성했었는데 (https://almostgeneral.tistory.com/1) minikube+katacoda 이용해서 kubernetes 환경 구성 집에서 kubernetes cluster를 만들..

almostgeneral.tistory.com

이번에는 이어서 k8s sidecar injector opensource의 여러 구성요소들을 local 환경에 deploy해보는 것이 목표다 ! 
opensource 후보들이 여럿 있었지만, 나는 그냥 tumblr로 선택했다.(뭔가 github이 가장 활발한 것 같았다;)
https://github.com/tumblr/k8s-sidecar-injector

진짜시작!

가장 우선 원하는 경로에서 아래 github project를 clone하자 ! (나는 ~/test/ 에서 시작했다 !)

$ git clone https://github.com/tumblr/k8s-sidecar-injector.git
Cloning into 'k8s-sidecar-injector'...
remote: Enumerating objects: 961, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 961 (delta 0), reused 1 (delta 0), pack-reused 957
Receiving objects: 100% (961/961), 226.72 KiB | 5.27 MiB/s, done.
Resolving deltas: 100% (425/425), done.

$ ls
k8s-sidecar-injector

자 이제 절반 성공 ! (..?)
이제 k8s-sidecar-injector directory로 이동해서 먼저 MutatingWebhook HTTP 요청 받을 server(deployment)에서 사용할 .cert 파일을 생성하자.
(아래 명령어 수행시 INPUT 필요한 내용은 모두 Enter로 넘어가도 무관하다)

$ cd kubernetes-sidecar-injector
$ DEPLOYMENT=dc01 CLUSTER=myminikube ./examples/tls/new-cluster-injector-cert.rb
Creating ./dc01/MYMINIKUBE
Generating certs for dc01-MYMINIKUBE
Generating a new CA key...
Generating RSA private key, 4096 bit long modulus
............................++
.
.
All done!

이제 생성한 .crt 파일 내용은 mutating webhook HTTP 요청시 사용할 수 있도록 MutatingWebhookConfiguration 파일에 추가하고, 해당 TLS를 사용할 server인 deployment가 사용하는 secrets을 생성한다.

$ CABUNDLE_BASE64="$(cat examples/tls/$DEPLOYMENT/$CLUSTER/ca.crt |base64|tr -d '\n')"
$ sed -i '' -e "s|__CA_BUNDLE_BASE64__|$CABUNDLE_BASE64|g" examples/kubernetes/mutating-webhook-configuration.yaml
$ kubectl create secret generic k8s-sidecar-injector --from-file=examples/tls/${DEPLOYMENT}/${CLUSTER}/sidecar-injector.crt --from-file=examples/tls/${DEPLOYMENT}/${CLUSTER}/sidecar-injector.key --namespace=kube-system
secret/k8s-sidecar-injector created

그리고 나서 아래와 같이 example/kubernetes/deployment.yaml 파일을 수정하고 namespace.yaml file은 삭제한다.
(첫째줄 수정하고 selector만 추가하면 된다.)

$ rm examples/kubernetes/namespace.yaml
$ vi examples/kubernetes/deployment.yaml
 apiVersion: apps/v1 ## <-- apps/v1으로 수정
 kind: Deployment
 metadata:
   name: "k8s-sidecar-injector-prod"
   namespace: "kube-system"
   labels:
     k8s-app: "k8s-sidecar-injector"
     track: "prod"
  spec:
   replicas: 2
   selector: 							### selector부터 아래 2줄 추가
      matchLabels:						### 추가
        k8s-app: "k8s-sidecar-injector" ### 추가
.
.
.

이제 ./example/kuberntes directory안의 .yaml 파일을 apply한다.

$ kubectl apply -f examples/kubernetes/
clusterrole.rbac.authorization.k8s.io/k8s-sidecar-injector created
clusterrolebinding.rbac.authorization.k8s.io/k8s-sidecar-injector created
.
.
.
deployment.apps/k8s-sidecar-injector-prod created

 

확인

pod 생성 확인

$ kubectl get pod -o wide -n kube-system | grep sidecar
k8s-sidecar-injector-prod-bdb9c57bb-hscwr   1/1     Running   0          38m   172.17.0.4     minikube   <none>           <none>
k8s-sidecar-injector-prod-bdb9c57bb-z7x7z   1/1     Running   0          38m   172.17.0.5     minikube   <none>           <none>

mutatingwebhookconfigurations 확인

$ kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io
NAME                              WEBHOOKS   AGE
tumblr-sidecar-injector-webhook   1          44m

deployed pod의 Logs 확인
(뭔가 요청이 계속 들어오고 있는듯 하다..!?)

$ kubectl logs --tail=60 -n kube-system -l k8s-app=k8s-sidecar-injector
172.17.0.1 - - [24/Jul/2021:16:52:00 +0000] "GET /health HTTP/2.0" 200 12 "" "kube-probe/1.21"
172.17.0.1 - - [24/Jul/2021:16:52:10 +0000] "GET /health HTTP/2.0" 200 12 "" "kube-probe/1.21"
172.17.0.1 - - [24/Jul/2021:16:52:20 +0000] "GET /health HTTP/2.0" 200 12 "" "kube-probe/1.21"

궁금증만 유발한 포스팅이었다..! 다음 시간에 하나하나 파헤쳐보자

반응형