Não é possível acessar a máquina host do pod no cluster Kubernetes

Não é possível acessar a máquina host do pod no cluster Kubernetes

Eu tenho 1 cluster master e 1 trabalhador kubernetes configurado usando kubeadm no ambiente de virtualização KVM Fedora linux com intervalo pod cidr - 10.244.0.0/16. Usando política de rede de flanela.

Nó mestre: nome do host - endereço IP do fedkubemaster - 192.168.122.161 Nó trabalhado: nome do host - endereço IP do fedkubenode - 192.168.122.27 (NOTA - Meus FQDNs de host não podem ser resolvidos por 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

Aqui está minha rota do nó mestre, nó de trabalho

[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

Estou usando esta definição dnsutil pod yml para testar minha conectividade com minhas máquinas host

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

Aqui está minha saída ip addr e ip route show de dentro do pod dnsutils.

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 

Estou tentando fazer um nslookup e executar ping no FQDN de minhas máquinas host e isso não resolve. Então tentei fazer ping com seu respectivo endereço IP no qual o nó mestre mostra a saída como pacote filtrado e o nó de trabalho é capaz de responder com endereço IP.

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

O problema é que desejo que o FQDN de minhas máquinas host possa ser resolvido de dentro do pod, mas não consigo entender como posso consertar isso. Parece que não há rota para resolver o FQDN do meu host de dentro do pod, o que também está refletindo nos logs do coredns. Aqui está o erro.

[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

Estou tentando descobrir se existe alguma maneira de adicionar a rota aos pods por padrão, mas não estou familiarizado com eles para corrigi-lo.

Por favor sugira. Deixe-me saber se quaisquer outros detalhes são necessários.

Obrigado Sudhir

Responder1

Consegui resolver meu problema desativando temporariamente o serviço de firewall no mestre e no trabalhador.

[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

Mas o que ainda preciso entender é por que, embora todos osportas necessáriasde acordo com a documentação do kubernetes foram ativados porque isso estava causando esse problema.

informação relacionada