Kubernetes 容器网络模型和典型实现( 四 )
本文插图
为什么需要支持上述三种网络类型?根本上是由阿里云 vpc 网络基础设施所决定 , 同时覆盖阿里云主流应用对 vpc 网络资源的使用场景需求 。 另一方面是对标 Amazon AWS 的容器网络解决方案 , 在基于 VPC 和 ENI 的网络设施上能支持同等功能 。
ENI 多 IP、VPC ENI 和 VPC IP 的主要区别在于前两者下的 Pod 网段和 VPC 网段是相同的 , 而 VPC IP 的网段和节点的宿主机网段不同 。 这样使得在 ENI 网络环境下的 IP 路由完全在 VPC 的 L2 网络平面上进行 , 而 VPC IP 网络需要在 VPC 路由表中进行配置 Pod 网段的下一跳主机 , 和 Flannel 的路由模式类似 。 可以看出 , ENI 网络能带来更灵活的路由选择和更好的路由性能 。 如下两个截图反映其不同路由特点:
VPC ENI 网络:
本文插图
VPC IP 网络:
本文插图
ENI 多 IP(1 个主 IP/多个辅助 IP)网络下有 2 种路由模式:veth策略路由和ipvlan 。 两者本质区别在于使用不同的路由模式 , 前者使用veth pair的策略路由 , 后者使用ipvlan网络路由 。 策略路由需要在节点上配置策略路由条目来保证辅助 IP 的流量经过它所属的弹性网卡 。 ipvlan实现了一个网卡虚拟出多个子网卡和不同的 IP 地址 , eni 将其辅助 IP 绑定到这些虚拟出来的子网卡上形成一个与 vpc 平面打通的 L3 网络 。 这种模式使 ENI 多 IP 的网络结构比较简单 , 性能相对veth策略路由网络也更好 。 两种网络模式切换通过配置即可完成(缺省是vethpair):
值得一提的是 Terway 还实现了 ENI 多 IP 地址资源池的管理和分配机制 。 networkService中的eniIPFactory为每个 eni 网卡创建一个 goroutine , 该 eni 网卡上的 eniIP 的分配释放都在这个 goroutine 中完成 。 在创建一个 eniIP 时扫描已经存在的 eni 网卡 , 如该 eni 还存在空闲的 eniIP , 该 goroutine 会通过ipResultChan返回给eniIPFactory一个分配的 IP 。 如果所有的 eni 网卡的 eniIP 都分配完毕 , 会先创建一个新的 eni 网卡和对应的 goroutine , 首次创建 eni 网卡时无需做 IP 分配 , 直接返回 eni 网卡主 IP 即可 。 eniIP 释放是逆向的 , 在 eni 网卡的最后一个 eniIP 释放时 , 整个 eni 网卡资源会释放掉 。
另外 , 有一个startCheckIdleTickergoroutine 会定期扫描地址池的MaxPoolSize和MinPoolSize水位 , 在低于和高出水位阀值时会对地址池 eniIP 资源进行进行创建和释放 , 使得地址池 IP 资源处于一个可控水位范围中 。 为了保证资源状态一致性 , 有一个startGarbageCollectionLoopgoroutine会定期扫描 IP 地址是否在用或过期状态 , 如检测到会进行资源 GC 操作 。 最后 , Pod 资源状态数据都持久化在本地的一个boltDB文件中/var/lib/cni/terway/pod.db , 即使 Pod 已经在 apiServer 中删除 , GetPod会从本地boltDB中读取副本数据 。 在 Pod 已经删除但副本还存在 DB 的情况下 , GC goroutine检 测到会执行清理 。 截图简述:
推荐阅读
- 直播阳江|60多个网络平台直播刀博会网上展览会开幕式盛况
- 红途网络乔钰|英国主动退回被“诅咒”文物:巴比伦的千年“石鼓”回到伊拉克
- 红途网络美玉|发行货币,晚年穷困潦倒只剩5美元,美国历史上唯一的皇帝
- 大众网|| 网络名人说 @江氏小盗龙,科创发展看淄博
- 周到|“四叶草”实现5G网络全覆盖 网络容量提升约1.5倍
- 外交部网站|外交部:美国所谓“清洁网络”是“肮脏网络”
- 网络游戏|魔兽怀旧服咸鱼剑近战该如何选择,盗贼和狂暴战谁更适合呢
- 大众网|| 网络名人说 @小天微谈,科创发展看淄博
- 网络|周边均有发生!几万块打水漂!警方提醒,远离网络刷单...
- 央视新闻客户端|云南警方摧毁特大贩毒网络 缴获毒品17.5公斤 抓获犯罪嫌疑人14人
