k8s設計了網絡模型,但是把實作交給了網絡插件,而CNI網絡插件實作的最主要的功能就是POD跨主控端資源互相通路
flannel安裝:
hdss7-21和hdss7-22 兩個幾點操作:
拷貝證書:
編輯配置檔案和啟動腳本
[root@hdss7-21
建立log目錄:
在etcd中建立配置,聲明flannel使用的網絡模型:
etcd]# ./etcdctl set /coreos.com/netwo
配置supervisior配置檔案并重載配置:
此時你可以跨節點ping通pod位址了
檢視路由規則可以看到,flannel幫我們添加了靜态路由,實際上,在flannel的host-gw網絡模型中,flannel僅僅隻是幫我們在每一台主控端上做了這樣一件事情而已,是以他的效率也是非常高的,但是host-gw網絡模型,僅支援我們的主控端在同一個2層網絡下(即主控端的網關指向同一位址),如果不通的2層網絡打通的話就需要用到Vxlan模型的網絡了:
flannel三種網絡模型設定如下:
主控端在同一網絡
'{"Network": "172.7.0.0/16", "Backend": {"Type": "host-gw"}}'
不在同一網絡
'{"Network": "172.7.0.0/16", "Backend": {"Type": "VxLAN"}}'
由flannel來判斷主控端是否在同一2層網絡下,直接路由模型
'{"Network": "172.7.0.0/16", "Backend": {"Type": "VxLAN","Directrouting": true}}'
flannel的SNAT規則優化:
預設情況下,我們的跨主控端pod之前容器的互相通信,會經過iptables的原位址轉換,這就導緻一個問題,我們在相同的二層網絡下,POD之前互相通信,卻不知道到底是哪一個pod來通路我的,可想而知,也不利于問題的排查
安裝iptables-services
删除snat規則,重新添加:
儲存iptables規則: