title: "Istio DNS proxy: 지연 개선, DNS 부하 감소"
description: "Kubernetes 환경에서의 Istio DNS Proxy 사용에 대한 설명으로, 이를 사용하면 CoreDNS를 포함한 DNS server로의 호출이 대폭 줄어든다. 이는 DNS server로의 부하 감소 뿐 아니라 app의 응답 속도 개선으로 이어진다."
cleanUrl: /sw-engineer/istio-dns-proxying
ogImage: "<https://anyflower.notion.site/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F7570d2fc-66b1-4e23-bb3c-ff7b56842b0d%2F67de4643-ce15-4863-a01f-46ac966fa0d0%2FUntitled.png?table=block&id=e864ed0c-43e2-4f65-a6d4-b64eaa858f08&spaceId=7570d2fc-66b1-4e23-bb3c-ff7b56842b0d&width=1420&userId=&cache=v2>"
floatFirstTOC: right

Introduction

Kubernetes 환경에서의 Istio DNS Proxy 사용에 대한 설명으로, 이를 사용하면 CoreDNS를 포함한 DNS server로의 호출이 대폭 줄어든다. 이는 DNS server로의 부하 감소 뿐 아니라 app의 응답 속도 개선으로 이어진다. References 은 참조 문서다.

Motivation

Istio의 DNS Proxying을 눈여겨 보게된 동기는 Nodelocal DNSCache에 대한 대체 가능성 때문이다. 용도가 중복된다면 굳이 둘 모두를 운용할 필요가 없다.

Nodelocal DNSCache는 CoreDNS로의 부하 감소를 위한 DaemonSet로 동작하는 추가 패키지인데, 이 부하는 iptables 모드의 kube-proxy 환경에서 DNS lookup 실패를 유발한다. Appendix: conntrack race condition과 해결안 은 이에 대한 상세이다.

Summary

Istio DNS Proxying 구조

Istio DNS proxying의 기본 아이디어는 “Istio가 가진 주소 정보 활용”인 듯 보인다. Istio proxy에는 이미 DNS 서비스에 필요한 Domain Name과 VIP(virtual IP - service IP), RIP(real IP - pod IP)가 있기 때문이다.

이를 고려하면 적어도 in-cluster 연산에는 CoreDNS 호출 필요성이 아예 사라진다. 해당 호출이 사라지므로 성능 증대는 물론 CoreDNS에 대한 부하를 (공식 문서 표현에 따르면) ‘drastically’ 완화하여, 이는 pod가 많아질 수록 더욱 그렇다.

Istio DNS Proxying 구조

Istio DNS Proxying 구조

윗 그림은 Istio DNS proxying 구조로, DNS Proxying에 필요한 Domain name, VIP, RIP가 어떻게 sync되고 사용되는지를 나타낸다. 각 번호는 동작 순서로 1~3은 이들 정보에 대한 sync 과정, 4 ~ 6 부터는 사용 과정이다.

  1. Service / Pod → API Server: Kubernetes API Server는 Service와 Domain name, VIP를, Pod와 RIP를 sync한다(DNS 맥락 설명 집중을 위해 내부 구조를 추상화했다).
  2. API Server → istiod : 15017: Kubernetes API Server 참조.
  3. istiod → Istio proxy: Istio Internals: xDS 참조. 추가로 istiod는 Kubernetes 뿐 아니라 Istio ServiceEntry 를 통한 Kubernetes 외부의 Domain Name, IP도 함께 보유한다. 이 역시 sync 대상이다.
  4. client DNS lookup: client는 별도 수정 없이 DNS lookup을 수행한다. 이 때 DNS Proxy는 투명하게 해당 요청을 가로채서 VIP를 응답한다.