kubernetes跨网段问题
k8s的master是10.10.10.0网段,新加了一些node,网段是172.16.100.0网段,造成容器直接网络不能相互访问。
部署k8s的时候也部署了flannel,它提供容器的跨主机通信支持的。部署参考 ,flannel中vxlan原理参考
二个网段不能互通,首先想到的被防火墙禁止了;尝试清理iptables防火墙,结果还是不行。iptables -P OUTPUT ACCEPT && iptables -P FORWARD ACCEPT && iptables -F && IPtables -L -n
一定要注意下清理防火墙一定要iptables -P OUTPUT ACCEPT,否则连不上就悲剧了。
然后查了etcd的Pod网段信息。发现了问题。解决如下:
> etcdctl ls -r #列出键值存储的目录
> etcdctl get /flannel/network/config #查看键值存储
{"Network":"10.233.0.0/16","SubnetLen":25,"Backend":{"Type":"host-gw","VNI":1}} #host-gw介绍如下
在数据层面,flannel支持基于路由的互联方案如host-gw、AliVPC、AWS VPC、GCE和基于封装的路由方案如UDP封装、vxlan封装、IPIP和IPSec等
1、host-gw 模式通过建立主机IP到主机上对应flannel子网的mapping,以直接路由的方式联通flannel的各个子网。这种互联方式没有vxlan等封装方式带来的负担,通过路由机制,实现flannel网络数据包在主机之间的转发。但是这种方式也有不足,那就是所有节点之间都要相互有点对点的路由覆盖,并且所有加入flannel网络的主机需要在同一个LAN里面
2、VXLAN 是一个在已有的3层物理网络上构建2层逻辑网络的协议。参考了如下资料。
- vxlan 协议原理简介 https://cizixs.com/2017/09/25/vxlan-protocol-introduction/
- VXLAN技术研究 https://blog.csdn.net/sinat_31828101/article/details/50504656
- Flannel中vxlan backend的原理和实现 http://dockone.io/article/2216
> etcdctl set /flannel/network/config '{"Network":"10.233.0.0/16","SubnetLen":25,"Backend":{"Type":"vxlan","VNI":1}}' #修改成vxlan
> route # 重启flannel后 查看路由
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 300 0 0 bond0
10.233.20.128 0.0.0.0 255.255.255.128 U 0 0 0 docker0
10.233.21.0 10.233.21.0 255.255.255.128 UG 0 0 0 flannel.1
10.233.27.0 10.233.27.0 255.255.255.128 UG 0 0 0 flannel.1