๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[Error Handling]

๐Ÿ˜ก kubernetes coredns | HINFO: read udp xxx read: no route to host ๊ด€๋ จ ํ•ด๊ฒฐ(ํŒŒ๋“œ ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€ ์—ฐ๊ฒฐ ์‹คํŒจ)

by ํŒกํŽ‘ํ 2025. 1. 6.
728x90

๐Ÿšจ Error :

$ k get po -A
NAMESPACE      NAME                                 READY   STATUS    RESTARTS   AGE
kube-flannel   kube-flannel-ds-xxxxx                1/1     Running   0          52s
kube-flannel   kube-flannel-ds-xxxxx                1/1     Running   0          52s
kube-system    coredns-xxxxxxxxxx-xxxxx             1/1     Running   0          8m57s
kube-system    coredns-xxxxxxxxxx-xxxxx             1/1     Running   0          8m57s
kube-system    etcd-xxxxx                           1/1     Running   0          9m4s
kube-system    kube-apiserver-xxxxx                 1/1     Running   0          9m4s
kube-system    kube-controller-managerxxxxx         1/1     Running   0          9m4s
kube-system    kube-proxy-xxxxx                     1/1     Running   0          8m57s
kube-system    kube-proxy-xxxxx                     1/1     Running   0          88s
kube-system    kube-scheduler-xxxxx                 1/1     Running   0          9m4s
  • master์™€ worker node์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋ณด๋ฉด ์ด๋Ÿฌํ•œ ์ƒํƒœ๊ฐ€ ๋˜์–ด์žˆ๋‹ค.
  • ์ฐธ๊ณ ๋กœ ๋‚˜๋Š” oracle linux 8.10์— Kubernetes 1.32v, CNI ํ”Œ๋Ÿฌ๊ทธ์ธ์€ flannel์„ ์‚ฌ์šฉ ์ค‘์ด๋‹ค. 
  • ์–ธ๋œป ๋ณด๊ธฐ์—๋Š” ์ œ๋Œ€๋กœ ์„ค์น˜๋œ ๊ฒƒ ๊ฐ™๋‹ค.
  • ์—ฌ๊ธฐ์„œ ํ…Œ์ŠคํŠธ ํŒŒ๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

 

๐Ÿšจ busybox.yaml ์ƒ์„ฑ

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  labels:
    app: busybox
spec:
  containers:
    - name: busybox
      image: busybox:latest
      command:
        - sleep
        - "3600" # Pod๊ฐ€ 1์‹œ๊ฐ„ ๋™์•ˆ ์‹คํ–‰๋จ. ํ•„์š”์‹œ ๊ฐ’์„ ๋ณ€๊ฒฝ.
  restartPolicy: Always

 

๐Ÿšจ ํŒŒ๋“œ ์‹คํ–‰

$ k apply -f busybox.yaml 
pod/busybox created
$ k get po -A
NAMESPACE      NAME                                 READY   STATUS    RESTARTS   AGE
default        busybox                              1/1     Running   0          7s
  • ํŒŒ๋“œ๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค.

 

๐Ÿšจ DNS ์ •๋ณด ์กฐํšŒํ•˜๊ธฐ

# master node

# ๊ตฌ๊ธ€ ์›น์‚ฌ์ดํŠธ dns ์ •๋ณด ์กฐํšŒ
$ nslookup google.com
Server:         169.254.169.254
Address:        169.254.169.254#53

Non-authoritative answer:
Name:   google.com
Address: 142.250.198.14
Name:   google.com
Address: 2404:6800:4004:822::200e

