【腾讯云的1001种玩法】运维的网络管理利器:弹性网卡体验

云计算当前给我们的业务运营提供了极大方便,越来越多的机构或公司利用公有云部署自己的业务应用,国内的阿里云、腾迅云、青云和 Ucloud 等厂商也取得了很大的发展。

随着业务的发展,我们购买的云端服务器不断增加也是水到渠成的事情,比如集群、同城双活、异地多活等等高可用的应用,在这些应用中,我们运维人员将会逐渐面对下面的一些场景:

  1. 单台云主机需要多个 IP 地址供不同的场景使用,例如一个主 IP 用于公有云平台管理使用,两个辅助 IP 用于我们业务应用与运维管理。
  2. 同城双活和异地多活互联时的多路由。单数据中心的时候,我们的 VPC 内云主机的绑定的路由表可能只需两条路由即可,一条是本地 VPC 内网通信,一条是出公网的 NAT 网关或者公网网关之类的。而当我们有同城双活或者异地多活时,云主机的路由表就要开始逐渐增加到其他数据中心的路由了,通常是对等连接(各个公有云厂商的叫法可能会不太一样)。
  3. 流量隔离,业务流量上来了,单网卡上同时还跑着的运维监控数据流量、双活甚至多活的数据同步流量,可能会对业务流量造成影响,此时我们就会需要进行隔离,以保证业务流量的稳定供给。
  4. 容灾迁移,集群环境里不可避免出现某台云主机有问题,需要将其上面的流量转到其他机器上,这时我们通常需要增加后端机器,然后加到负载均衡器,然后再将有问题的云主机从负载均衡中摘掉。

我们在公有云服务商那边的云服务器通常给我们配置的是一块网卡,自动分配的内网 IP 地址也是随机的,面对上面这些使用场景,是不是有一些不好操作呢?

我们假定一个金融项目中对云端服务器环境有这样的需求:

  1. 所有应用需要在两个数据中心同时部署,当一个数据中心遇到问题时能快速将业务访问切换到另外一个,在两个数据中心建立了对等连接进行互联互通。
  2. 为满足金融行业的安全规定,所有内部研发与运维人员访问服务器经由 V** 连接后才能访问到,希望内部访问与最终客户的业务访问安全隔离,设置不同的安全策略。
  3. 希望与合作伙伴的一些对接连接,与最终客户的业务访问进行隔离,因为两者在安全策略上也有区别。

根据这些需求,我们通常会结合云服务器的安全组和 iptables 等防火墙来设置安全策略,根据来源地址配置不同的规则,实现需求里的安全隔离。

最近腾迅云平台又新增了一个大功能:弹性网卡,据说是国内公有云首创。向来对新功能抱有好奇心的我,就抽空进行了一番测试,发现它给我们的云服务器在网络通信方面打开了一个扩展的入口,通过灵活结合安全组、子网路由、ACL 和云主机内部静态路由等功能,可以很方便就实现了诸如内外网隔离、内网 IP 动态迁移、细化安全策略控制等各种应用场景,真是一个贴心的功能,相信不久其他公有云服务商就会跟进,给我们运维圈的朋友们带来福利!

什么是弹性网卡?

弹性网卡是云服务器网络接口的一种创新扩展,它即插即用,支持在多个云服务器间迁移,支持单机多网卡,支持单网卡多 IP,还支持给每个内网 IP 绑定公网弹性 IP。

一句话总结:弹性、好用、易扩展!

这么神乎?那与普通的网卡有哪些区别呢?简单说有以下几点区别:

  1. 与主网卡独立,它看起来完全是一块新网卡,不像 Linode 文档里配置内网地址时使用 eth0.1 这样的虚拟网卡。
  2. 无需重启机器,绑定后立即生效。虽然使用感觉是一个新硬件配置,但你无需重启机器即可立即配置 IP 和路由,然后投产使用。
  3. 支持单独关联安全组,实现比云服务器安全组颗粒度更细的安全控制。
  4. 支持在私有网络内任意迁移至其他云服务器,轻松实现容灾的迁移。

