[Kubernetes] Kubernetes Mutating Webhook을 이용한 Sidecar 자동 주입 가이드

2025. 2. 14. 19:22·Kubernetes

이번 글에서는 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
'Kubernetes' 카테고리의 다른 글
  • [Kubernetes] 여러 Kubernetes 네임스페이스에서 단일 ALB Ingress 사용하기
  • [Kubernetes] EKS 클러스터에 ReadOnly 및 Admin 권한 설정하기
  • [Kubernetes] pod의 고가용성 구성 (topologySpreadConstraints)
dml113
dml113
dml113의 AWS 이야기
  • dml113
    Cloud
    dml113
  • 전체
    오늘
    어제
    • 분류 전체보기 (34)
      • Project (0)
      • Kubernetes (17)
        • CNCF (12)
        • TroubleShooting (1)
      • AWS Service (9)
      • Linux (3)
      • Github (2)
      • Production Traffic (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dml113
[Kubernetes] Kubernetes Mutating Webhook을 이용한 Sidecar 자동 주입 가이드
상단으로

티스토리툴바