Resolv
Resolv 카테고리의 모든 포스트 - 한국어
1개의 포스트
/etc/resolv 에 관해서
📘 리눅스 /etc/resolv.conf
완벽 가이드 (K8s 환경 포함)
1. /etc/resolv.conf
역할
- 도메인 이름 → IP 주소 변환(DNS Resolution) 시 참조하는 설정 파일
- 모든 DNS 조회(
dig
,nslookup
, 웹 브라우저 등)의 기본 규칙 제공 - 쿠버네티스에서는 노드의 resolv.conf → Pod의 resolv.conf로 전파됨
2. 기본 구조 예시
nameserver 8.8.8.8
nameserver 1.1.1.1
search example.com local.lan
options ndots:2 timeout:2 attempts:2 rotate
주요 지시어
지시어 | 설명 | 예시 |
---|---|---|
nameserver <IP> | 사용할 DNS 서버 (최대 3개) | nameserver 8.8.8.8 |
search <도메인> | 짧은 호스트명에 붙일 검색 도메인 | search local.lan home.lan |
domain <도메인> | 단일 검색 도메인 | domain local.lan |
options | 추가 옵션 | ndots:2 , timeout:3 , rotate 등 |
3. 자주 쓰는 options
ndots:N
→ 점(.
)이 N개 이상이면 FQDN으로 판단
예:ndots:5
이면foo.bar
도 search 도메인 붙여 여러 번 시도 → 느려질 수 있음timeout:T
→ 응답 대기 시간(초)attempts:N
→ 재시도 횟수rotate
→ nameserver 라운드로빈 방식single-request-reopen
→ IPv4/IPv6 동시 요청 문제 회피
4. 직접 수정하면 안 되는 이유
- 많은 배포판에서 자동 생성/관리됨
- 부팅, DHCP 갱신, 네트워크 재시작 시 덮어씌워짐
- 관리 주체 예시:
- systemd-resolved →
/etc/resolv.conf
는 127.0.0.53(stub) 가리킴 - NetworkManager
- resolvconf,
dhclient
- Netplan
- systemd-resolved →
5. 올바른 수정 방법
systemd-resolved 사용 시
sudo nano /etc/systemd/resolved.conf
# DNS, Domains, DNSStubListener 설정
[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=9.9.9.9
Domains=local.lan
sudo systemctl restart systemd-resolved
resolvectl status
- kubelet이 참고할 파일:
/run/systemd/resolve/resolv.conf
NetworkManager 사용 시
nmcli connection modify eth0 ipv4.dns "1.1.1.1 8.8.8.8"
nmcli connection modify eth0 ipv4.ignore-auto-dns yes
nmcli connection up eth0
DHCP 클라이언트 사용 시
# /etc/dhcp/dhclient.conf
supersede domain-name-servers 1.1.1.1, 8.8.8.8;
6. 쿠버네티스에서의 resolv.conf
dnsPolicy
값 | 설명 |
---|---|
ClusterFirst | 기본값. 클러스터 DNS(CoreDNS) 우선 |
ClusterFirstWithHostNet | hostNetwork Pod에서 클러스터 DNS 우선 |
Default | 노드의 resolv.conf 그대로 사용 |
None | 완전 수동, dnsConfig 필요 |
Pod에서 dnsConfig 사용 예
apiVersion: v1
kind: Pod
metadata:
name: dns-test
spec:
dnsPolicy: None
dnsConfig:
nameservers:
- 1.1.1.1
searches:
- example.com
options:
- name: ndots
value: "1"
containers:
- name: busybox
image: busybox
command: ["sleep", "3600"]
7. CoreDNS 업스트림 변경 예
.:53 {
forward . 1.1.1.1 8.8.8.8
cache 30
errors
}
internal.local:53 {
forward . 192.168.0.1
}
8. 집 K8s 환경에서 추천 구성
- 노드:
/etc/resolv.conf
가 127.0.0.53이면 kubelet에 다음 설정:--resolv-conf=/run/systemd/resolve/resolv.conf
- CoreDNS:
- 신뢰 가능한 업스트림 DNS 명시
- Pod 특수 케이스:
- 외부 DNS 바로 사용:
dnsPolicy: None
+dnsConfig
- 외부 DNS 바로 사용:
9. 디버깅 명령어
노드에서
cat /etc/resolv.conf
resolvectl status
dig @1.1.1.1 kubernetes.io
Pod에서
kubectl exec -it <pod> -- cat /etc/resolv.conf
kubectl exec -it <pod> -- dig kubernetes.default.svc.cluster.local
CoreDNS 로그
kubectl -n kube-system logs -l k8s-app=kube-dns
10. FAQ
- Q: resolv.conf 직접 수정해도 돼?
A: 재부팅/네트워크 재시작 시 덮어씌워짐. 상위 설정에서 변경 권장. - Q: nameserver 4개 넣으면?
A: 3개까지만 유효. - Q: ndots 줄이면?
A: 내부 DNS 성능 향상 가능.
📌 요약
/etc/resolv.conf
는 DNS 해석 기본 설정- 쿠버네티스에서는 노드 → Pod로 전파
- Ubuntu + systemd-resolved 환경에서는 /run/systemd/resolve/resolv.conf를 kubelet에 지정
- CoreDNS 업스트림 명시로 안정성 확보 셋업