首页>>新闻资讯>>云计算

基于弹性计算网络能力提升容器密度最佳实践

2024-08-15 09:24:18 17

导读:本期为“玩转 ECS”系列第 4 讲,由阿里云智能高级技术专家姜文锋(令吾)介绍三种基于阿里云弹性计算网络能力提升容器密度的主要方法和最佳实践。

嘉宾 | 姜文锋

整理 | 董黎明

前言

近期,“凌云时刻”特别推出“阿里云玩转 ECS”系列课程,每周二、周四准时更新,欢迎关注。点击文末“阅读原文”可查看本系列所有已发布内容。

本次分享由阿里云高级技术专家姜文锋(令吾)为大家介绍三种基于阿里云弹性计算网络能力提升容器密度的主要方法和最佳实践。

关键词:弹性网卡、弹性网卡多IP、 弹性网卡中继、容器密度

姜文锋(令吾),阿里云高级技术专家。来自阿里云弹性计算控制&体验团队,主要负责弹性计算(ECS)网络、安全组相关组件和产品的研发工作。

以下内容根据演讲视频以及 PPT 整理而成。

本次分享主要围绕以下四个方面:

一、弹性网卡直通

二、弹性网卡多IP

三、弹性网卡中继

四、创建容器网络方案总结

云原生和容器化是主流的趋势,实现容器化时推荐大家使用云厂商的容器服务,如阿里云 ACK。但由于部分用户因为一些原因需要自建容器,此时不得不面临一个问题,就是如何能够在一台宿主机上提升容器数量,降低容器成本。

借此机会,本次姜文锋(令吾)为大家介绍基于阿里云弹性计算网络能力,具体讲解三种构建容器的网络架构方案,同时横向对比各种方案在提升容器密度方面的优缺点。

弹性网卡直通

所谓弹性网卡直通就是将一个 ECS 上的弹性网卡直接加入到容器命名空间内。这种架构非常简单,无技术风险,同时缺点也非常明显:ECS 容器数量受限于 ECS 可挂载弹性网卡数量。而目前阿里云最高规格实例大约支持 20 块网卡左右,对容器密度敏感的用户,这不是合适的选项。

弹性网卡多 IP 构建容器

弹性网卡+网卡多 IP+策略路由

网卡多 IP 是阿里云为了提升 IP 数量而提供的方案,可以让一个弹性网卡支持多个 IP,这样就具备了在 ECS 上创建更多容器的基础。下图展示了结合弹性网卡+网卡多 IP+策略路由构建容器的架构。与弹性网卡直通对比下,引入的复杂度是路由设置问题。

由于弹性网卡直通方案中容器与网卡的比例为 1:1,路由极其简单,无需管理。而引入了网卡多 IP 之后,容器与网卡的比例关系是 n:1,需要正确的管理路由,实现入方向和出方向上容器与网卡正确的对应。

具体做法:首先使用 veth pair 打通容器与 ECS 网络命名空间,使得容器 IP 与 ECS 弹性网卡 IP 可见;之后进行策略路由的设置,实现容器与弹性网卡的正确对应。如下图所示,入方向策略路由表表明当访问 192.168.10.1-3 时需要查找main路由表进行包转发,main 路由表把不同的 ip 指向不同的 veth pair 设备,这样就可以路由到正确的容器内。出方向上如果源地址是 192.16.10.1-3 的话,则需要去 1006 路由表。路由表 1006 表示要将所有包路由到 eni1 上,从而找到正确的网卡。

整个方案的优点是可以有效提高单 ECS 容器密度,创建可观的容器数量。目前单网卡最大支持 20 个 ip,单 ECS 最大支持 15 个弹性网卡。

但弹性网卡多 IP 缺点主要有三点:首先,安全组是实现云安全的基本能力,而安全组只支持 eni 粒度,无法针对容器粒度配置安全组,这意味着下图中关联到同一个网卡的三个容器的安全配置完全相同,无法对每一个单独的容器做安全配置。另外,相对而言架构更加复杂。最后由于引入了 veth-pair,转发性能会比弹性网卡直通方案稍差。

弹性网卡+网卡多 IP+IPvlan

基于弹性网卡多 IP 的方案还有更加简单的做法:IPvlan。

