云原生钻石课程 | 第6课:Kubernetes网络架构原理深度剖析(上)
点击上方“程序猿技术大咖”,关注并选择“设为星标”回复“加群”获取入群讨论资格!本篇文章来自《华为云云原生王者之路训练营》钻石系列课程第6课,由华为云容器基础设施团队主任工程师Jimmy主讲,深入讲解 Kubernetes容器网络模型,Service负载均衡机制、CNI接口的实现原理以及若干实践案例。01Kubernetes基本网络模型剖析K8S 网络模型对互通性的要求节...
点击上方“程序猿技术大咖”,关注并选择“设为星标”
回复“加群”获取入群讨论资格!
本篇文章来自《华为云云原生王者之路训练营》钻石系列课程第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/
感谢您的阅读,也欢迎您发表关于这篇文章的任何建议,关注我,技术不迷茫!
喜欢就点个"在看"呗,留言、转发朋友圈
更多推荐
所有评论(0)