近日,諧云發布了基于LinuxBridge的Kubernetes網絡組件HCBridge,并正式將其在Github上開源。相比于Overlay網絡和三層網絡模式,L2的網絡模式更加能夠適應網絡安全監管的要求。項目地址為 https://github.com/harmonycloud/hcbridge
至于為什么還要HCBridge?相比于Kubernetes自帶的BridgeCNI,HC Bridge完善了VLAN的功能,使得容器網絡能夠按照Namespaces、Servic劃分不同的VLAN和IP地址范圍,細化IP地址監控和管理。雖然一些BGP的容器網絡也具備ServiceSpecIPPool的功能,但是需要精細管理服務IP地址和提高資源的使用率,IP地址分配不能夠影響資源的調度,最后會導致Pod路由會分散在不同的主機,路由條目無法聚合,路由條目數量是成為集群的規模的瓶頸。
社區overlay和路由的三層CNI較多,而L2相關的容器網絡較少被提及,而在實際的應用過程中,L2由于對底層物理環境和網絡環境有依賴,遇到問題也更加難以排查,希望通過開源HCBridge容器網絡,一起分享和討論諧云科技在實踐L2容器網絡遇到的問題和解決方法。
對于高可用物理組網結構,當物理主機雙網卡運行在bond1模式,在雙上聯主機連接不同的交換機設備時,發生主備網絡切換,會導致外部無法正常的訪問Pod;HCBridge通過利用Linuxnotify的機制,通過內核模塊監聽主備網卡切換時間,然后通知應用進程,在Bridge所連接Pod所在的ns發送GratuitousARP,更新交換機Mac:Port映射關系,使得容器網絡在出現物理網線故障、交換機掉電的情況下能夠實現故障秒級切換。
對于ClusterIP,由于ClusterIP主要是使用IPVS或者IPTABLES實現的,在啟用LinuxBridge開啟VLANfilter之后,在經過Netfilter的DNAT之后是會導致VLANtag、目的Mac和交換機的端口匹配不上,所以需要ClusterIP時,無法使用VLANfilter。
如圖所示HCBridge主要由以下四個組件:
HC-bridgecni-負責在主機上創建和配置linux網橋的CNI插件。
HC-ipam-負責分配IP地址的組件,使用ETCD存儲。
network-controller-組件提供IP池配置restfulapi,監聽kubernetes APIServer事件以回收異常的IP。
HADaemon–監控高可用組網結構下的主備網卡切換,能夠讓容器網絡能夠感知物理主備網卡故障切換。
目前HCBridge已經在github上開源,HCBridge安裝雖然比較簡單,但是由于需要使用真實IP地址,會導致安裝體驗會相對其他overlay和路由模式的CNI略顯復雜,我們也會致力于優化快速按照體驗。近期工作主要實現以下目標:
在CNI層面支持IPv6雙棧,由于公網IPv4地址已經耗盡,為了平滑過渡到IPv6,雙棧無疑是最好的選擇;
豐富IPAM的功能,支持浮動IP,隨著有狀態服務也逐漸遷移到容器浮動IP的需求也越來越多;
在啟用VLANfilter的情況下支持ClusterIP,對于使用Dubbo、SpringCloud的應用,對ClusterIP需求雖然不強烈,但是就需要其他方式來替代Kubernetes自帶的負載均衡方式,增加了運維的工作量。