본문 바로가기

데브옵스/K8S

[k8s network] nodelocaldns 란? (Nodelocal DNSCache)

반응형
반응형

Intro

K8S에서는 대부분의 통신이 도메인 기반으로 이루어집니다. CoreDNS를 통해 pod나 service 객체에 대한 DNS 질의가 가능하죠. K8S에서는 더 나은 DNS 성능을 위해 제공하는 서비스가 있습니다.
 

NodeLocal DNSCache

우리가 흔히 nodelocaldns 라고 부르는 서비스의 정식 명칭은 NodeLocal DNSCache입니다. 애플리케이션의 존재 이유가 'caching'인데 길다는 이유로 cache가 생략되는게 좀 아이러니한데요.
 
NodeLocal DNSCacheK8S DNS 쿼리의 성능을 향상시키기 위한 캐싱 서비스입니다. DNS 질의에 대해, 동일한 요청을 캐시하여 앞단에서 처리함으로서, 추가적인 외부 DNS 쿼리를 수행하지 않고도 빠른 응답을 제공할 수 있습니다. 이를 통해 K8S의 CoreDNS 서비스에 대한 부하를 줄이는 역할 또한 제공하고 있습니다. (coredns를 모른다면? - 링크)
 
요즘 Database의 부하를 낮추고, 빠른 서비스를 제공하기 위해 DB 앞단에 Redis 같은 memory 기반 서비스를 두는 아키텍쳐를 많이 사용하시는데요. NodeLocal DNSCache도 동일한 개념이라고 생각하시면 될 것 같습니다.
 

 
또한 nodelocaldns 는 pod에 대한 DNS 요청을 최적화하기 위해 설계되었기 때문에, 모든 노드에 데몬셋으로 배포됩니다.
 
 

NodeLocal DNSCache Configmap

nodelocaldns의 configmap을 통해 아래 4가지에 대한 설정이 가능합니다.
 
1) 캐시 크기
Nodelocaldns 캐시는 기본적으로 클러스터 노드의 메모리에 저장됩니다. configmap을 통해, 캐시되는 크기를 조정할 수 있는데요.
이는 메모리 제한과 같이 고려해야 하는데, 공식 문서를 통해 이러한 가이드를 참고할 수 있습니다 (링크)
 
2) 캐싱 시간
캐싱되는 시간 (TTL) 은 default 30초 입니다.
 
3) upstreamDomain / 4) stubstreamDomain
외부 DNS에 대한 처리, 하위/특정 도메인에 대한 처리를 정의하는 방식입니다. 다만 이 부분은 coredns configmap에서도 가능하기 때문에, 특정 클라우드 벤더에서는 아예 기능을 막아두거나, 변경 시에 coredns의 corefile(configmap을 통해 설정하는 부분)도 같이 반영되는 케이스도 있습니다.
 

NodeLocal DNSCache Architecture

 
앞서 설명드린 것처럼, DNS에 대한 요청을 메모리에 캐시하여, TTL 이내에 요청 시에 Cache Hit 하여 빠르게 리턴합니다.
초록색 부분Cache Hit 하는 flow , 빨간색 부분Cache miss 되어, CoreDNS 통해 업데이트하는 과정입니다.

 

마치며

지금까지 K8S DNS 캐싱을 도와주는 NodeLocal DNSCache 에 대한 개념 및 동작방식, 역할에 대해 알아보았습니다.
배워가며 작성하는 블로그입니다.
피드백 및 의견 환영입니다 🙂
 

반응형