# ํ•‘ ๋ณด๋‚ด๋ณด๊ธฐ
$ ping 142.250.198.14
PING 142.250.198.14 (142.250.198.14) 56(84) bytes of data.
64 bytes from 142.250.198.14: icmp_seq=1 ttl=120 time=36.1 ms
64 bytes from 142.250.198.14: icmp_seq=2 ttl=120 time=36.1 ms
64 bytes from 142.250.198.14: icmp_seq=3 ttl=120 time=36.1 ms
--- 142.250.198.14 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 36.069/36.077/36.083/0.219 ms
  • ํŒŒ๋“œ ๋‚ด๋ถ€ ์ ‘์†๋ฅผ ํ•˜๊ธฐ ์ „์— kubectl ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•  ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ ๊ตฌ๊ธ€ ์›น์‚ฌ์ดํŠธ์˜ dns ์ •๋ณด๋ฅผ ์กฐํšŒํ•ด ๋ณด์ž.
  • nslookup์ด๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ทธ๋Ÿผ ํ•ด๋‹น ๋„๋ฉ”์ธ์˜ ip ์ฃผ์†Œ๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, ์ด ip ์ฃผ์†Œ๋กœ ping๋„ ์ž˜ ๋ณด๋‚ด์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค.

 

๐Ÿšจ ํŒŒ๋“œ ๋‚ด๋ถ€ ์ ‘์†

# ํŒŒ๋“œ ๋‚ด๋ถ€ ์ ‘์†
$ k exec -it busybox -- sh

# ping ๋‚ ๋ ค๋ณด๊ธฐ
/ # ping 142.250.198.14
PING 142.250.198.14 (142.250.198.14): 56 data bytes
64 bytes from 142.250.198.14: seq=0 ttl=119 time=42.431 ms
64 bytes from 142.250.198.14: seq=1 ttl=119 time=42.463 ms
--- 142.250.198.14 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 42.431/42.447/42.463 ms
  • ping์„ ๋ณด๋‚ด๋„ ์‘๋‹ต์„ ์ž˜ ๋ฐ›๋Š”๋‹ค.
    • ์ฆ‰, kubernetes ์„ค์น˜ ์ „ ํ›„๋กœ ํŠน๋ณ„ํ•œ ์„ค์ •์„ ํ•ด๋†“์ง€ ์•Š๋Š” ์ด์ƒ pod ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€๋กœ์˜ ์š”์ฒญ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ง‰์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿผ dns ์ •๋ณด ์กฐํšŒ๋Š” ์–ด๋–จ๊นŒ?

 

๐Ÿšจ ํŒŒ๋“œ ๋‚ด๋ถ€์—์„œ DNS ์ •๋ณด ์กฐํšŒ

/ # nslookup google.com
Server:         10.96.0.10
Address:        10.96.0.10:53

** server can't find google.com: SERVFAIL

*** Can't find google.com: No answer
  • ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ๋‚˜์˜จ๋‹ค.
  • ์ด๊ฒŒ ๋ฌธ์ œ์˜€๋‹ค.
  • ๋‚˜๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ ์„œ๋ฒ„๋ฅผ ๋„์šฐ๊ณ  ํ•ด๋‹น ์Šคํ”„๋ง๋ถ€ํŠธ ์„œ๋ฒ„๊ฐ€ ์™ธ๋ถ€ API ํ†ต์‹ ์„ ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋„๋ฉ”์ธ ์ฃผ์†Œ๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด ๊ณ„์† ์‹คํŒจํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.


๐Ÿค“ ์›์ธ :

๐Ÿค“ ๋งˆ์Šค์ปค๋ ˆ์ด๋”ฉ(Masquerading)

  • ๋งˆ์Šค์ปค๋ ˆ์ด๋”ฉ์€ SNAT(Source Network Address Translation)์˜ ์ผ์ข…์ด๋‹ค.
  • ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์˜ IP ์ฃผ์†Œ๋ฅผ ์™ธ๋ถ€๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ NAT(Network Address Translation)๋ฅผ ํ†ตํ•ด ์ถœ๋ฐœ์ง€ IP๋ฅผ ๋ฐฉํ™”๋ฒฝ์˜ IP๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์™ธ๋ถ€ ์‘๋‹ต์ด ๋“ค์–ด์˜ฌ ๋•Œ ์›๋ž˜ ์ถœ๋ฐœ์ง€๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋‹ค์‹œ ์ „๋‹ฌํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

๐Ÿค“ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€์˜ ๊ด€๊ณ„

  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋งˆ์Šค์ปค๋ ˆ์ด๋”ฉ ์„ค์ •์€ Pod ๋„คํŠธ์›Œํฌ์™€ ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ ๊ฐ„์˜ ํ†ต์‹ ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์š”ํ•˜๋‹ค.

1. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋งˆ์Šค์ปค๋ ˆ์ด๋”ฉ์˜ ํ•„์š”์„ฑ

  • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ Pod๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ ๊ณ ์œ ํ•œ IP(ClusterCIDR)๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด IP๋Š” ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ์˜ Pod๊ฐ€ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ, ๋งˆ์Šค์ปค๋ ˆ์ด๋”ฉ์„ ํ†ตํ•ด Pod์˜ IP ์ฃผ์†Œ๋ฅผ ๋…ธ๋“œ์˜ IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.
  • ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ๋Š” ๋ณ€ํ™˜๋œ ๋…ธ๋“œ IP๋ฅผ ๋ณด๊ณ  ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์˜ Pod๋กœ ์ •์ƒ์ ์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค.

2. ๋งˆ์Šค์ปค๋ ˆ์ด๋”ฉ ์„ค์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ

  • Flannel, Calico์™€ ๊ฐ™์€ CNI(Container Network Interface) ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์‚ฌ์šฉํ•˜๋Š” Pod ๋„คํŠธ์›Œํฌ๊ฐ€ ์™ธ๋ถ€์™€ ํ†ต์‹ ํ•ด์•ผ ํ•  ๋•Œ
  • ํด๋Ÿฌ์Šคํ„ฐ์—์„œ SNAT๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
  • Pod๊ฐ€ ์™ธ๋ถ€ ์ธํ„ฐ๋„ท์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜, ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์˜ ๋ฆฌ์†Œ์Šค(API ์„œ๋ฒ„ ๋“ฑ)์™€ ํ†ต์‹ ํ•ด์•ผ ํ•  ๋•Œ ๋“ฑ์ด ์žˆ๋‹ค.

3. ๋งˆ์Šค์ปค๋ ˆ์ด๋”ฉ ์—†์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ

  • ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ Pod๊ฐ€ ์ธํ„ฐ๋„ท์œผ๋กœ ๋‚˜๊ฐ€๋Š” ์š”์ฒญ์— ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Œ.
  • ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์šฐํŒ… ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ.

๐Ÿš’ ํ•ด๊ฒฐ :

 

๐Ÿš’  ๋งˆ์Šค์ปค๋ ˆ์ด๋”ฉ ํ—ˆ์šฉํ•˜๊ธฐ

# masquerade: no -> yes๋กœ ๋ณ€๊ฒฝ
$ sudo firewall-cmd --add-masquerade --permanent

# ๋ฆฌ๋กœ๋“œ
$ sudo firewall-cmd --reload

# coredns restart
$ kubectl -n kube-system rollout restart deployment coredns
  • ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์™€ ์›Œ์ปค ๋…ธ๋“œ์—์„œ ๋ฐฉํ™”๋ฒฝ์— ๋งˆ์Šค์ปค๋ ˆ์ด๋”ฉ์„ ํ—ˆ์šฉํ•˜๊ณ , coredns ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ ์žฌ์‹œ์ž‘ํ•œ๋‹ค.

 

๐Ÿš’  ํŒŒ๋“œ ๋‚ด๋ถ€์—์„œ DNS ์ •๋ณด ๋‹ค์‹œ ์กฐํšŒํ•˜๊ธฐ

$ k exec -it busybox -- sh
/ # nslookup google.com
Server:         10.96.0.10
Address:        10.96.0.10:53

Non-authoritative answer:
Name:   google.com
Address: 2404:6800:4004:828::200e

Non-authoritative answer:
Name:   google.com
Address: 142.250.196.142
  • ์ •์ƒ์ ์œผ๋กœ ํŒŒ๋“œ ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€๋กœ DNS๋ฅผ ํ†ตํ•œ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค!


๐Ÿค” ์˜๋ฌธ์  :

์—†์Œ.

 

 

 

์ฐธ๊ณ 

https://stackoverflow.com/questions/68213989/kubedns-no-route-to-host-for-kubernetes-default

728x90