1、開源云原生計算時代論壇專場張智博 2021年08月1日實現基于 Macvlan 的高性能容器網絡About Men 張智博(牛小腩),深耕云計算多年,Openstack-Docker-Kubernetesn Rancher-SUSEn Rancher中國研發總監n SUSE中國研發總監n 長期聚焦在Linux+Container開源技術棧n Rancher 1.x-Rancher 2.xn RancherOS-K3OS-SUSE China Linuxn Base在沈陽容器網絡千千萬,為何鐘情Macvlan?純粹的技術視角,Macvlan簡單到爆炸1.Docker時代就已“深入人心”2.對內核
2、幾乎沒有特殊要求,主流OS版本均默認支持3.無需復雜協議配置或者高端硬件需求,交換機二層網絡劃分即可4.運維人員容易管理,容器IP直達Kubernetes中使用Macvlan給用戶帶來什么?1.最大程度兼容虛擬化向容器遷移時,一些舊有的使用習慣2.較少的CPU消耗,極致的網絡性能3.較小的管理代價,簡單易懂世上僅存不多的,尚能手動“操作”的網絡插件欣賞Ta的優點,也要包容Ta的缺點(面向Kubernetes生產環境)與Kubernetes期望的網絡模型并不兼容Kubernetes網絡模型 Container-to-container Pod-to-pod Pod-to-service Inte
3、rnet-to-service Loadbalancer NodeportMacvlan使用限制的影響 默認情況下,本機無法訪問本地macvlan IP Service Cluster IP受限 Pod healthcheck受限 IP可直達訪問 Nodeport/Loadbalancer模式不兼容 保持IP可固定打通本機與本地容器的macvlan網絡1.在hostns中創建同網段的macvlan設備2.通過hostns路由方式轉發訪問3.Kubernetes集群host較多時,需要保留大量IP,比較浪費IP資源從實踐經驗看,這種模式僅適合小集群,面向通用產品化反而增加管理負擔,容易出錯。開源
4、社區原生的Macvlan CNI功能較弱產品化解決之道使用Multus CNI實現雙網卡機制1.基于Multus CNI可以支持多CNI的原理2.主網卡使用與Kubernetes兼容性好的CNI插件,如Flannel/Canal/等3.擴展網卡使用Macvlan,使用Controller&CRD控制Pod IP分配4.容器網絡既能滿足Kubernetes網絡模型需求,又能兼具高性能與IP直達能力使用CRD來持久化IP與Subnet數據為什么自己管理子網和IP分配?DHCP方式依賴交換機設置,很多用戶實際使用時并不靈活。通過Controller&CRD管理更加方便,比如可調整子網的IP rang
5、e、控制IP釋放,固定IP等。簡潔部署 簡化使用重點問題:Pod的服務發現1.使用headless service來給Macvlan網卡做服務發現2.生產實踐經驗看,固定IP更徹底更直接,避免DNS緩存的干擾重點問題:ARP緩存表同步1.Pod網卡啟動后自動發送Gratuitous ARP,通知交換機和其他Pod更新ARP緩存表2.Pod容器啟動時,應用鏡像自動向網關地址發送ICMP亦可取得同樣效果重點問題:避免主網卡的SNAT干擾1.默認情況下,對其他非macvlan網段的訪問走eth0(Flannel/Canal等),SNAT成host IP2.以Macvlan網卡作為默認網關,外部網關打通其他網段,避免SNAT導致Source IP變動重點問題:純粹Macvlan單網卡1.Pod容器中只有一個Macvlan網卡,無法兼容Kubernetes網絡模型,各種svc服務發現、健康檢查等機制均失效2.純粹把容器作為虛擬機場景使用(過渡性方案)3.適合向Kubernetes平滑過渡的方案,外部自建服務發現THANKS