不使用Service的Kubernetes Pod路由问题:Jenkins无法访问containerlab节点
问题:Jenkins无法ping通dind Pod内的containerlab网段节点
环境信息
- Kind集群节点:c9s-control-plane
- Jenkins Pod IP:10.244.0.6
- dind Pod IP:10.244.0.9
- dind内部署的containerlab网段:172.20.20.0/24
- c9s-control-plane网络信息:Pod网关为10.244.0.1,eth0网卡网段172.19.0.0/16
问题描述
已配置路由规则,Jenkins可以ping通dind Pod,但无法ping通containerlab网段内的节点(如172.20.20.2、172.20.20.3);添加NetworkPolicy后,Jenkins能ping通containerlab网关172.20.20.1,但仍无法访问网段内其他节点。
各节点路由表
Jenkins Pod路由表
default via 10.244.0.1 dev eth0 10.244.0.0/24 via 10.244.0.1 dev eth0 src 10.244.0.6 10.244.0.1 dev eth0 scope link src 10.244.0.6 172.20.20.0/24 via 10.244.0.1 dev eth0
dind Pod路由表
dink-7f64f88747-nhgnt:/# ip route default via 10.244.0.1 dev eth0 10.244.0.0/24 via 10.244.0.1 dev eth0 src 10.244.0.9 10.244.0.1 dev eth0 scope link src 10.244.0.9 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 172.20.20.0/24 dev br-44150f9313a2 proto kernel scope link src 172.20.20.1
c9s-control-plane路由表
default via 172.19.0.1 dev eth0 10.244.0.2 dev vethd5a5bf09 scope host 10.244.0.3 dev vethb5b4f2c3 scope host 10.244.0.4 dev vethf4d2d278 scope host 10.244.0.6 dev veth69ac8af4 scope host 10.244.0.7 dev vethddc7804d scope host 10.244.0.9 dev veth107ab5da scope host 10.244.0.10 dev vethe2ad53b8 scope host blackhole 10.244.107.128/26 proto bird 172.19.0.0/16 dev eth0 proto kernel scope link src 172.19.0.2 172.20.20.0/24 via 10.244.0.1 dev vethd5a5bf09
已配置的NetworkPolicy
--- apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-jenkins-to-containerlab spec: podSelector: matchLabels: app: dink # 如需指定特定Pod可修改 ingress: - from: - podSelector: matchLabels: app: jenkins # 匹配Jenkins Pod标签 ports: - protocol: TCP port: 2375 # Docker API监听端口 - protocol: TCP port: 8888 # VNC客户端连接端口 egress: - to: - podSelector: matchLabels: app: dink # 允许向Dink Pod发起出站请求
解决方案建议
开启dind Pod的IP转发功能
- 进入dind Pod执行
sysctl net.ipv4.ip_forward,若返回值为0,执行sysctl -w net.ipv4.ip_forward=1开启转发。 - 为保证该配置持久化,需在dind的Pod定义中添加
securityContext: privileged: true,或通过init容器预先配置sysctl参数。
- 进入dind Pod执行
修正c9s-control-plane的路由条目
- 当前control-plane上的
172.20.20.0/24 via 10.244.0.1 dev vethd5a5bf09路由错误,应指向dind Pod的IP 10.244.0.9:ip route del 172.20.20.0/24 via 10.244.0.1 dev vethd5a5bf09 ip route add 172.20.20.0/24 via 10.244.0.9 dev veth107ab5da - 若要持久化路由,可在control-plane节点添加路由配置文件,或通过集群网络插件(如Calico)配置静态路由。
- 当前control-plane上的
调整NetworkPolicy允许ICMP流量
- 当前规则仅开放TCP端口,ping依赖ICMP协议,需在ingress规则中添加ICMP允许:
ingress: - from: - podSelector: matchLabels: app: jenkins ports: - protocol: TCP port: 2375 - protocol: TCP port: 8888 # 添加ICMP允许规则 - protocol: ICMP - 同时检查dind Pod内的iptables规则,确保FORWARD链未拦截来自Jenkins的ICMP请求。
- 当前规则仅开放TCP端口,ping依赖ICMP协议,需在ingress规则中添加ICMP允许:
检查containerlab节点的网络配置
- 进入dind Pod,查看containerlab节点的路由表,确认其默认网关指向172.20.20.1。
- 检查containerlab节点的防火墙规则,确保允许来自10.244.0.0/24网段的ICMP请求。
内容的提问来源于stack exchange,提问作者sjj
相关产品推荐
相关产品推荐