IPvlan 是 linux 内核提供的网卡虚拟化技术,能够从物理网卡虚拟出多个虚拟网卡。多个虚拟网卡有相同 mac 地址,但是有独立的 IP。

使用 IPvlan 之后,从容器往下看,ECS 便有了更多的网卡,如下图中 ECS 有三个弹性网卡,每个网卡 3 个 IP,每个 IP 对应一个 IPvlan 设备。将 IPvlan 设备直接放到容器的命名空间内,打通整个链路。

相对于弹性网卡+网卡多 IP+策略路由方案,IPvlan 方案架构更加简单,性能更好,同时可以起到提升容器密度的效果。但缺点同样有三点:首先对 linux kernal 版本有要求,只有大于等于 4.2 版本才建议使用 IPvlan。其次如果自建 k8s,需要解决 kube-proxy 依赖流量走 host namespace,而 IPvlan 默认无法和 host namespace 交互。还有依然无法支持容器粒度设置安全组。

弹性网卡中继构建容器

如果即要提升容器密度,又要求安全组支持容器粒度,那么阿里云推荐弹性网卡中继(EniTrunking)构建容器的方案。EniTrunking 是阿里云提供的一种提升单 ECS 挂载弹性网卡数量的技术。下面介绍 EniTrunking 中的几个主要概念:

1. 首先是 TrunkEni(如下面图中的 te_1,te_2),它是正常的弹性网卡,方案中充当通信通道的角色。

2. 另外就是 MemberEni(如下图中的 me_i),是与 TrunkEni 连接的弹性网卡,流量通过 MemberEni “中继”到对应的 TrunkEni,拥有弹性网卡的绝大部分特性,但是不支持弹性网卡多 IP。

3. 最后是 DeviceIndex,一个 TrunkEni 对应多个 MemberEni,DeviceIndex 是给 MemberEni 分配一个 Index,表示 TrunkEni 中的位置,在此范围内保持唯一。

基于 EniTrunking 的方案主要操作步骤如下:

1. 首先申请开通 EniTrunking 功能白名单。

2. 然后通过 ECS API 创建几个 TrunkEni 并挂载。

3. ECS API 创建 MemberEni(具体数量参考官方文档),再将 MemberEni 中继到 TrunkEni 上。

4. 把 MemberEni 加入到容器网络 namespace 中,并配置路由,从而实现整个链路的打通。

MemberEni 包含大部分的弹性网卡特性,这就使得弹性网卡中继构建容器方案可以有效提高单 ECS 容器密度以及容器数量,并可以为每个 MemberEni 设置独立的安全组,安全控制更灵活。对于某些安全网络产品使用弹性网卡中继构建容器方案是非常适合的。但同时由于中间多了一个环节,所以弹性网卡中继构建容器方案转发性能会比网卡直通方案差。

目前弹性网卡中继构建容器方案在灰度阶段,后续会提供相关设置的最佳实践和帮助文档,有兴趣的同学可以关注一下。

创建容器网络方案总结

前面具体介绍了 4 种创建容器网络方案,下面简单做一个总结:

1. 弹性网卡直通方案的优点是非常简单,支持容器粒度安全组。但受限于 ECS 可挂载弹性网卡数量,导致容器成本较高。弹性网卡直通方案对企业自建或容器密度不是关键考虑因素的用户比较适用。

2. 弹性网卡多 IP+策略路由方案可以有效提升容器密度,方案较为成熟,无技术风险。但它不支持容器粒度的安全组,而且由于引入了策略路由和 veth-pair 设备导致转发性能稍差。

3. 弹性网卡多 IP+IPvlan 方案与弹性网卡多 IP+策略路由方案类似,但架构会更加简单,因为使用了 linux 原生的网卡技术。同样,弹性网卡多 IP+IPvlan 方案也不支持容器粒度安全组,对 linux 内核版本有一定的要求,用户需要自己解决 IPvlan 默认不走 host namespace 的问题。企业自建容器或容器服务的用户可以考虑这两种方案。

4. 弹性网卡中继方案,最大优点是即可以提升容器密度,还支持容器级别安全组。只是转发性能会比弹性直通方案略差。

相关标签:

发表评论:

评论记录:

未查询到任何数据!