下图更为形像地展示了弹性网卡的功能:

现在腾迅云私有网络云主机上的网卡已经全部支持弹性网卡,所以现在登录控制台打开每台 CVM 的详细信息,就能看到弹性网卡的界面了。

弹性网卡的基本操作

可能因为弹性网卡目前仅用于私有网络,所以腾迅云将它的操作入口放在”私有网络“控制台界面区域,如下图所示:

新建弹性网卡

创建一块新的弹性网卡,有两个入口:

  1. 在上面截图所示的【弹性网卡】列表界面,点击【新建】按钮,然后在弹窗中选择弹性网卡的所在私有网络、子网、内网IP数(支持指定内网IP),点击【确认】即可。
  2. 进入 CVM 云主机的详细信息界面,并点击【弹性网卡】,在已有弹性网卡列表界面点击【绑定网卡】,然后使用【新建弹性网卡并绑定】选项来创建。

两个入口创建新弹性网卡的界面是一样的,如下图所示:

绑定新弹性网卡

绑定新弹性网卡操作只需简单的 3 步:

第一步:登录控制台后进入云主机列表界面,打开想要绑定新弹性网卡的云主机详细信息界面。

第二步:在“弹性网卡”选项卡,点击“绑定网卡”链接,弹出下图所示界面:

第三步:在上图界面中,你可以绑定已有弹性网卡,也可以新建一块弹性网卡并绑定到这台云主机上。

绑定完成后,云平台会立即给云主机添加一块新的网卡,会使用 eth0, eth1, eth2 这样的规则进行命名(如下图所示)。

但此时,云主机只是新增了网卡,分配的 IP 地址并未实际绑定到云主机,还需要我们手动或调用 API 去完成绑定。

绑定新 IP 地址到云主机

下面以 CentOS 7.2 为例进行说明,使用 Ubuntu 等发行版的童鞋可根据步骤说明使用对应的命令进行操作。

我们操作的云主机,经过前面的步骤绑定了一块新网卡,它的内网 IP 地址自动分配的是 192.168.2.119。

1、启动新绑定的弹性网卡

代码语言:javascript
复制
ip link set eth1 up

2、绑定新弹性网卡的内网 IP 地址

代码语言:javascript
复制
ip addr add 192.168.2.119/24 dev eth1
ip addr

ip addr 显示的结果来看,新的 IP 地址已配置到这台云主机了。

3、启用 IP 转发功能

代码语言:javascript
复制
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

4、添加转发路由

代码语言:javascript
复制
route add -net 192.168.0.0/16 dev eth1

上面的操作是临时使用命令行将 IP 配置到新绑定的弹性网卡,它是即时生效的,当然重启后它也会失效的。如需长久使用,建议通过创建网卡配置文件,这个操作在此略过。

给弹性网卡关联安全组

弹性网卡支持分别绑定不同的安全组,以实现灵活的网络连接权限控制。缺省新创建的弹性网卡是没有关联安全组,此时它是无法进行网络通信的,默认是禁止了所有入站和出站通信请求。

  1. 进入云主机的弹性网卡列表界面。
  2. 点击需要操作的弹性网卡实例 ID,此时界面会切到“私有网络” > “弹性网卡” 那里。
  3. 点击“关联安全组”。

  1. 点击“配置安全组”。
  2. 在弹出的“配置安全组”界面,选择你需要关联进来的某个已有安全组,点击“确定”按钮完成关联。

解绑弹性网卡

当某块弹性网卡需要更换绑定的云主机,我们需要先从当前云主机解绑,然后再绑定到新的云主机,操作也很简单:

  1. 进入云主机列表界面,点击需要解绑云主机实例 ID,进入详细信息界面。
  2. 点击“弹性网卡”,显示已绑定的弹性网卡列表。
  3. 在需要解绑的“弹性网卡”栏,点击右边的“解绑”链接。

  1. 在弹出的界面,点击“确定”按钮,一会就会提示“解绑成功”。此时该台云主机跟这块弹性网卡的关联关系进行了解除,在云主机上再执行 ip addr 将看不到先前绑定的弹性网卡,如下图所示:

