Skip to content

Latest commit

 

History

History
82 lines (64 loc) · 2.8 KB

File metadata and controls

82 lines (64 loc) · 2.8 KB

新集群部署业务后,pod 内无法连接到数据库 dial tcp ip:3306: i/o timeout

该案例是客户提供的机器上部署 k8s 后,业务部署遇到问题,现场实施排查到有个服务 pod 无法访问到数据库:

dial tcp 10.xxx.xx.xx:3306: i/o timeout

排查

该 pod 节点上探测下数据库端口是否可达,可能本机 IP 不在数据库白名单里,或者远端数据库端口没监听:

$ telnet 10.xxx.xx.xx 3306
Trying 10.xxx.xx.xx....
COnnect to 10.xxx.xx.xx.
Escape character is '^]'
....

说明 IP:Port 可达,使用 nsenter 进入 pod 网络内探测下:

# 找到 pod 所在的容器 ID,容器没起来则使用对应的 /pause 的容器 ID ,inspect 取 Pid
$ docker inspect xxxxx | grep -m1 Pid
         "Pid": 2018877,
$ nsenter --net -t 2018877 telnet 10.xxx.xx.xx 3306
Trying 10.xxx.xx.xx....
telnet: connect to address 10.xxx.xx.xx: No route to host

奇怪了,看下 ip 和路由:

$ nsenter --net -t 2018877 ip a s 
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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default 
    link/ether fe:31:23:1f:55:2a brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.88.0.3/16 brd 10.88.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::fc31:23ff:fe1f:552a/64 scope link 
       valid_lft forever preferred_lft forever

IP 奇怪,我们的 Pod CIDR 不是这个网段的:

$ ip a s cni0
7: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
    link/ether 32:70:aa:c6:eb:fc brd ff:ff:ff:ff:ff:ff
    inet 10.187.4.1/24 brd 10.187.0.255 scope global cni0
       valid_lft forever preferred_lft forever
    inet6 fe80::3070:aaff:fec6:ebfc/64 scope link 
       valid_lft forever preferred_lft forever

Pod IP 是由 kubelet 拉起的时候调用 cni plugin 二进制 + /etc/cni/net.d 下的 cni 配置文件设置的,这个一般是有其他 cni-conf 文件,让现场查看了下:

$ ls -l /etc/cni/net.d
total 8
-rw-r--r-- 1 root root 292 Dec 17 17:38 10-flannel.conflist
-rw-r--r-- 1 root root 483 Aug 16  2021 87-podman-bridge.conflist

客户给的机器不干净,应该有安装 podman:

$ rpm -qa | grep podman
podman-0.10.1-8.ky10.x86_64

让现场去问客户有没有使用到,确认没有使用后卸载删掉该文件,删除下错误 IP 的 Pod 后正常了。

链接