searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

网络插件Terway原理浅析

2023-09-20 11:20:29
101
0

概述

Terway与Flannel的区别

对比项
Terway
Flannel
性能 Pod ip即为VPC中ip,无NAT损耗支持独占ENI模式,几乎无损。 配合VPC路由,Pod ip为虚拟ip,存在NAT转换损耗。
安全 支持使用网络策略Network Policy。 不支持使用网络策略Network Policy。
ip管理 无需按节点分配ip段,随用随分配,ip无浪费。支持为Pod配置固定IP及独立虚拟交换机、安全组。 节点维度划分ip段,大规模集群下ip浪费多。
SLB SLB后端直接对接Pod,支持业务无中断升级。 SLB后端不能直接对接Pod,需要通过NodePort转发。

使用体验

ack使用Terway创建集群

注意点

  • 创集群时不用选pod cidr
  • pod虚拟交换机数量必须>=虚拟交换机(给node用的)
  • 不用选择节点IP数量
  • 创建出来的节点,pod cidr为空
  • 如果创集群选了多个pod虚拟交换机,同一个node上的pod不在同一个子网
  • 扩容出来的节点IP是连续的(创集群时提示尽量把节点分配到不同网段)(TODO待验证:怀疑同一个节点池内共用一个vswitch,另外创建节点池可能会选择别的vswitch)
  • 部署local dns,发现新创的pod的IP分配时紧跟着所在node IP的

  • 再扩容一个节点,node IP就不连续了

系统框架

按照部署和调用方式划分,Terway包含daemon和binary两部分(../plugin/terway):

  • daemon: 供binary调用,分配和管理网络资源
  • binary:与kubelet交互及daemon交互,配置Pod的网络连接

当一个Pod被调度到节点上时,Kubelet监听到Pod创建在自己节点上时, 会通过runtime(docker...)创建sandbox容器来hold住各种namespace,然后通过cni调用terway binary来处理网络namespace, terway binary调用terway daemon来获取网络资源,terway daemon调用Aliyun Openapi分配网络资源并返回给terway binary,最后terway binary为容器的网络namespace配置网络和联通网络。

通信方式

Terway有多种容器网络的配置通信方式:

  • VPC: Pod网段不同于节点的网络的网段,通过Aliyun VPC路由表打通不同节点间的容器网络。
  • ENI: 容器的网卡是Aliyun弹性网卡,Pod的网段和宿主机的网段是一致的。
  • ENI多IP:一个Aliyun弹性网卡可以配置多个辅助VPC的IP,将这些辅助IP址映射和分配到Pod中,这种Pod的网段和宿主机网段也是一致的。

本文主要介绍ENI多IP模式

实现细节

在cni的binary程序中,通常只用实现cmdAdd, cmdCheck和cmdDel三个函数,然后通过PluginMain函数注入到cni的plugin框架即可,因此这里主要介绍Terway的这三个函数背后到底做了什么事情

cmdAdd

cmdDel

cmdCheck

0条评论
0 / 1000
卖肥料的老父亲
4文章数
1粉丝数
卖肥料的老父亲
4 文章 | 1 粉丝
卖肥料的老父亲
4文章数
1粉丝数
卖肥料的老父亲
4 文章 | 1 粉丝
原创

网络插件Terway原理浅析

2023-09-20 11:20:29
101
0

概述

Terway与Flannel的区别

对比项
Terway
Flannel
性能 Pod ip即为VPC中ip,无NAT损耗支持独占ENI模式,几乎无损。 配合VPC路由,Pod ip为虚拟ip,存在NAT转换损耗。
安全 支持使用网络策略Network Policy。 不支持使用网络策略Network Policy。
ip管理 无需按节点分配ip段,随用随分配,ip无浪费。支持为Pod配置固定IP及独立虚拟交换机、安全组。 节点维度划分ip段,大规模集群下ip浪费多。
SLB SLB后端直接对接Pod,支持业务无中断升级。 SLB后端不能直接对接Pod,需要通过NodePort转发。

使用体验

ack使用Terway创建集群

注意点

  • 创集群时不用选pod cidr
  • pod虚拟交换机数量必须>=虚拟交换机(给node用的)
  • 不用选择节点IP数量
  • 创建出来的节点,pod cidr为空
  • 如果创集群选了多个pod虚拟交换机,同一个node上的pod不在同一个子网
  • 扩容出来的节点IP是连续的(创集群时提示尽量把节点分配到不同网段)(TODO待验证:怀疑同一个节点池内共用一个vswitch,另外创建节点池可能会选择别的vswitch)
  • 部署local dns,发现新创的pod的IP分配时紧跟着所在node IP的

  • 再扩容一个节点,node IP就不连续了

系统框架

按照部署和调用方式划分,Terway包含daemon和binary两部分(../plugin/terway):

  • daemon: 供binary调用,分配和管理网络资源
  • binary:与kubelet交互及daemon交互,配置Pod的网络连接

当一个Pod被调度到节点上时,Kubelet监听到Pod创建在自己节点上时, 会通过runtime(docker...)创建sandbox容器来hold住各种namespace,然后通过cni调用terway binary来处理网络namespace, terway binary调用terway daemon来获取网络资源,terway daemon调用Aliyun Openapi分配网络资源并返回给terway binary,最后terway binary为容器的网络namespace配置网络和联通网络。

通信方式

Terway有多种容器网络的配置通信方式:

  • VPC: Pod网段不同于节点的网络的网段,通过Aliyun VPC路由表打通不同节点间的容器网络。
  • ENI: 容器的网卡是Aliyun弹性网卡,Pod的网段和宿主机的网段是一致的。
  • ENI多IP:一个Aliyun弹性网卡可以配置多个辅助VPC的IP,将这些辅助IP址映射和分配到Pod中,这种Pod的网段和宿主机网段也是一致的。

本文主要介绍ENI多IP模式

实现细节

在cni的binary程序中,通常只用实现cmdAdd, cmdCheck和cmdDel三个函数,然后通过PluginMain函数注入到cni的plugin框架即可,因此这里主要介绍Terway的这三个函数背后到底做了什么事情

cmdAdd

cmdDel

cmdCheck

文章来自个人专栏
容器运行时
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0