解绑弹性网卡后注意事项解绑弹性网卡需要注意几点:

  1. 如果你在云主机里配置 IP 地址是使用网卡配置文件的话,该配置文件仍然保存在服务器上并未删除,需要我们自己去删除,同时,相关的路由表信息也需要我们自己更新。
  2. 解绑出来的弹性网卡并未从云平台上删除,可以重新绑定或者绑定到另外一台云主机上。
  3. 解绑只是将弹性网卡跟云主机的关联关系进行解除,这块网卡上面的 IP 地址和关联的安全组未变动。

删除弹性网卡

当某块弹性网卡不需要使用了,我们就可以将其删除。此时,它所配置的 IP 地址会被释放,它所关联的安全组则仍然不会删除。

1、打开私有网络控制台。

2、点击左边的“弹性网卡”,进入列表界面。

3、找到需要删除的弹性网卡行,点击“删除”链接,如上图所示。

其他操作

除了常用操作外,弹性网卡还支持以下操作:

  1. 更换子网
  2. 分配更多内网 IP
  3. 绑定弹性公网 IP
  4. 修改内网 IP

这几个操作,在私有网络下的弹性网卡详细信息界面,或者云主机详细信息下的弹性网卡界面均有对应的功能链接,操作均很简单可视化。

弹性网卡的适用场景

腾迅云的弹性网卡在我们实际运维中,可以满足多个使用场景,下面简单说明,或许某个场景正是你所需要的。

场景一:单主机多内网 IP

借助弹性网卡,现在我们可以轻松的实现单主机多个内网 IP 地址,同时腾迅云的控制台在分配 IP 或者我们手动分配时,均会检测这个 IP 地址是否已经被使用,以保证不会同一个 IP 地址被分配到多个网卡或者云主机。我们现在通常只能在云服务商的控制台修改内网 IP 地址,而要给某云主机增加 IP 时,只能我们自己维护这些 IP 地址。

场景二:细化的安全策略

现在通过弹性网卡关联安全组的功能,我们可以轻松细化安全控制策略,可以给每个网卡设置不同的安全组,实现不同的安全策略。在没有弹性网卡前,我们的安全组是对整台云主机进行出入安全控制的,ACL 则是对整个子网进入出入安全控制的,现在可以对某个网卡进行出入安全控制了。当然,你也可以继续沿用对整台云主机进行出入安全控制,非常灵活、弹性。

场景三:单主机多公网弹性 IP

弹性网卡的每个内网 IP 均可以绑定弹性公网 IP,轻松实现多公网 IP,可以应用到虚拟主机业务、API 网关多域名、每个 SSL 独享 IP 、运维和业务运营连接分开等多租户的场景。

场景四:高可用容灾

我们可以借助弹性网卡的动态迁移功能做高可用容灾迁移,例如我们有多台 WEB 服务器,当某台服务器出现故障无法继续服务时,我们可以立即将其绑定的弹性网卡迁移至基于镜像创建的新服务器上,前端的负载均衡都无需剔除旧的后端机器后又新增后端机器,只要新的机器激活了迁移过来的弹性网卡,即可恢复前端负载均衡器的健康状态。

场景五:VPC 或子网灵活路由配置及隔离

弹性网卡关联 VPC 内的子网,我们知道在 VPC 下可以为不同的子网配置不同的路由,这就给我们增加了很多灵活性。

假设一个公司在同城多个可用区分别有一个私有网络,多个私有网络用于增加应用的高可用性,所以会有基于内网的数据同步传输,同时应用又要对外服务,内部的运维人员也需要进行运维管理。

