개발자가 되고 싶은 개발자

Kubernetes의 도메인 질의 원리 이해하기 본문

Dev/DevOps

Kubernetes의 도메인 질의 원리 이해하기

Fullth 2025. 3. 8. 13:30

Growtika of Unsplash

Kubernetes(k8s) 환경에서는 클러스터 내부의 서비스 디스커버리가 중요한 역할을 합니다. 이 글에서는 Kubernetes에서 DNS 질의가 어떻게 이루어지는지 그 원리를 살펴보겠습니다.

Kubernetes의 DNS 구조

Kubernetes는 클러스터 내에서 DNS 서비스를 제공하기 위해 CoreDNS를 기본 DNS 서버로 사용합니다. 이 DNS 서버는 클러스터 내의 모든 서비스와 파드의 이름을 도메인으로 변환해주는 역할을 합니다.

DNS 질의 과정

  1. Pod 내에서의 DNS 설정
    nameserver 10.96.0.10
    search default.svc.cluster.local svc.cluster.local cluster.local
    options ndots:5
    
  2. Pod가 생성될 때, Kubernetes는 자동으로 /etc/resolv.conf 파일을 구성합니다. 이 파일은 DNS 서버의 주소와 기본 검색 도메인을 포함합니다.
  3. 도메인 질의 순서
    • ndots 값에 따라 절대 도메인과 상대 도메인 여부를 판단
    • 상대 도메인으로 판단될 경우, search 목록에 있는 각 접미사를 순서대로 붙여 질의
    • 절대 도메인으로 판단되거나 상대 도메인 질의가 모두 실패한 경우, 원래 도메인 그대로 질의
  4. Pod에서 도메인 질의가 이루어질 때, /etc/resolv.conf에 정의된 설정에 따라 다음과 같은 순서로 진행됩니다:

ndots 옵션의 역할

ndots 옵션은 DNS 질의에서 중요한 역할을 합니다. 이 값은 주어진 도메인 이름이 절대 도메인인지 상대 도메인인지를 판단하는 기준이 됩니다.

  • ndots:5는 도메인 이름에 점(.)이 5개 이상이면 절대 도메인으로 간주
  • Kubernetes에서 기본값은 5로 설정되어 있음

예를 들어, kubernetes.default.svc.cluster.local은 점이 4개이므로 상대 도메인으로 간주되고, 검색 목록의 접미사가 차례로 추가됩니다.

실제 동작 예시

curl kubernetes 명령을 실행할 때의 DNS 질의 과정을 살펴보겠습니다:

  1. kubernetes는 점이 없으므로 상대 도메인으로 간주
  2. 검색 목록의 접미사를 순서대로 추가하여 질의:
    • kubernetes.default.svc.cluster.local
    • kubernetes.svc.cluster.local
    • kubernetes.cluster.local
  3. 만약 위 질의가 모두 실패하면, 마지막으로 kubernetes 자체를 질의

성능 최적화 고려사항

ndots:5 설정은 Kubernetes의 기본값이지만, 불필요한 DNS 조회를 발생시킬 수 있습니다. 외부 도메인에 대한 질의의 경우, 최대 5번의 추가 DNS 질의가 발생할 수 있어 성능에 영향을 줄 수 있습니다.

이런 문제를 최적화하기 위해 다음과 같은 방법을 고려할 수 있습니다:

  1. Pod에 대한 dnsConfig를 사용하여 ndots 값 조정
  2. apiVersion: v1 kind: Pod metadata: name: custom-dns-example spec: dnsConfig: options: - name: ndots value: "2"
  3. 절대 도메인을 사용할 때 끝에 점(.)을 추가하여 검색 목록 사용 회피
  4. curl kubernetes.default.svc.cluster.local.

결론

Kubernetes의 DNS 질의 메커니즘은 클러스터 내부 서비스 디스커버리를 위해 최적화되어 있지만, 외부 도메인 질의 시에는 불필요한 오버헤드가 발생할 수 있습니다. 상황에 맞게 DNS 설정을 조정하면 애플리케이션의 성능을 향상시킬 수 있습니다.

Kubernetes의 도메인 질의 원리를 이해하면 클러스터 내 네트워킹 문제를 효과적으로 디버깅하고 최적화하는 데 도움이 됩니다.

참고

 

잡동사니 개발블로그

요약 k8s는 클러스터 내부에 등록된 도메인 리졸빙을 위해 pod의 /etc/resolve.conf에 search domain 및 ndots값을 변경한다 이로 인해 불필요한 질의가 여러 번 발생할 수 있고, 도메인 질의를 많이 하는 어

cprayer.github.io

 

'Dev > DevOps' 카테고리의 다른 글

[Docker] 사용자 권한에러 MySQL : Access denied for user 'root'@'172.17.0.1'  (0) 2023.03.13
[DevOps] CI / CD  (0) 2021.10.06
[Docker] Mac sqlplus  (0) 2021.03.10
[AWS] 월 사용량 계산기  (0) 2020.02.05