Kubernetes/Kubernetes Advanced

📌 [DaemonSet 심화편 #12] DaemonSet Pod에 Host PID/IPC/UTS 네임스페이스 공유 설정하기

ygtoken 2025. 3. 22. 19:43
728x90

1️⃣ 개요

DaemonSet은 각 노드에 하나씩 Pod을 배포하기 때문에, 시스템 수준의 정보를 수집하거나 네임스페이스를 직접 공유해야 하는 경우에 유리합니다.
이때 Pod의 네임스페이스 격리 기능을 해제하고, 호스트 네임스페이스(PID, IPC, UTS)를 공유하면
노드 상의 프로세스, 네트워크, 호스트 이름 등에 접근할 수 있습니다.

이번 글에서는 DaemonSet Pod에서 hostPID, hostIPC, hostUTS 설정을 통해 시스템 정보를 공유받는 방법을 정리합니다.


2️⃣ Host 네임스페이스 공유란?

항목  설명
hostPID: true 노드의 프로세스 ID 네임스페이스를 공유 (다른 프로세스 목록 접근 가능)
hostIPC: true 노드의 IPC(프로세스 간 통신) 네임스페이스 공유
hostUTS: true 호스트의 UTS(호스트 이름, 도메인 등) 네임스페이스 공유

✅ 위 설정들은 Pod이 노드의 시스템 환경에 직접 접근해야 할 때 사용됩니다.


3️⃣ 전체 DaemonSet 예제 (hostPID / hostIPC / hostUTS 설정 포함)

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: system-inspector
spec:
  selector:
    matchLabels:
      app: system-inspector
  template:
    metadata:
      labels:
        app: system-inspector
    spec:
      hostPID: true       # 노드의 프로세스 네임스페이스를 공유함
      hostIPC: true       # 노드의 IPC 네임스페이스를 공유함
      hostUTS: true       # 노드의 UTS 네임스페이스를 공유함
      containers:
        - name: inspector
          image: busybox
          command: ["sh", "-c", "ps aux | grep kubelet && hostname && sleep 3600"]

 

📌 설명 요약

  • hostPID: true 설정으로 컨테이너에서 ps aux 실행 시 노드의 전체 프로세스를 조회할 수 있습니다.
  • hostUTS: true 설정으로 컨테이너 내부에서 hostname을 실행하면 실제 노드의 호스트명이 출력됩니다.
  • hostIPC는 IPC 자원 공유 목적이며 일반적으로 advanced observability에서 활용됩니다.

4️⃣ 적용 확인 방법

kubectl exec -it <pod-name> -- ps aux

 

출력 예시:

root         1  0.0  0.0   1800   640 ?        Ss   08:00   0:00 /pause
root        50  0.1  0.1  30000  2000 ?        Sl   08:00   0:00 /usr/bin/kubelet

 

📌 설명

  • Pod 안에서 노드의 kubelet, containerd 등 시스템 프로세스가 보이면 hostPID: true가 정상 적용된 것입니다.
kubectl exec -it <pod-name> -- hostname

 

📌 설명

  • 컨테이너의 hostname이 노드의 호스트 이름과 일치하면 hostUTS: true가 정상 적용된 것입니다.

5️⃣ 보안 관련 주의 사항

항목 설명
호스트 침투 가능성 컨테이너가 노드 시스템에 접근할 수 있어, 악용 시 보안 위험 발생 가능
ReadOnlyRootFilesystem 권장 파일 시스템 쓰기를 막아 최소 권한으로 운영
SecurityContext 강화 필요 Capabilities 최소화, privilege 사용 여부 제한 필요
PodSecurityPolicy/OPA 정책 연동 hostPID: true 등이 사용된 리소스를 제한할 수 있음 (v1.25부터 PSA로 대체됨)

6️⃣ 함께 사용하면 좋은 설정

✅ 보안 설정 예시

securityContext:
  runAsUser: 1000
  allowPrivilegeEscalation: false
  readOnlyRootFilesystem: true

📌 설명

  • 호스트 정보를 읽기만 하도록 제한하고, 권한 상승을 막아 보안을 강화할 수 있습니다.

🔥 7️⃣ 결론

DaemonSet Pod에서 호스트 PID, IPC, UTS 네임스페이스를 공유하면 노드의 시스템 정보를 직접 수집하거나 제어할 수 있습니다.
이 기능은 강력하지만 보안적으로 민감하므로 필요한 최소한의 권한만 허용해야 합니다.
시스템 수준 모니터링, 디버깅, 정책 감시 등의 목적에 따라 적절하게 활용할 수 있습니다.

 

728x90