- Certified Solutions Architect
- K8S
- Kubernetes
- CKA
- cloudnative
- Lambda
- nodeaffinity
- DKIM
- Java
- aws ses
- containerorchestration
- dMarc
- JVM
- kubernetesscheduling
- aws
- SAA-CO2
- kubernetes 클러스터 보안
- go
- gochannel
- EKS
- SAA-CO3
- kubernetes admission controller
- DevOps
- kubernetesadmin
- kubernetesstudyguide
- 메일 인증 프로토콜
- SMTP
- Fargate
- SPF
- Today
- Total
DevOps Tasks
Kubernetes Admission Controller로 Fargate에 Datadog Agent Sidecar 자동 주입하기 본문
Kubernetes Admission Controller로 Fargate에 Datadog Agent Sidecar 자동 주입하기
데밥스 2025. 2. 9. 21:091. 개요
Kubernetes에서 `Admission Controller`는 API 요청을 가로채어 특정 조건을 만족하는 경우 리소스를 변경하거나 승인/거부하는 역할을 합니다.
이를 활용하면 `EKS Fargate`에서 `Pod`마다 Sidecar를 개별적으로 정의하지 않아도 자동으로 추가할 수 있습니다.
이 글에서는 `Mutating Webhook`을 이용하여 `Fargate Pod`에 `Datadog Sidecar`를 자동으로 추가하는 방법을 설명합니다.
[Kubernetes] Admission Controller 란?
Admission Controller란?`Admission Controller`는 Kubernetes 클러스터의 요청 흐름을 제어하고, 보안을 강화하며 정책을 시행하는 중요한 도구입니다.이 컨트롤러는 API 요청이 클러스터 리소스에 적용되기 전
rldnjsdlsi.tistory.com
2. 목표: Fargate에 자동으로 Sidecar 주입하기
`EKS Fargate` 환경에서는 기본적으로 `Pod`마다 Sidecar를 직접 정의해야 합니다.
하지만 `Admission Controller`를 활용하면 특정 `Label`을 가진 `Pod`에만 자동으로 Sidecar를 추가할 수 있습니다.
즉, 아래 두 개의 `Label`을 가진 `Pod`이면 자동으로 Datadog Sidecar가 주입됩니다.
podLabels:
datadog : "true"
fargate : "true"
이를 통해 모든 `Fargate Pod`에 Sidecar를 추가하지 않고, 필요한 경우에만 동적으로 주입할 수 있습니다.
3. Fargate에서 Datadog Sidecar 자동 주입 설정
먼저, `Cluster Agent`의 `agentSidecarInjection` 기능을 활성화합니다.
`helm datadog values.yaml`
clusterAgent:
enabled: true
admissionController:
enabled: true
mutateUnlabelled: false
agentSidecarInjection:
enabled: true
provider: fargate
selectors:
- objectSelector:
matchLabels:
datadog : "true"
fargate : "true"
profiles:
- env:
- name: DD_CLUSTER_NAME
value: "<CLUSTER_NAME>"
- name: DD_EKS_FARGATE
value: "true"
- name: DD_ORCHESTRATOR_EXPLORER_ENABLED
value: "true"
- name: DD_CLUSTER_AGENT_ENABLED
value: "true"
- name: DD_CLUSTER_AGENT_URL
value: "https://<CLUSTER_AGENT_SERVICE_NAME>.<CLUSTER_AGENT_SERVICE_NAMESPACE>.svc.cluster.local:5005"
- name: DD_CLUSTER_AGENT_AUTH_TOKEN
valueFrom:
secretKeyRef:
name: datadog-agent-cluster-agent
key: token
- name: DD_API_KEY
valueFrom:
secretKeyRef:
name: datadog-api-key-secret
key: api-key
resources:
requests:
cpu: 128m
memory: 256Mi
이제 해당 `Label`이 추가된 Pod이 생성되면 자동으로 Datadog Sidecar가 추가됩니다.
`Admission Controller` 는 이미 생성된 파드를 변경하지 않기 때문에 Injection 설정 후 `Pod`를 재시작해야 합니다.
4. RBAC 설정 추가 (Service Account 권한 문제 해결)
`Fargate Pod`들은 각각의 `Service Account`를 사용합니다.
하지만 Kubernetes에서는 하나의 `Pod`에 하나의 `Service Account`만 매핑되므로, Sidecar가 추가되었을 때 Datadog이 정상적으로 작동하지 않을 수 있습니다.
이를 해결하기 위해 `Fargate Pod`의 `Service Account`에 Datadog 메트릭 수집 권한을 추가해야 합니다.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: datadog-metrics-role
rules:
- apiGroups:
- ""
resources:
- nodes
- namespaces
- endpoints
verbs:
- get
- list
- apiGroups:
- ""
resources:
- nodes/metrics
- nodes/spec
- nodes/stats
- nodes/proxy
- nodes/pods
- nodes/healthz
verbs:
- get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: datadog-metrics-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: datadog-metrics-role
subjects:
- kind: ServiceAccount
name: {{ SERVICE_ACCOUNT_NAME }}
namespace: {{ SERVICE_ACCOUNT_NAMESPACE }}
📌 Datadog에서 Karpenter 및 AWS Load Balancer Controller 확인
5. CoreDNS의 예외 처리 (Custom SVC 생성)
CoreDNS가 Datadog Cluster Agent와 연결되지 않는 문제가 발생할 수 있습니다.
이유는 DNS Policy가 Default일 경우 CoreDNS가 클러스터 내부 도메인을 해석하지 못하기 때문입니다.
이를 해결하기 위해 custom service를 생성하여 연결합니다.
apiVersion: v1
kind: Service
metadata:
name: custom-datadog-agent
namespace: kube-system
spec:
clusterIP: 172.20.255.250
ports:
- name: agent-port
port: 5005
targetPort: 5005
protocol: TCP
selector:
app: datadog-agent-cluster-agent
- name: DD_CLUSTER_AGENT_URL
value: "https://172.20.255.250:5005"
6. CoreDNS도 Datadog에 정상적으로 수집된 화면
CoreDNS도 정상적으로 Datadog에 메트릭이 들어오는 것을 확인할 수 있습니다.
✅ 결론: Fargate에서 Sidecar 자동화로 운영 부담 줄이기
Admission Controller를 활용하면 Fargate에서 개별적으로 Sidecar를 추가할 필요 없이 자동으로 주입할 수 있습니다.
이를 통해 운영 복잡성을 줄이고, Datadog과 같은 모니터링 에이전트를 효율적으로 관리할 수 있습니다.
📌 핵심 요약
✅ 특정 Label이 있는 Pod에만 Sidecar 자동 추가
✅ RBAC 설정을 통해 Datadog Sidecar 권한 부여
✅ CoreDNS 이슈 해결로 Datadog Cluster Agent와의 연결 최적화
'Datadog' 카테고리의 다른 글
[Kubernetes] EKS에서 Datadog APM 적용하기 (Auto Instrumentation + Trace Optimization) (0) | 2025.02.12 |
---|---|
Datadog 이상탐지 ( Anomaly Detection ) 적용기 (0) | 2023.12.24 |