云原生钻石课程 | 第6课:Kubernetes网络架构原理深度剖析(上)
點擊上方“程序猿技術大咖”,關注并選擇“設為星標”
回復“加群”獲取入群討論資格!
本篇文章來自《華為云云原生王者之路訓練營》鉆石系列課程第6課,由華為云容器基礎設施團隊主任工程師Jimmy主講,深入講解 Kubernetes容器網絡模型,Service負載均衡機制、CNI接口的實現原理以及若干實踐案例。
01
Kubernetes基本網絡模型剖析
K8S 網絡模型對互通性的要求
節點上的容器POD可以與集群內任意節點上的容器POD無需NAT實現互訪
節點上的代理agent(比如:
系統后臺進程、kubelet)可以與同節點上的容器POD互訪
注解:對于支持容器POD以主機網絡模式運行的平臺(如:Linux)
主機網絡模式的容器POD可以與集群內任意節點上的容器POD無需NAT互訪
參見社區文檔:https://kubernetes.io/docs/concepts/cluster-administration/networking/
K8S 網絡模型(1): Overlay組網模型
模型特征
同節點內POD二、三層直接互通
跨節點POD互通通過隧道(VXLAN/IPIP)
POD訪問宿主節點地址或集群外地址需SNAT
優勢
與底層網絡解耦,節點IP互通即可
劣勢
隧道封裝解封裝開銷大,小包帶寬損耗可達30%+
互通性差,SNAT
典型實現
Flannel/VXLAN, Calico/IPIP, CCE 隧道網絡
K8S 網絡模型(2): 二層組網模型
組網特點
容器和宿主節點屬于同一子網
宿主節點間要求二層互通(物理網絡)
優勢
扁平網絡,容器與節點具有同等互通能力
劣勢
規模擴展受子網限制
要求節點網絡二層廣播域開放
橋接模式轉發性能較差
典型方案
Azure CNI,Rancher扁平網絡,CCE Underlay L2
K8S 網絡模型(3): 三層組網模型
組網特點
按節點掩碼長度,給每個節點分配容器子網
同節點內POD二、三層直接互通
跨節點POD互通通過本地路由表及節點網絡路由轉發
POD訪問宿主節點地址無需SNAT
優勢
無隧道開銷,互通性好
規模擴展性高
劣勢
需要對接節點網絡,支持BGP 協議或路由配置接口
典型方案
Calico Native, CCE VPC 路由
02
Service服務負載均衡機制剖析
K8S Service負載均衡機制實現原理(1)--IPTables
方案說明:
利用linux內核原生Netfilter/IPTable的HOOK/Chain及Conntrack連接狀態機制,實現NAT和負載均衡
優勢
內核原生能力,經歷了長期的考驗,穩定性好(k8s 1.2開始作為default方案)
易于與不同容器網絡模型集成
劣勢
線性遍歷查表機制,造成大規模規則場景下,新建連接開銷大
大規模規則刷新較慢
負載均衡算法相對少,均衡效果較差
K8S Service負載均衡機制實現原理(2)--IPVS
方案說明
基于內核負載均衡模塊IPVS(LVS:章文嵩博士貢獻),實現NAT和負載均衡
優勢
專用負載均衡方案,基于IPSet/Hash查表機制,性能高(k8s 1.11 GA, 由華為云原生容器團隊貢獻給K8S 社區)
負載均衡算法豐富,均衡性好(round-robin, min connection etc)
規模擴展性好,規則數對匹配性能影響小和刷新規則快
劣勢
原始設計針對南北向邊界負載均衡,對于分布式東西向某些特殊訪問場景存在限制,關注社區ISSUE列表
仍然依賴IPTables+Conntrack實現MASQUADE(SNAT)
K8S Service負載均衡機制實現原理(3)--eBPF
方案說明
基于高內核版本eBPF機制
東西向采用Socket Layer LB機制實現,支持會話保持
南北向采用XDP/TC BPF實現負載均衡/NAT和狀態表
優勢
適合容器場景,轉發路徑短,最大開銷下降可達80%
劣勢
內核版本要求社區內核5.7+
缺乏大規模的商用檢驗,處于快速迭代過程,社區不斷有新patch合入
負載均衡算法待增強和豐富
典型方案
Cilium,Calico
03
華為云CCE yangtse網絡方案原理
VPC 路由模式
方案說明
按照創建集群時設定的節點長度為節點分配容器子網
將每個節點的容器子網路由配置到VPC路由表
優勢
無隧道開銷,轉發性能與主機網絡持平
VPC內節點與容器互通無SNAT,支持源地址保持
劣勢
集群規模受限于VPC路由表規格,比如:200
互通性受限
- 需要通過nodeport對接ELB后端,存在多跳損耗,負載均衡性差
- 訪問OBS或外網等服務需要SNAT為節點地址
ENI/TrunkPort
方案說明:
容器網絡與VPC網絡一體化融合方案,充分利用VPC網絡的軟硬協同和分布式架構為容器提供云原生的規模擴展、極致彈性、負載均衡和安全隔離能力。
每個容器POD具有獨立的VPC子網地址,統一IPAM(節點、容器、服務子網統一管理)
BMS節點支持128個VF直通網口到容器POD
虛機節點Trunkport 模式ENI,最多支持創建256個VLAN子接口直通容器POD
每個POD具有獨立的安全組,支持容器粒度的網絡隔離
POD間互訪不經過節點root namespace,直通模式轉發0損耗
不再依賴節點內核IPVS/IPTables實現Service負載均衡,不再需要kube-proxy組件,service 負載均衡卸載到VPC分布式ELB
裸機容器支持POD級網絡QoS
極簡組網,運維更簡單
參考鏈接
相關內容的華為云官網鏈接:https://support.huaweicloud.com/usermanual-cce/cce_01_0249.html
https://support.huaweicloud.com/usermanual-cce/cce_01_0094.html
Kubernetes官方文檔:
Service:
https://kubernetes.io/docs/concepts/services-networking/service/
Ingress:
https://kubernetes.io/docs/concepts/services-networking/ingress/
感謝您的閱讀,也歡迎您發表關于這篇文章的任何建議,關注我,技術不迷茫!
云原生鉆石課程 | 第5課:Kubernetes存儲架構原理深度剖析(下)
徹底搞懂 K8S Pod Pending 故障原因及解決方案
談阿里云云效 DevOps | DevOps 不再只是 Jenkins
微服務架構下的核心話題 (三):微服務架構的技術選型
喜歡就點個"在看"唄,留言、轉發朋友圈
總結
以上是生活随笔為你收集整理的云原生钻石课程 | 第6课:Kubernetes网络架构原理深度剖析(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: moodle支持php5.4,moodl
- 下一篇: 计算机故障代码ff,电脑开机时主板上只显