Community

쿠버네티스 파드에 Host Network 도입기

안녕하세요. SRE팀 클러스터 파트에서 근무하고 있는 Ssup(썹)이에요. 저희 클러스터 파트는 대부분의 당근 서비스가 동작하는 쿠버네티스 클러스터의 안정성과 가시성을 책임지고 있어요. 쿠버네티스 클러스터 운영부터 서비스 메쉬 네트워크 구성, 모니터링 컴포넌트 관리까지 다양한 업무를 맡고 있죠. 최근 저희는 파드의 Host Network 설정을 적극적으로 도입하기 시작했는데요. 그 결과, DaemonSet에 Host Network 설정을 적용해 수천 개의 IP 주소를 절약할 수 있었고, Job 파드에도 적용해 생성 속도를 크게 개선할 수 있었어요. 그래서 이번 글에서는 파드의 Host Network 설정을 소개하고, 당근에서는 어떤 과정을 거쳐 Host Network 설정을 적용하게 되었는지 공유해보려고 해요. 파드의 Host Network 설정 파헤치기 파드의 Host Network 설정 소개 파드의 Host Network 설정은 이름 그대로 파드가 Host의 네트워크를 이용하도록 만드는 기능이에요. 좀 더 쉽게 설명하면 파드가 Host의 IP를 그대로 가지고 동작하는 설정이죠. Host Network 설정이 적용되지 않은 일반 파드는 각자 고유한 IP 주소를 가지고 동작해요. 그림에서 보이는 10.0.0.14 , 10.0.0.21 같은 IP 주소들이 바로 개별 파드에 할당된 고유 IP 주소예요. 반면, Host Network 설정이 적용된 파드는 파드가 동작하는 Host와 동일한 IP 주소를 가지고 동작해요. 그림에 나타낸 10.0.0.10 , 10.0.0.20 같은 IP 주소가 Host의 IP 주소이면서 동시에 Host Network 설정이 적용된 파드가 함께 사용하는 IP 주소예요. apiVersion: v1 kind: Pod metadata: name: nginx-hostnetwork-pod spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet containers: - name: nginx image: nginx:latest ports: - containerPort: 80 파드 Host Network 설정은 어렵지 않아요. 위 예시는 Host Network 설정이 적용된 파드의 Manifest를 나타내요. 파드의 Spec에 hostNetwork: true 와 dnsPolicy:ClusterFirstWithHostNet 를 추가하면 돼요. hostNetwork: true 는 Host Network 설정을 의미하고, dnsPolicy:ClusterFirstWithHostNet 는 Host Network를 이용하지만 DNS(Domain Name Server)는 쿠버네티스의 기본 DNS인 CoreDNS를 이용하겠다는 설정이에요. 일반적으로 같이 설정해서 사용해요. 파드의 Host Network 설정 장단점 비교 Host Network 설정은 장점과 단점이 명확해요. 이는 파드가 Host 네트워크에서 동작하기 때문이에요. 먼저 첫 번째 장점은 IP 주소를 절약할 수 있다는 거예요. 파드가 Host의 IP 주소를 그대로 사용하기 때문에 파드에 할당하기 위한 고유의 IP 주소가 필요하지 않아요. 이러한 장점은 파드에게 부여할 IP 주소가 부족한 경우에 큰 장점이 될 수 있어요. 두 번째 장점은 파드의 생성속도가 빨라진다는 점이에요. 파드가 생성될 때 IP 주소를 새로 할당하는 과정이 생략되기 때문에 그만큼 생성 시간이 단축돼요. 특히 파드를 빠르게 띄워야 하거나, IP 주소 할당 과정이 오래 걸리는 환경에서는 더욱 큰 장점이 될 수 있죠. 반면 단점도 존재해요. 가장 큰 단점은 포트 충돌이 발생할 수 있다는 점이에요. Host Network 모드를 쓰면 파드가 Host와 IP 주소 뿐만이 아니라 포트도 같이 공유하기 때문에, 같은 포트를 동시에 사용하면 포트 충돌이 발생해요. 특히 대부분의 파드가 서버 역할을 하며 리스닝 포트를 열어두기 때문에 포트 충돌이 일어나기 쉬운 거죠. Deployment는 쿠버네티스가 제공하는 파드 배포 기능중에 가장 많이 쓰이는 기능으로, 동일한 워크로드 파드 여러 개를 쉽게 배포하고 관리하는 기능을 제공해요. Deployment로 파드를 배포하면, 동일한 Host에 여러 개의 Deployment 파드가 배포되어 동작할 수 있어요. 일반적인 파드는 고유의 IP 주소를 이용하고 있기 때문에 포트 충돌이 발생하지 않아요. 하지만 Host Network 설정이 적용된 Deployment 파드는 동일한 Host에 여러 개가 동작하는 경우 포트 충돌이 발생하게 돼요. 일부 파드가 제대로 동작하지 못할 수도 있죠. 이러한 포트 충돌 문제는 Host Network 설정의 가장 큰 단점이라고 할 수 있어요. 대부분의 파드들이 Host Network 설정을 이용하지 못하는 원인이 되거든요. 이외에도 Host Network 설정이 적용된 파드에는 Sidecar Proxy를 설정할 수 없기 때문에 Istio를 이용하는 환경에서는 Istio의 Mesh Network를 이용할 수 없다는 단점도 존재해요. 그렇다면 Host Network 설정의 단점을 최소화 하면서 장점을 살릴 방법은 없을까요? 위 방법이 궁금하다면, 지금 당근 테크 블로그에서 글 전문을 읽어보세요!🥕

알림

알림이 없습니다