kubernetes跨網段pod網絡不通問題

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

> 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
相關文章
相關標籤/搜索