Kubernetes/Kubernetes Advanced

📌 [DaemonSet 심화편 #5] DaemonSet과 Host 네트워크 및 호스트 경로 마운트 구성

ygtoken 2025. 3. 21. 18:44
728x90

 

1️⃣ 개요

 

DaemonSet은 노드마다 하나씩 실행되는 특성 덕분에 호스트 환경과 직접 상호작용하는 서비스 배포에 매우 적합합니다.

이런 경우 HostNetwork를 통해 노드의 네트워크를 직접 사용하거나, HostPath를 통해 노드의 파일 시스템에 접근해야 할 수 있습니다.

 

이번 글에서는 DaemonSet에서 HostNetwork와 HostPath를 설정하고 안전하게 운영하는 방법을 설명합니다.

 


2️⃣ HostNetwork와 HostPath란?

항목 설명 대표 활용 사례
HostNetwork Pod가 노드의 IP 주소와 네트워크 스택을 직접 사용 Node Exporter, Log Forwarder
HostPath Pod가 노드의 파일 경로를 직접 마운트하여 접근 로그 수집, 시스템 정보 접근

✅ 이 기능들은 노드 수준의 정보를 수집하거나 시스템 자원에 접근해야 하는 서비스에서 자주 사용됩니다.

 


3️⃣ HostNetwork 설정 방법

spec:
  hostNetwork: true  # 노드의 네트워크를 그대로 사용
  dnsPolicy: ClusterFirstWithHostNet  # DNS 설정을 호스트 네트워크에 맞게 조정

📌 설명

hostNetwork: true를 설정하면 Pod가 클러스터 내부의 가상 네트워크가 아니라 호스트의 실제 IP를 사용합니다.

dnsPolicyClusterFirstWithHostNet으로 지정해야 DNS가 정상 동작합니다.

 

Pod가 노드 IP에 바인딩되므로, 포트 충돌을 주의해야 합니다.

 


4️⃣ HostPath 마운트 설정 방법

volumeMounts:
  - name: varlog
    mountPath: /var/log  # 컨테이너 내부에 마운트할 경로

volumes:
  - name: varlog
    hostPath:
      path: /var/log     # 실제 노드 경로
      type: Directory

 

📌 설명

/var/log 경로를 컨테이너 안으로 마운트하여, 노드의 로그 파일을 직접 수집하거나 분석할 수 있습니다.

typeDirectory, File, Socket 등으로 지정 가능하며, 존재하지 않으면 에러가 날 수 있으므로 주의합니다.

 


5️⃣ 전체 구성 예제: Node 로그 수집기 DaemonSet

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: log-agent
spec:
  selector:
    matchLabels:
      app: log-agent
  template:
    metadata:
      labels:
        app: log-agent
    spec:
      hostNetwork: true                          # 노드의 네트워크 스택 사용
      dnsPolicy: ClusterFirstWithHostNet         # DNS 정책 설정 (필수)
      containers:
        - name: log-agent
          image: busybox
          command: ["sh", "-c", "tail -f /var/log/syslog || tail -f /var/log/messages"]
          volumeMounts:
            - name: varlog
              mountPath: /var/log               # 컨테이너 내부에서 /var/log 사용
      volumes:
        - name: varlog
          hostPath:
            path: /var/log                      # 실제 노드 경로를 마운트
            type: Directory

 

📌 설명 요약

hostNetwork를 활성화하여 노드 IP를 그대로 사용합니다.

노드의 /var/log 경로를 마운트하여 시스템 로그를 컨테이너 내에서 실시간으로 조회합니다.

tail -f 명령으로 syslog 또는 messages 로그 파일을 지속적으로 출력합니다.

 

✅ 이 구성은 간단한 로그 수집기 또는 테스트용 로그 에이전트로 활용할 수 있습니다.

 


6️⃣ HostPath 사용 시 주의사항

항목 주의점
보안 노드의 중요한 파일 시스템에 접근하므로 반드시 필요한 경로만 제한적으로 마운트
포트 충돌 HostNetwork 사용 시 여러 Pod가 동일한 포트를 사용할 경우 충돌 가능
노드 OS 의존성 /var/log, /etc 등 경로 구조가 노드 운영체제에 따라 다를 수 있음
ReadOnly 설정 쓰기 필요가 없는 경우 readOnly: true 옵션 설정 권장

예: 로그 조회만 할 경우 아래처럼 설정 가능

volumeMounts:
  - name: varlog
    mountPath: /var/log
    readOnly: true

 

 


🔥 7️⃣ 결론

 

DaemonSet은 노드의 정보를 수집하거나 시스템 자원에 접근할 수 있도록 Host 설정을 지원합니다.

HostNetwork를 활용하면 Pod가 노드의 네트워크를 직접 사용하여 통신할 수 있습니다.

HostPath를 활용하면 노드의 파일 시스템에 접근하여 로그 수집, 모니터링 등을 수행할 수 있습니다.

이 기능들은 강력한 만큼, 보안과 자원 접근 범위를 신중하게 설계해야 합니다.

728x90