일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 봤어요처리
- 인텔리제이
- Mac
- tecoble
- eqauls-hashcode
- datagrip 한글깨짐
- 프로젝트 여러 개
- class-transformer
- 프로그래머스
- Java
- JavaScript
- node.js
- TypeScript
- MySQL
- Aspect
- svn
- @RequestBody
- Stream
- InteliJ
- REST
- db
- kubernetes dns 질의
- DART
- Spring
- SQL
- oracle
- javascript error
- maven
- 코어자바스크립트
- ojdbc6
- Today
- Total
개발자가 되고 싶은 개발자
Kubernetes의 도메인 질의 원리 이해하기 본문
Kubernetes(k8s) 환경에서는 클러스터 내부의 서비스 디스커버리가 중요한 역할을 합니다. 이 글에서는 Kubernetes에서 DNS 질의가 어떻게 이루어지는지 그 원리를 살펴보겠습니다.
Kubernetes의 DNS 구조
Kubernetes는 클러스터 내에서 DNS 서비스를 제공하기 위해 CoreDNS를 기본 DNS 서버로 사용합니다. 이 DNS 서버는 클러스터 내의 모든 서비스와 파드의 이름을 도메인으로 변환해주는 역할을 합니다.
DNS 질의 과정
- Pod 내에서의 DNS 설정
nameserver 10.96.0.10 search default.svc.cluster.local svc.cluster.local cluster.local options ndots:5
- Pod가 생성될 때, Kubernetes는 자동으로 /etc/resolv.conf 파일을 구성합니다. 이 파일은 DNS 서버의 주소와 기본 검색 도메인을 포함합니다.
- 도메인 질의 순서
- ndots 값에 따라 절대 도메인과 상대 도메인 여부를 판단
- 상대 도메인으로 판단될 경우, search 목록에 있는 각 접미사를 순서대로 붙여 질의
- 절대 도메인으로 판단되거나 상대 도메인 질의가 모두 실패한 경우, 원래 도메인 그대로 질의
- Pod에서 도메인 질의가 이루어질 때, /etc/resolv.conf에 정의된 설정에 따라 다음과 같은 순서로 진행됩니다:
ndots 옵션의 역할
ndots 옵션은 DNS 질의에서 중요한 역할을 합니다. 이 값은 주어진 도메인 이름이 절대 도메인인지 상대 도메인인지를 판단하는 기준이 됩니다.
- ndots:5는 도메인 이름에 점(.)이 5개 이상이면 절대 도메인으로 간주
- Kubernetes에서 기본값은 5로 설정되어 있음
예를 들어, kubernetes.default.svc.cluster.local은 점이 4개이므로 상대 도메인으로 간주되고, 검색 목록의 접미사가 차례로 추가됩니다.
실제 동작 예시
curl kubernetes 명령을 실행할 때의 DNS 질의 과정을 살펴보겠습니다:
- kubernetes는 점이 없으므로 상대 도메인으로 간주
- 검색 목록의 접미사를 순서대로 추가하여 질의:
- kubernetes.default.svc.cluster.local
- kubernetes.svc.cluster.local
- kubernetes.cluster.local
- 만약 위 질의가 모두 실패하면, 마지막으로 kubernetes 자체를 질의
성능 최적화 고려사항
ndots:5 설정은 Kubernetes의 기본값이지만, 불필요한 DNS 조회를 발생시킬 수 있습니다. 외부 도메인에 대한 질의의 경우, 최대 5번의 추가 DNS 질의가 발생할 수 있어 성능에 영향을 줄 수 있습니다.
이런 문제를 최적화하기 위해 다음과 같은 방법을 고려할 수 있습니다:
- Pod에 대한 dnsConfig를 사용하여 ndots 값 조정
- apiVersion: v1 kind: Pod metadata: name: custom-dns-example spec: dnsConfig: options: - name: ndots value: "2"
- 절대 도메인을 사용할 때 끝에 점(.)을 추가하여 검색 목록 사용 회피
- 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 |