Pod内无法访问api-server

Pod内无法访问Api-server

作者万绍远
团队Filed&&Suppoort
编写时间2020/10/28
类型常见问题-网络相关

问题现象

部署集群后发现集群内部分系统组件无法正常启动,查看日志报错如下

10.43.0.1对应的是连接集群Api-server的地址,此Service记录默认创建在default命名空间中

在集群内启动Buybox:1.28进行测试验证,副本数为2,分布到不同的节点

测试方法:
1、POD之间进行跨主机网络通信(pass)
2、在POD内telnet 10.43.0.1的443端口(不可通信)
3、在POD内ping非本POD所在宿主机的IP(不可通信)

问题原因

canal网络整体转发路径

问题原因主要是因为在POD内无法与Master节点的所在宿主机IP进行通信,因为10.43.0.1最终是会通过iptables DNAT到master节点的443端口

在master节点抓包分析

通过抓包可以看见在对应网卡上有收到pod发送过来的icmp的Request包

1、发现源IP还是POD的IP,正常情况下canal访问非集群内网络地址ip会进行SNAT成宿主机的IP。

查看master节点路由

路由走的flannel.1网卡,另外发包的源IP使用的是本机的flannel.1 ip,造成的问题就是默认情况下Linux是开启了反向路径过滤功能,如果一个数据包出入非同一块网卡会被Linux进行反向过滤掉。

主要原因是因为发出来的数据包没有进行SNAT成宿主机的IP,通过排除,发现是canal配置文件内定义的pod-cidr与实际在controller-manager内的配置冲突,导致POD实际上分配的是controller-manager内配置的所以POD-ip访问外部网络没有自动进行SNAT和flannel.1不进行转发

问题解决

将canal配置文件中的POD-cidr范围修改与controller-manager中一致。

最后由 袁振更新 于