针对这种情况,我们可以给云主机新绑定 3 块弹性网卡,处于不同的子网上。3 块弹性网卡分别用途如下:

  1. 弹性网卡 A,用于对外服务,绑定公网弹性 IP,其安全组只开放 80/443 两个端口的入站连接,出站连接全开放。此弹性网卡所在子网的路由表使用默认,属于被动访问 Internet。
  2. 弹性网卡 B,用于跟多可用区的服务器进行数据同步传输,无需绑定公网弹性 IP,关联的安全组可以开放更多端口。此弹性网卡所在子网的路由表有“对等连接”的下一跳路由,可以正确的路由到到另外一个私有网络。
  3. 弹性网卡 C,用于运维管理,无需绑定公网弹性 IP,关联的安全组可以类似弹性网卡 B 开放更多的端口,运维人员通过 V** 连接进来,经由此弹性网卡所在子网路由表的 V** 网关,可以互相通信。

上述 3 块弹性网卡都是辅助型弹性网卡,除此之外,云平台自动分配的主网卡则用于主动 Internet 访问,路由通过 NAT 网关出口到公网,流量也归宿到 NAT 网关。

这个实例经过配置后,可以实现主动、被动、内网数据同步传输和运维管理四个应用完全隔离,实现不同网络的差异化安全策略控制,保证云主机和内网安全,在金融行业可以较好满足安全规定。

场景六:微服务型态应用

在微服务应用场景中,我们会有微服务间通信、微服务与数据存储应用通信、微服务与 API 网关通信和微服务自动发现等等,结合弹性网卡的多子网和隔离的安全组功能,实现将不同的通信应用进行隔离,尤其是微服务与数据存储的通信,我们应当谨慎配置其通信安全策略,以保证数据的安全性。

在非微服务型态应用场景,我们也可以将业务运行和运维监控进行分开。

使用上的一些约束

在实际使用中,腾迅云对弹性网卡也进行了一些约束,主要根据 CPU 和内存配置不同的云主机,限定可以使用的弹性网卡数,以及网卡绑定的 IP 个数,下表是他们的约束具体规则:

另外一个在使用中需要特别注意的约束是,因受到网络架构限制,私有网络中其他云主机互访辅助弹性网卡的 IP 地址,需要在该台云主机绑定一块相同子网的弹性网卡才能互访。

测试体会

经过断断续续的两三次测试,可以发现腾迅云的弹性网卡是一种增强了虚拟网络应用的功能,不管是小型应用、金融应用或者中大型应用场景,都可以非常好的满足,总体上优点多于缺点,对于希望进行精细化运维的企业,可以结合需求多尝试。现在弹性网卡也开放了 API 接口,可以通过程序自动化处理,满足 DevOps 的应用。

优点

  1. 细化了安全组的应用,这可以帮助很多运维人员减少在云主机内部配置防火墙规则的工作,这在 Docker 逐渐深入应用场景会很有帮助。
  2. 开放了 API,具有开发能力的运维人员可以整合到自己的运维管理平台。
  3. 即时绑定、解绑的功能,为容灾迁移带来了便利。
  4. 可以方便的结合子网路由和 ACL 实现丰富的安全策略控制。

一些不足

目前弹性网卡刚开放使用不久,功能还不是特别完善,同时也可能还存有一些小 Bug。在本次体检中有遇到的几点不足:

  1. 绑定弹性网卡后,无法实现自动配置 IP 到云主机上。应用角度应该是可以实现的,比如在腾迅云的 Agent 程序中增加触发更新 IP 配置。阿里云的安全补丁就是通过其 Agent 程序进行修补的。
  2. 如果有一个界面可以查看到各子网当前已用 IP 清单,对于还未实现运维自动化的运维人员会更有帮助。
  3. 关联的安全组只能一个,无法像云主机那样关联多个安全组。
  4. 受限于当前的网络架构,辅助弹性网卡的 IP 地址,与其他主机互访时,要求双方均有相同子网的网卡及 IP 地址,即在两台云主机绑定一块相同子网的弹性网卡。