이번 글에서는 Kubernetes Mutating Webhook을 사용하여 Sidecar를 자동으로 주입하는 방법에 대해 알아봅니다. 이를 통해 각 Pod에 Sidecar 컨테이너를 수동으로 추가하는 번거로움을 덜고, 일관된 환경을 유지할 수 있습니다.
1. Prerequisites
시작하기 전에 다음 도구가 설치되어 있어야 합니다.
- git
- kubectl
- make
- Docker
2. 프로젝트 복제 및 설정
먼저, 다음 명령어를 사용하여 필요한 Kubernetes Mutating Webhook 튜토리얼 저장소를 복제합니다.\
git clone https://github.com/morvencao/kube-mutating-webhook-tutorial.git
cd kube-mutating-webhook-tutorial
3. Sidecar Injector 이미지 빌드 및 ECR Push
Sidecar Injector 이미지를 사용하기 위해 AWS ECR (Elastic Container Registry)을 생성하고, 이미지를 빌드하여 푸시합니다. IMAGE 변수를 ECR 리포지토리 URL 및 원하는 태그로 설정해야 합니다.
make docker-build docker-push IMAGE=<ECR REPO URL>:<IMAGE TAG>
# ex) make docker-build docker-push IMAGE=950274644703.dkr.ecr.ap-northeast-2.amazonaws.com/webhook:latest
4. ConfigMap 수정
Kubernetes에 배포하기 전에 Sidecar로 사용할 이미지로 설정하려면 deploy/configmap.yaml 파일을 수정합니다.
# ~/kube-mutating-webhook-tutorial/deploy/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: sidecar-injector
labels:
app: sidecar-injector
data:
sidecarconfig.yaml: |
containers:
- name: sidecar-curl
image: curlimages/curl # 원하는 이미지 사용
imagePullPolicy: IfNotPresent
args:
- --version
command:
- sleep
- infinity
5. Kustomization 수정
deploy/kustomization.yaml 파일에서 불필요한 nginx-configmap 리소스를 제거하고, 사용할 이미지를 지정합니다.
# ~/kube-mutating-webhook-tutorial/deploy/kustomization.yaml
namespace: sidecar-injector
resources:
- namespace.yaml
- clusterrole.yaml
- clusterrolebinding.yaml
- deployment.yaml
- service.yaml
- serviceaccount.yaml
- configmap.yaml
images:
- name: sidecar-injector
newName: <AccountID>.dkr.ecr.ap-northeast-2.amazonaws.com/webhook
newTag: latest
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
6. Kubernetes 배포
모든 설정이 완료되면, 다음 명령어를 사용하여 Kubernetes에 배포합니다.
make deploy IMAGE=<ECR REPO URL>:<IMAGE TAG>
# make deploy IMAGE=12345678.dkr.ecr.ap-northeast-2.amazonaws.com/webhook:latest
7. Namespace 생성 및 Label 추가
Sidecar Injection을 활성화할 Namespace를 생성하고, sidecar-injection=enabled 레이블을 추가합니다.
kubectl create ns test-ns
kubectl label namespace test-ns sidecar-injection=enabled
레이블이 제대로 추가되었는지 확인합니다.
kubectl get namespace -L sidecar-injection
# output:
NAME STATUS AGE SIDECAR-INJECTION
default Active 26m
test-ns Active 13s enabled
kube-public Active 26m
kube-system Active 26m
sidecar-injector Active 17m
8. 테스트 Pod 배포
테스트를 위해 test-ns Namespace에 Pod를 배포합니다.
kubectl -n test-ns run alpine \
--image=alpine \
--restart=Never \
--command -- sleep infinity
9. 배포 확인
다음 명령어를 사용하여 Pod가 정상적으로 실행 중인지 확인합니다.
kubectl -n test-ns get pod
# output:
NAME READY STATUS RESTARTS AGE
alpine 2/2 Running 0 10s
READY 열이 2/2로 표시되면 Sidecar가 성공적으로 주입된 것입니다.
마무리
이 가이드에서는 Kubernetes Mutating Webhook을 사용하여 Sidecar를 자동으로 주입하는 방법을 설명했습니다. 이를 통해 애플리케이션 개발 및 배포 프로세스를 간소화하고, 일관된 환경을 유지할 수 있습니다.
'Kubernetes' 카테고리의 다른 글
| [Kubernetes] 여러 Kubernetes 네임스페이스에서 단일 ALB Ingress 사용하기 (0) | 2025.02.16 |
|---|---|
| [Kubernetes] EKS 클러스터에 ReadOnly 및 Admin 권한 설정하기 (0) | 2025.02.14 |
| [Kubernetes] pod의 고가용성 구성 (topologySpreadConstraints) (0) | 2025.01.19 |