02-19 04:03
반응형
250x250
Recent Posts
Recent Comments
Link
관리 메뉴

DevOps Tasks

Kubernetes Admission Controller로 Fargate에 Datadog Agent Sidecar 자동 주입하기 본문

Datadog

Kubernetes Admission Controller로 Fargate에 Datadog Agent Sidecar 자동 주입하기

데밥스 2025. 2. 9. 21:09
728x90
반응형

1. 개요

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를 추가하지 않고, 필요한 경우에만 동적으로 주입할 수 있습니다.

📌  아직 사이드카를 추가하지 않은 상태 (1/1)

 


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

 

📌  사이드카를 추가한 후 (2/2)

이제 해당 `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"

 

📌  Custom Service 생성 후 CoreDNS describe 결과


6. CoreDNS도 Datadog에 정상적으로 수집된 화면

CoreDNS도 정상적으로 Datadog에 메트릭이 들어오는 것을 확인할 수 있습니다.

📌  Datadog에서 CoreDNS 메트릭 수집된 화면


✅ 결론: Fargate에서 Sidecar 자동화로 운영 부담 줄이기

Admission Controller를 활용하면 Fargate에서 개별적으로 Sidecar를 추가할 필요 없이 자동으로 주입할 수 있습니다.

이를 통해 운영 복잡성을 줄이고, Datadog과 같은 모니터링 에이전트를 효율적으로 관리할 수 있습니다.

📌 핵심 요약

✅ 특정 Label이 있는 Pod에만 Sidecar 자동 추가
✅ RBAC 설정을 통해 Datadog Sidecar 권한 부여
✅ CoreDNS 이슈 해결로 Datadog Cluster Agent와의 연결 최적화

728x90
반응형