Kubernetes 클러스터의 포드에서 호스트 시스템에 연결할 수 없습니다.

Kubernetes 클러스터의 포드에서 호스트 시스템에 연결할 수 없습니다.

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 문서에 따라 이 문제가 발생하는 이유가 활성화되었습니다.

관련 정보