1. Trouble Shooting
Kubernetes에 배치된 CoreDNS Pod가 루프를 감지하면 CoreDNS Pod는 "CrashLoopBackOff"로 시작한다. Kubernetes는 CoreDNS가 루프를 감지하고 나올 때마다 Pod를 다시 시작하려고 하기 때문이다.
[admin@ubu22-01 ~ (kubernetes-admin@cluster.local:kube-system)]$ kgp NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ... nodelocaldns-gbbh4 1/1 CrachLoopBackOff 0 14s 192.168.100.40 ubu22-02 <none> <none> nodelocaldns-m8pwg 1/1 CrachLoopBackOff 0 21s 192.168.100.50 ubu22-03 <none> <none> nodelocaldns-rx5pf 1/1 CrachLoopBackOff 0 17s 192.168.100.30 ubu22-01 <none> <none> |
쿠버네티스 클러스터에서 루프를 포워딩하는 일반적인 원인은 호스트 노드의 로컬 DNS 캐시(예: systemd-resolved)와의 상호작용이다.
예를 들어, 특정 구성에서 systemd-resolved는 루프백 주소 127.0.0.53을 네임 서버로 /etc/resolv.conf에 넣는다.
admin@ubu22-02:~/Desktop$ cat /etc/resolv.conf --- ... nameserver 127.0.0.53 options edns0 trust-ad search . ... |
기본적으로 쿠버네티스는 기본적으로 이 /etc/resolv.conf 파일을 기본 DNS 정책을
사용하여 모든 포드에 전달하여 DNS 검색을 수행할 수 없게 한다. (여기에는 CoreDNS
Pods도 포함된다.) CoreDNS는 요청을 포워딩할 업스트림 목록으로 이 /etc/resolv.conf를
사용한다. 루프백 주소를 포함하므로 CoreDNS는 결국 자신에게 요청을 포워딩한다.
이 문제를 해결하는 데는 여러 가지 방법이 있으며, 다음과 같은 몇 가지 방법이 나열되어
있다.
다음을 kubelet 구성 yaml: resolvConf: <path-to-your-real-resolv-conf-file>(또는 명령줄
플래그 --resolv-conf는 1.10에서 사용되지 않음)에 추가한다. "진짜" resolv.conf는
업스트림 서버의 실제 IP가 포함된 주소이며 로컬/루프백 주소는 없다.
[admin@ubu22-01 ~/Documents (kubernetes-admin@cluster.local:kube-system)]$ cat /etc/systemd/resolved.conf --- [Resolve] DNS=169.254.25.10 DNS=8.8.8.8 # DNS를 추가해주면 loop를 빠져 나올 수 있다. FallbackDNS= Domains= #LLMNR=no #MulticastDNS=no DNSSEC=no Cache=no-negative #DNSStubListener=yes ... |
이 플래그는 kubelet이 대체 resolv.conf를 Pods에 전달하도록 알려준다.
systemd-resolved를 사용하는 시스템의 경우 일반적으로
/run/systemd/resolv/resolv.conf 경로가 "real" resolv.conf의 위치이지만 분포에 따라 다를
수 있다.
[admin@ubu22-01 ~/Documents (kubernetes-admin@cluster.local:kube-system)]$ cat /run/systemd/resolve/resolv.conf --- ... nameserver 169.254.25.10 nameserver 8.8.8.8 # 시스템 데몬의 설정이다. 리부트 시 값이 기본 설정으로 돌아올 수 있다. search . ... |
호스트 노드에서 로컬 DNS 캐시를 사용하지 않도록 설정하고 /etc/resolv.conf 파일을 원상태로 복원한다. 수정은 코어 파일을 편집하여 forward . /etc/resolv.conf를 업스트림 DNS의 IP 주소(예: forward .8.8.8)로 바꾸는 것이다. 그로인해 CoreDNS의 문제만 해결되고, kubelet은 잘못된 resolv.conf 파일을 모든 기본 DNS 정책 포드에 계속 전달하므로 DNS를 확인할 수 없다.
[admin@ubu22-01 Documents (kubernetes-admin@cluster.local:kube-system)]$ kgp NAME READY STATUS RESTARTS AGE IP ......... ubu22-01 <none> <none> kube-proxy-r7wfm 1/1 Running 4 (3h19m ago) 2d23h 192.168.100.130 ubu22-03 <none> <none> kube-scheduler-ubu22-01 1/1 Running 6 (3h19m ago) 2d23h 192.168.100.128 ubu22-01 <none> <none> kubernetes-dashboard-7bd65c8b9d-d2wsk 1/1 Running 7 (3h19m ago) 2d23h 10.233.109.34 ubu22-03 <none> <none> kubernetes-metrics-scraper-7588fd8cb8-l98gr 1/1 Running 0 90m 10.233.84.78 ubu22-01 <none> <none> nginx-proxy-ubu22-02 1/1 Running 5 (82m ago) 2d23h 192.168.100.129 ubu22-02 <none> <none> nginx-proxy-ubu22-03 1/1 Running 4 (3h19m ago) 2d23h 192.168.100.130 ubu22-03 <none> <none> nodelocaldns-bfwr4 1/1 Running 6 (3h19m ago) 18h 192.168.100.128 ubu22-01 <none> <none> nodelocaldns-gchb7 1/1 Running 3 (82m ago) 18h 192.168.100.129 ubu22-02 <none> <none> nodelocaldns-pvfxc 1/1 crashloopbackoff 2 (3h19m ago) 18h 192.168.100.130 ubu22-03 <none> <none> |
[admin@ubu22-01 Documents (kubernetes-admin@cluster.local:kube-system)]$ k delete pod nodelocaldns-pvfxc pod "nodelocaldns-pvfxc" deleted # 위 설정 후 crashloopbackoff 상태의 노드 pod를 삭제한다. |
[admin@ubu22-01 Documents (kubernetes-admin@cluster.local:kube-system)]$ kgp NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ............... ubu22-01 <none> <none> kube-proxy-r7wfm 1/1 Running 4 (3h25m ago) 2d23h 192.168.100.130 ubu22-03 <none> <none> kube-scheduler-ubu22-01 1/1 Running 6 (3h25m ago) 2d23h 192.168.100.128 ubu22-01 <none> <none> kubernetes-dashboard-7bd65c8b9d-d2wsk 1/1 Running 7 (3h25m ago) 2d23h 10.233.109.34 ubu22-03 <none> <none> kubernetes-metrics-scraper-7588fd8cb8-l98gr 1/1 Running 0 96m 10.233.84.78 ubu22-01 <none> <none> nginx-proxy-ubu22-02 1/1 Running 5 (88m ago) 2d23h 192.168.100.129 ubu22-02 <none> <none> nginx-proxy-ubu22-03 1/1 Running 4 (3h25m ago) 2d23h 192.168.100.130 ubu22-03 <none> <none> nodelocaldns-bfwr4 1/1 Running 6 (3h25m ago) 18h 192.168.100.128 ubu22-01 <none> <none> nodelocaldns-gchb7 1/1 Running 3 (88m ago) 18h 192.168.100.129 ubu22-02 <none> <none> nodelocaldns-5z96g 1/1 Running 0 4s 192.168.100.130 ubu22-03 <none> <none> |