云原生钻石课程 | 第6课:Kubernetes网络架构原理深度剖析(上)

程序猿技术大咖 2022-05-14 22:19

点击上方“程序猿技术大咖”,关注并选择“设为星标”

回复“加群”获取入群讨论资格!


本篇文章来自《华为云云原生王者之路训练营》钻石系列课程第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/





感谢您的阅读,也欢迎您发表关于这篇文章的任何建议,关注我,技术不迷茫!


喜欢就点个"在看"呗,留言、转发朋友圈

推荐阅读