
Pod cidr 범위가 10.244.0.0/16인 Fedora Linux KVM 가상화 환경에서 kubeadm을 사용하여 마스터 1개와 작업자 kubernetes 클러스터 설정 1개가 있습니다. 플란넬 네트워킹 정책을 사용합니다.
마스터 노드: 호스트 이름 - fedkubemaster IP 주소 - 192.168.122.161 작업 노드: 호스트 이름 - fedkubenode IP 주소 - 192.168.122.27 (참고 - 내 호스트 FQDN은 DNS를 확인할 수 없습니다.)
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
fedkubemaster Ready control-plane,master 2d20h v1.23.3 192.168.122.161 <none> Fedora Linux 35 (Workstation Edition) 5.15.16-200.fc35.x86_64 docker://20.10.12
fedkubenode Ready <none> 2d6h v1.23.3 192.168.122.27 <none> Fedora Linux 35 (Workstation Edition) 5.15.16-200.fc35.x86_64 docker://20.10.12
마스터 노드, 워커 노드에서의 경로는 다음과 같습니다.
[admin@fedkubemaster ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.122.1 0.0.0.0 UG 100 0 0 enp1s0
10.244.0.0 0.0.0.0 255.255.255.0 U 0 0 0 cni0
10.244.1.0 10.244.1.0 255.255.255.0 UG 0 0 0 flannel.1
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-25b1faebd814
192.168.122.0 0.0.0.0 255.255.255.0 U 100 0 0 enp1s0
[admin@fedkubenode ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.122.1 0.0.0.0 UG 100 0 0 enp1s0
10.244.0.0 10.244.0.0 255.255.255.0 UG 0 0 0 flannel.1
10.244.1.0 0.0.0.0 255.255.255.0 U 0 0 0 cni0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.122.0 0.0.0.0 255.255.255.0 U 100 0 0 enp1s0
내 호스트 컴퓨터에 대한 연결을 테스트하기 위해 이 dnsutil pod yml 정의를 사용하고 있습니다.
apiVersion: v1
kind: Pod
metadata:
name: dnsutils
namespace: default
spec:
containers:
- name: dnsutils
image: k8s.gcr.io/e2e-test-images/jessie-dnsutils:1.3
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always
다음은 dnsutils 포드 내의 내 IP 주소와 IP 경로 표시 출력입니다.
root@dnsutils:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default
link/ether 7a:50:37:bc:4b:45 brd ff:ff:ff:ff:ff:ff
inet 10.244.1.2/24 brd 10.244.1.255 scope global eth0
valid_lft forever preferred_lft forever
root@dnsutils:/#
root@dnsutils:/# ip route show
default via 10.244.1.1 dev eth0
10.244.0.0/16 via 10.244.1.1 dev eth0
10.244.1.0/24 dev eth0 proto kernel scope link src 10.244.1.2
호스트 컴퓨터 FQDN에 대해 nslookup 및 ping을 수행하려고 하는데 해결되지 않습니다. 그런 다음 마스터 노드가 패킷 필터링으로 출력을 표시하고 작업자 노드가 IP 주소로 응답할 수 있는 해당 IP 주소로 ping을 시도했습니다.
root@dnsutils:/# nslookup fedkubemaster
;; connection timed out; no servers could be reached
root@dnsutils:/# nslookup fedkubenode
;; connection timed out; no servers could be reached
root@dnsutils:/# ping fedkubemaster
ping: unknown host fedkubemaster
root@dnsutils:/# ping fedkubenode
ping: unknown host fedkubenode
root@dnsutils:/# ping 192.168.122.161
PING 192.168.122.161 (192.168.122.161) 56(84) bytes of data.
From 10.244.1.1 icmp_seq=1 Packet filtered
From 10.244.1.1 icmp_seq=2 Packet filtered
^C
--- 192.168.122.161 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1013ms
root@dnsutils:/# ping 192.168.122.27
PING 192.168.122.27 (192.168.122.27) 56(84) bytes of data.
64 bytes from 192.168.122.27: icmp_seq=1 ttl=64 time=0.286 ms
64 bytes from 192.168.122.27: icmp_seq=2 ttl=64 time=0.145 ms
문제는 내 호스트 시스템 FQDN을 Pod 내에서 확인할 수 있도록 하고 싶지만 어떻게 해결할 수 있는지 이해할 수 없다는 것입니다. coredns 로그에도 반영되는 포드 내에서 내 호스트 FQDN을 확인할 수 있는 경로가 없는 것 같습니다. 여기에 오류가 있습니다.
[admin@fedkubemaster networkutils]$ kubectl logs -f coredns-64897985d-8skq2 -n kube-system
.:53
[INFO] plugin/reload: Running configuration MD5 = db32ca3650231d74073ff4cf814959a7
CoreDNS-1.8.6
linux/amd64, go1.17.1, 13a9191
[ERROR] plugin/errors: 2 2603559064493035223.1593267795798361043. HINFO: read udp 10.244.0.2:38440->192.168.122.1:53: read: no route to host
[ERROR] plugin/errors: 2 2603559064493035223.1593267795798361043. HINFO: read udp 10.244.0.2:34275->192.168.122.1:53: read: no route to host
어쨌든 기본적으로 포드에 경로를 추가할 수 있지만 문제를 해결하는 데 익숙하지 않은 경우가 있는지 알아내려고 노력 중입니다.
제안해주세요. 다른 세부정보가 필요한 경우 알려주시기 바랍니다.
감사합니다 수디르
답변1
마스터와 작업자 모두에서 방화벽 서비스를 일시적으로 비활성화하여 문제를 해결할 수 있었습니다.
[admin@fedkubemaster ~]$ sudo systemctl stop firewalld.service
[admin@fedkubemaster ~]$ sudo systemctl disable firewalld.service
[admin@fedkubenode ~]$ sudo systemctl stop firewalld.service
[admin@fedkubenode ~]$ sudo systemctl disable firewalld.service
하지만 그 모든 일에도 불구하고 왜 그런지 이해해야 할 것은 여전히 있습니다.필수 포트kubernetes 문서에 따라 이 문제가 발생하는 이유가 활성화되었습니다.