뒤로가기

Common

dnsmasq와 K8S 적용 사례

김준우 2020.04.14.

소개

안녕하세요. 다나와의 김준우입니다. 이번에 포스팅 내용은 k8s에서 생성된 컨테이너의 호스트파일을 다룰때 불편함과 깃랩의 CI/CD 사용시 POD의 호스트 정보를 변경할때 이슈가 있어 해결 사례를 공유합니다.

문제

다나와는 오래전 부터 서버마다 IP를 외부용, 내부용 두IP를 사용하고 있습니다. 서버간 커뮤니케이션은 내부망을 사용하고 퍼블릭하게 오픈할땐 외부아이피를 사용합니다. 그렇기 때문에 호스트 파일에 아이피를 작성하여 용도에 맞는 아이피를 사용합니다. 깃랩을 도입 후 깃랩 러너는 호스트 파일을 컨트롤 하는 방법이 깃랩 러너의 config.toml 파일에 호스트 파일을 기본 마운트 시키는 방법을 가이드합니다. 이러한 방법은 컨테이너에서 마운트된 호스트 파일을 조작하면 전체가 컨테이너의 호스트파일에 적용되는 문제가 발생이 될 수 있습니다.

해결

호스트파일조작이 아닌 네임서버에서 관리하는 방법을 사용하였습니다. 이번 포스팅에서 설명할 네임서버는 dnsmasq 네임서버입니다. 대표하는 장점으로는 호스트 파일 기반으로 동작하기 때문에 기존 호스트 파일을 사용하기 때문에 간단하게 적용이 가능합니다. dnsmasq 설치방법및 k8s 적용 방법을 공유하겠습니다.

dnsmasq 설치

centos7에선 yum으로 바로 설치 됩니다.

$ sudo yum -y install dnsmasq

시작하면 기본 호스트파일 기반으로 네임서버가 작동합니다.

$ sudo systemctl start dnsmasq
$ sudo systemctl enable dnsmasq
$ sudo systemctl status dnsmasq

/var/lib/kubelet/config.yaml 파일의 clusterDNS에 추가합니다. clusterDNS에 추가하게 되면 컨테이너에 resolv.conf이 동일하게 적용되어 네임서버에 요청하게 됩니다.

clusterDNS:
- dnsmasq.danawa.com
- 10.96.0.10

호스트파일에 정의된 도메인으로 ping 해보면 아이피를 확인하여 적용이 되었는지 확인합니다.

정리

이번에 dnsmasq를 사용하면서 파드에서 호스트 조작 않고 간단하게 네임서버를 별도로 실행하여 사용하는 방법을 알아보았습니다. k8s에서 기본 탑재되어 있는 coredns에서도 호스트등록이 가능하다고 공식문서는 있지만 다나와에선 호스트 파일의 목록이 약 200라인정도 되어 coredns에서 관리는 힘들어 보입니다. 이번 포스팅으로 같은 고민은 하는 분들에게 도움이 되었으면 좋겠습니다.