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

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

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

本篇文章来自《华为云云原生王者之路训练营》钻石系列课程第6课,由华为云容器基础设施团队主任工程师Jimmy主讲,深入讲解 Kubernetes容器网络模型,Service负载均衡机制、CNI接口的实现原理以及若干实践案例。

01

Kubernetes基本网络模型剖析

K8S 网络模型对互通性的要求

  • 节点上的容器POD可以与集群内任意节点上的容器POD无需NAT实现互访

  • 节点上的代理agent(比如:

    系统后台进程、kubelet)可以与同节点上的容器POD互访

注解:对于支持容器POD以主机网络模式运行的平台(如:Linux)

  • 主机网络模式的容器POD可以与集群内任意节点上的容器POD无需NAT互访

1a8996bc29563845dcf1caac7d1028d4.png

ab4e40283ad217b2dba89893aefce9f1.png

参见社区文档:https://kubernetes.io/docs/concepts/cluster-administration/networking/

K8S 网络模型(1): Overlay组网模型

7cd3bc836042bcf16a37da744c592cb4.png

模型特征

  • 同节点内POD二、三层直接互通

  • 跨节点POD互通通过隧道(VXLAN/IPIP)

  • POD访问宿主节点地址或集群外地址需SNAT

优势

  • 与底层网络解耦,节点IP互通即可

劣势

  • 隧道封装解封装开销大,小包带宽损耗可达30%+

  • 互通性差,SNAT

典型实现

  • Flannel/VXLAN, Calico/IPIP, CCE 隧道网络

K8S 网络模型(2): 二层组网模型

93144ce4be57fe41a81f9c81e6d34706.png

组网特点

  • 容器和宿主节点属于同一子网

  • 宿主节点间要求二层互通(物理网络)

优势

  • 扁平网络,容器与节点具有同等互通能力

劣势

  • 规模扩展受子网限制

  • 要求节点网络二层广播域开放

  • 桥接模式转发性能较差

典型方案

  • Azure CNI,Rancher扁平网络,CCE Underlay L2

K8S 网络模型(3): 三层组网模型

ee4cd496fbe10950b36faf70cf7385b0.png

组网特点

  • 按节点掩码长度,给每个节点分配容器子网

  • 同节点内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方案)

  • 易于与不同容器网络模型集成

劣势

  • 线性遍历查表机制,造成大规模规则场景下,新建连接开销大

  • 大规模规则刷新较慢

  • 负载均衡算法相对少,均衡效果较差

d98c0d6494af5bef1cdfc7d120eac671.png

K8S Service负载均衡机制实现原理(2)--IPVS

5ea5f586655665430d18e86f5c8ede40.png

方案说明

  • 基于内核负载均衡模块IPVS(LVS:章文嵩博士贡献),实现NAT和负载均衡

优势

  • 专用负载均衡方案,基于IPSet/Hash查表机制,性能高(k8s 1.11 GA, 由华为云原生容器团队贡献给K8S 社区)

  • 负载均衡算法丰富,均衡性好(round-robin, min connection etc)

  • 规模扩展性好,规则数对匹配性能影响小和刷新规则快

劣势

  • 原始设计针对南北向边界负载均衡,对于分布式东西向某些特殊访问场景存在限制,关注社区ISSUE列表

  • 仍然依赖IPTables+Conntrack实现MASQUADE(SNAT)

K8S Service负载均衡机制实现原理(3)--eBPF

d068726c62fbe696b641d5d147b29154.png

方案说明

  • 基于高内核版本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为节点地址

6f6a6d926a696893d9d08e7dc6d45504.png

ENI/TrunkPort

方案说明:

584a3b7edc1701c2050f80a0ca38e1fa.png

容器网络与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/


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

3a2a914cedcbfbe8dea2a2b4179f0363.gif

32d903c095644a9a014888afc5c7f905.gif

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值