Azure Kubernetes Service(AKS)에서의 DNS 해상도

DNS(도메인 이름 시스템) 확인은 AKS(Azure Kubernetes Service)의 중요한 구성 요소로, Pod 및 서비스가 IP 주소 대신 사람이 읽을 수 있는 이름을 사용하여 통신할 수 있도록 합니다. AKS는 내부 클러스터 리소스와 외부 엔드포인트 모두에 대해 원활한 이름 확인을 보장하기 위해 기본 제공 DNS 서비스를 제공합니다. AKS에서 DNS가 작동하는 방식을 이해하면 클러스터 운영자와 개발자가 안정적인 연결을 보장하고 성능을 최적화하며 네트워킹 문제를 효과적으로 해결할 수 있습니다.

Azure Kubernetes Service의 CoreDNS

CoreDNS 는 AKS(Azure Kubernetes Service)의 기본 DNS 서비스로, 클러스터에서 실행되는 워크로드에 대한 내부 이름 확인 및 서비스 검색을 제공합니다. kube 시스템 네임스페이스에서 Pod 집합으로 작동하며 Kubernetes 네트워킹과 긴밀하게 통합됩니다.

AKS의 Pod가 다른 서비스의 이름 확인과 같은 DNS 쿼리를 실행하면 요청이 CoreDNS Pod로 라우팅됩니다. 이러한 Pod는 쿼리를 처리하고 적절한 IP 주소를 반환하거나 외부 도메인에 대한 업스트림 DNS 서버로 요청을 전달합니다.

이 아키텍처는 관리되는 환경에서 유연성과 운영 안전 사이의 균형을 보장합니다. AKS에서 CoreDNS를 사용자 지정하는 방법에 대한 자세한 내용은 CoreDNS 사용자 지정 가이드를 참조하세요.

CoreDNS 프로젝트에 대한 자세한 내용은 CoreDNS 업스트림 프로젝트 페이지를 참조하세요.

Azure Kubernetes Service의 LocalDNS

비고

이 문서에서는 LocalDNS의 개념과 AKS의 이점에 대한 개요를 제공합니다. 설치 지침은 포함되지 않습니다. LocalDNS를 사용하도록 설정하고 구성하는 방법에 대한 지침은 LocalDNS 방법 가이드를 참조하세요.

개요

LocalDNS는 각 노드에 DNS(도메인 이름 시스템) 프록시를 배포하여 복원력이 뛰어나고 대기 시간이 짧은 DNS 확인을 제공하는 AKS(Azure Kubernetes Service)의 고급 기능입니다. 이 프록시는 로컬에서 DNS 쿼리를 처리하여 CoreDNS 추가 기능 Pod에 대한 트래픽을 줄여 클러스터의 전반적인 DNS 안정성 및 성능을 향상시킵니다. LocalDNS는 중앙 집중식 DNS 확인이 병목 상태가 될 수 있는 DNS 쿼리 볼륨이 높은 대규모 클러스터 또는 환경에서 특히 유용합니다.

LocalDNS를 사용하도록 설정하면 AKS는 각 노드에 로컬 DNS 캐시를 서비스로 systemd 배포합니다. 노드의 Pod는 DNS 쿼리를 이 로컬 캐시로 보내 네트워크 홉을 줄여 더 빠른 해결을 가능하게 합니다. 또한 이 방법은 테이블 사용량을 conntrack 최소화하여 테이블 소모 위험을 낮춥니다. 또한 업스트림 DNS를 사용할 수 없게 되면 LocalDNS는 구성 가능한 기간 동안 캐시된 응답을 계속 제공하여 Pod 연결 및 서비스 안정성을 유지할 수 있습니다.

LocalDNS 아키텍처를 보여 주는 다이어그램

주요 기능

  • DNS 확인 대기 시간 감소: 각 AKS 노드는 LocalDNS 서비스를 실행합니다 systemd . 노드에서 실행되는 워크로드는 DNS 쿼리를 이 서비스로 전송하여 로컬로 확인하여 네트워크 홉을 줄이고 DNS 조회 속도를 향상합니다.

  • 사용자 지정 가능한 DNS 동작:kubeDNSOverridesvnetDNSOverrides을 사용하여 클러스터에서 DNS 동작을 제어할 수 있습니다.

  • Conntrack 경합 및 테이블 고갈을 방지합니다: Pod는 새 conntrack 테이블 항목을 만들지 않고 동일한 노드의 LocalDNS 서비스에 DNS 쿼리를 보냅니다. 연결 추적을 건너뛰면 연결 추적 경합을 줄이고, UDP(사용자 데이터그램 프로토콜) DNS 항목이 conntrack 테이블을 채우지 않도록 방지할 수 있습니다. 이 최적화는 테이블 고갈 및 경합 조건으로 인한 conntrack 연결 삭제 및 거부를 방지합니다.

  • TCP로 업그레이드된 연결: 캐시에서 localdns 클러스터의 CoreDNS 서비스로의 연결은 TCP(Transmission Control Protocol)를 사용합니다. TCP는 서버가 연결을 닫을 때 연결 재조정을 허용하고 테이블 항목을 제거 conntrack 합니다(기본 30초 제한 시간이 있는 UDP 연결과는 대조적으로). 서비스에서 UDP 트래픽을 계속 수신 대기하기 때문에 애플리케이션은 localdns 변경이 필요하지 않습니다.

  • 캐싱: LocalDNS 캐시 플러그 인은 serveStale 및 TTL(Time to Live) 설정으로 구성할 수 있습니다. serveStale, serveStaleDurationInSecondscacheDurationInSeconds 매개 변수를 구성하여 업스트림 DNS 중단 중에도 DNS 복원력을 달성할 수 있습니다.

  • 프로토콜 제어: 각 도메인에 대해 DNS 쿼리 프로토콜(예: PreferUDP 또는 ForceTCP)을 설정할 수 있습니다. 이러한 유연성을 통해 특정 도메인에 대한 DNS 트래픽을 최적화하거나 네트워크 요구 사항을 충족할 수 있습니다.

기타 이점 및 고려 사항

혜택 고려 사항
향상된 확장성: 중앙 집중식 CoreDNS Pod의 부하 감소 최소 리소스 오버헤드: 각 노드에서 소량의 CPU 및 메모리 사용
원활한 통합: 기존 애플리케이션 연결을 변경할 필요가 없습니다. 구성 변경: 업데이트에는 노드 이미지 업그레이드가 필요하므로 일시적인 중단이 발생할 수 있습니다.
잘못된 검색 도메인 차단: 노드 수준에서 잘못된 DNS 쿼리를 방지합니다.

LocalDNS를 사용하면 워크로드에 대해 더 빠르고 안정적인 DNS 확인을 받고, DNS 관련 중단의 위험을 줄이고, AKS 환경에서 DNS 트래픽을 더 많이 제어할 수 있습니다.

다음 단계

LocalDNS를 사용하도록 설정하고 AKS 클러스터에서 해당 설정을 구성하는 방법을 알아보려면 LocalDNS 방법 가이드를 참조하세요.

핵심 네트워크 개념에 대해 자세히 알아보려면 AKS의 애플리케이션에 대한 네트워크 개념을 참조하세요.