지난 시간에 sidecar에 대해서 확인하였고, minikube를 이용하여 local에 k8s cluster를 구축하였다.
https://almostgeneral.tistory.com/2
https://almostgeneral.tistory.com/7
이번에는 이어서 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"
궁금증만 유발한 포스팅이었다..! 다음 시간에 하나하나 파헤쳐보자
'kubernetes' 카테고리의 다른 글
k9s: Kubernetes 환경을 위한 편리한 관리 도구 (0) | 2022.12.02 |
---|---|
kubernetes 의 runtime이 containerd 일 때 nsenter로 container 접속 (tcpdump) (0) | 2022.10.26 |
mac에서 docker-machine + minikube를 활용해 k8s cluster 만들기 ! (0) | 2021.07.20 |
kubernetes sidecar injector란? (0) | 2021.07.14 |
minikube+katacoda 이용해서 kubernetes 환경 구성 (0) | 2021.07.14 |