kubernetes跨網段問題
k8s的master是10.10.10.0網段,新加了一些node,網段是172.16.100.0網段,形成容器直接網絡不能相互訪問。html
部署k8s的時候也部署了flannel,它提供容器的跨主機通訊支持的。部署參考 ,flannel中vxlan原理參考node
二個網段不能互通,首先想到的被防火牆禁止了;嘗試清理iptables防火牆,結果仍是不行。iptables -P OUTPUT ACCEPT && iptables -P FORWARD ACCEPT && iptables -F && IPtables -L -n
必定要注意下清理防火牆必定要iptables -P OUTPUT ACCEPT,不然連不上就悲劇了。python
而後查了etcd的Pod網段信息。發現了問題。解決以下:linux
> 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等docker
一、host-gw 模式經過創建主機IP到主機上對應flannel子網的mapping,以直接路由的方式聯通flannel的各個子網。這種互聯方式沒有vxlan等封裝方式帶來的負擔,經過路由機制,實現flannel網絡數據包在主機之間的轉發。可是這種方式也有不足,那就是全部節點之間都要相互有點對點的路由覆蓋,而且全部加入flannel網絡的主機須要在同一個LAN裏面網絡
二、VXLAN 是一個在已有的3層物理網絡上構建2層邏輯網絡的協議。參考了以下資料。app
- 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