DevOps/K8S

[k8s] DNS

kyoulho 2024. 9. 2. 21:12

쿠버네티스에서 DNS(Domain Name System)는 클러스터 내 서비스와 파드 간의 통신을 간소화하는 중요한 구성 요소이다. 클러스터를 생성하면 기본적으로 DNS 서비스가 자동으로 설정되며, 최근의 쿠버네티스 클러스터에서는 CoreDNS가 기본 DNS 서비스로 사용된다. CoreDNS는 유연한 플러그인 아키텍처를 제공하여 클러스터 DNS뿐만 아니라 다른 네임서버와의 통합도 가능하게 한다.

 

DNS 이름 형식

쿠버네티스는 각 서비스에 대해 자동으로 DNS 이름을 생성하며, 그 형식은 다음과 같다:

<service-name>.<namespace>.svc.cluster.local

예를 들어, default 네임스페이스에 있는 my-service라는 서비스의 DNS 이름은 my-service.default.svc.cluster.local이 된다. 이를 사용하여 다른 서비스에서 HTTP 요청을 보낼 수 있다:

curl http://my-service.default.svc.cluster.local

 

DNS 확인 방법

DNS가 제대로 동작하는지 확인하려면, 클러스터 내의 파드에서 DNS 테스트를 수행할 수 있다. 이를 위해 간단한 파드를 생성하고, nslookup이나 dig 명령어를 사용하여 DNS 조회를 할 수 있다:

kubectl run -i --tty dnsutils --image=tutum/dnsutils --restart=Never --rm /bin/sh

파드 내부에서 다음 명령어를 실행하여 서비스의 DNS 이름을 조회할 수 있다:

nslookup my-service.default.svc.cluster.local

 

DNS 설정 변경

CoreDNS의 설정을 변경해야 할 경우, 이는 ConfigMap을 통해 관리된다. 기본적으로 kube-system 네임스페이스에 위치한 coredns ConfigMap을 수정하여 설정을 변경할 수 있다:

kubectl edit configmap coredns -n kube-system

이 명령어를 사용하면 CoreDNS의 설정 파일을 편집할 수 있으며, 특정 도메인에 대해 다른 DNS 서버를 사용하거나 쿠버네티스 외부의 도메인을 관리할 수 있다.

 

외부 DNS 사용

클러스터 내에서 외부 DNS 서버를 사용하려면, CoreDNS 설정에 외부 DNS 서버를 추가할 수 있다. 이 설정을 통해 쿠버네티스는 클러스터 내에서 정의되지 않은 도메인에 대해 외부 DNS 서버로 쿼리를 전달한다:

forward . 8.8.8.8

위 설정은 모든 도메인에 대해 Google의 Public DNS(8.8.8.8)를 사용하도록 설정한다.

 

내부와 외부 DNS를 함께 사용하는 방법

내부와 외부 DNS를 모두 사용하려면, CoreDNS의 설정을 적절히 조정해야 한다. 예를 들어, 내부 DNS에서 도메인을 먼저 확인하고, 만약 해당 도메인이 클러스터 내부에 없다면 외부 DNS로 쿼리를 전달할 수 있다.

. {
    forward . <클러스터 내부 DNS 서버 IP>
    forward . 8.8.8.8
}

이 설정은 모든 도메인에 대해 먼저 클러스터 내부 DNS 서버를 조회하고, 해당 도메인을 찾지 못할 경우 외부 DNS 서버(예: Google Public DNS)로 쿼리를 전달한다. forward 블록의 순서를 바꿔서 우선순위를 변경할 수 있다.

 

 

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

[k8s] Volume  (0) 2024.09.02
[k8s] 클러스터의 주요 구성 요소와 문제 발생 시 영향  (2) 2024.08.29
[k8s] Deployment  (0) 2024.08.29
[k8s] Pod  (0) 2024.08.29
[k8s] NodePort  (0) 2024.08.29