圖解-Kubernetes&OpenShift容器網絡發展
與傳統的虛擬化相比,Kubernetes容器的生命周期更短、數量密度更高、集群變更速度更快。容器網絡就必須對集群節點之間的高速通信進行充分的考量。除此之外,在企業級的容器云平臺上,承載眾多租戶的計算負載之間資源的安全隔離,也必須要考慮到的因素。
顯而易見,傳統的物理網絡架構無法滿足容器高靈活性的需求,容器網絡必須要有一種嶄新的設計架構。Kubernetes快速發展演進,其中網絡這塊發展變革最快,生態最繁榮。
容器網絡的發展,從Docker主導的CNM模型,演進到Google、CoreOS、Kubernetes主導的CNI模型。CNM與CNI并不是網絡的實現,而是網絡規范和網絡體系。當前,容器網絡CNI基本是事實的標準,除了背后開源社區的陣營不同,更多是技術迭代演進,架構優化調整。與Kubernetes在最新版本開始解耦Docker一樣。下圖是容器網絡發展脈絡,從運行效率與管理效率兩個方面推動容器持續迭代優化。
1、單節點容器網絡
容器單節點網絡,在單個容器主機,通過Bridge或者Macvlan等方式實現共享宿主機物理網卡,多個容器使用“端口映射”的方式共享容器主機IP地址。存在問題是如何進行大規模管理,容器間跨主機無需經過NAT無法直接通信。如下圖所示:
2、Kubernetes Flannel網絡
Kubernetes Flannel網絡,實現容器主機集群和跨節點Pod直連,每個容器主機分配一個網段用于容器內Pod互聯。通過VxLAN協議封裝實現Overlay容器網絡,容器IP在物理網絡上傳輸時使用物理機IP,其真實IP會被封裝在VxLAN協議中。每個機器上有一個flanneld服務進行外部網絡通信時的封包和解包。存在問題是雖然大二層帶來了連通的便利,但是管控、訪問控制、租戶隔離沒有實現,如下圖所示:
3、多租戶 + NetworkPolicy容器網絡
多租戶 + NetworkPolicy容器網絡,Openshift v3 OVS網絡就是基于這個思路已經實現。通過VxLAN實現跨集群互通,使用可編程OVS流表控制每個節點上的容器流量轉發控制,多租戶之間的網絡NetworkPolicy控制,基于Namespace級別控制,基于Pod、端口的控制。存在問題是OVS和流表依然是單機,大量的流程編程工作,SVC和LB暴露依賴iptables,性能開銷較大,如下圖所示。
4、SDN容器網絡
SDN容器網絡,隨著技術快速的發展,尤其是近幾年大型國企數字化轉型加速,各種各樣的應用容器化運行之后,OVS容器網絡的局限性開始突顯。首先就是統一控制平面效率不高。其次是OVS借助每個節點上iptables實現,iptables實現NAT時性能開銷大,同時Kubernetes Service管理復雜。最后是IPv6與Windows等新需求難以支持。
OVN是從OVS發展演進而來,是openvSwitch原生控制層實現,用于將分布式的openvSwitch交換機統一管理。OVN是集中式SDN控制器,實現集群層面做網絡編排,管理組件高可用,使用OpenFlow控制協議,利用OVS實現網絡轉發。
5、總結
OVN雖然很多功能(LB,Gateway,DNS, DHCP)依然使用OVS進行底層流量轉發,但是大幅度提升了上層應用(Openstack、Kubernetes、Openshift)的管理能力。與其他的kubernetes CNI網絡插件相比,OVN是真正的SDN!
本文轉載自微信公眾號「巨子嘉」,可以通過以下二維碼關注。轉載本文請聯系巨子嘉公眾號。