普通模式实现ECS绑定多EIP

当单个 ECS 实例需要多个 EIP 承载不同的服务时,需要使用普通模式为 ECS 实例的弹性网卡绑定多 EIP。

主网卡和辅助弹性网卡均支持绑定多 EIP,可根据实际组网进行选择。本文以辅助弹性网卡为例。

工作原理

  1. 绑定多 EIP:为 ECS 实例绑定分配了多个私网 IP 的辅助弹性网卡,将多个 EIP 以普通模式与私网 IP 一一绑定。

  2. 配置策略路由,确保出入流量路径一致:

    • 入向流量:当外部请求访问某个EIP时,系统会自动将流量转发到该 EIP 绑定的私网 IP。

    • 出向流量:为 ECS 实例配置策略路由,确保 ECS 实例能从正确的 EIP 返回响应流量。策略路由根据数据包的源 IP(即私网 IP)来决定其下一跳和出口设备(辅助弹性网卡),确保多网卡环境下路由对称,避免路由冲突。

image

适用范围

  • ECS 的不同实例规格族支持绑定的弹性网卡数量、可分配辅助私有 IP 数量不同。

    例如,ecs.c6.large实例规格的 ECS 实例,最多支持绑定 2 张弹性网卡(包括主网卡和辅助弹性网卡),每张网卡最多支持 6 个私网 IP。其中,主网卡和辅助弹性网卡均支持通过主私网 IP 绑定 1 个 EIP,通过辅助私网 IP 绑定 5 个 EIP。

  • 普通模式下,EIP 以 NAT 模式与弹性网卡绑定,不支持 NAT ALG(NAT应用层网关)涉及的相关协议。

    • 支持绑定主弹性网卡和辅助弹性网卡。

    • 支持绑定的 EIP 数量取决于弹性网卡的私网 IP 数量,二者一一映射。

  • 如果 ECS 实例所在 VPC 由 IPv4 网关集中控制公网访问,需确保已配置路由指向 IPv4 网关允许 ECS 实例访问公网。

操作步骤

步骤一:绑定多 EIP

  1. 为 ECS 实例绑定分配了多个私网 IP 的辅助弹性网卡:

    已有辅助弹性网卡时,可直接与 ECS 实例绑定。
    1. 前往ECS 控制台 - 弹性网卡页面,在页面上方选择 ECS 实例所属地域。

    2. 单击创建弹性网卡

      其余参数保持默认。创建完成后,可单击目标弹性网卡操作列的管理弹性网卡 IP,增加/删除/修改私网 IP。
      • 选择 ECS 实例所属的专有网络、交换机和安全组。

      • 主私网 IP:可指定交换机中未使用的 IP。不指定时,系统将从交换机的空闲地址中为弹性网卡随机分配。创建完成后,不支持修改。

      • 辅助私网 IPv4:选择自动分配,填入计划分配的辅助私网 IP 数量。

    3. 单击目标弹性网卡操作列的绑定实例,选择目标 ECS 实例。

  2. 配置操作系统识别辅助私网 IP:

    本文以 Alibaba Cloud Linux 3.2 操作系统为例。更多方式,可参考配置操作系统识别辅助私网IP地址
    1. 登录 ECS 实例,执行ip a查看并确认网卡信息。

      • 网卡标识:eth0(主网卡)、eth1(辅助弹性网卡)。

      • 网卡状态:state UP 代表网卡状态正常,即网卡已经在实例内部生效。如果网卡状态为state DOWN,需要配置Linux操作系统识别网卡

      image

    2. 使用nmcli con配置辅助私网 IP。

      1. 执行sudo vim /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg新建文件,写入network: {config: disabled}配置项,禁用cloud-init自动初始化网络配置,避免重启后配置失效。

      2. 执行nmcli con show查看eth1的网络连接名。

        image

      3. 执行以下命令,配置辅助弹性网卡的辅助私网 IPv4 地址、默认网关。

        可执行route -n查看默认网关。
        sudo nmcli con modify "<eth1 网络连接名>" ipv4.addresses <辅助私网 IPv4 地址 1>,<辅助私网 IPv4 地址 2>
        sudo nmcli con modify "<eth1 网络连接名>" ipv4.gateway <默认网关>

        image

    3. 执行sudo nmcli con up "<eth1 网络连接名>",激活修改后的网络连接。返回信息出现类似Connection successfully activated时,代表配置成功。再次执行ip a,可查看到辅助私网 IP。

      image

  3. 创建多个 EIP 并绑定辅助弹性网卡:

    1. 前往EIP 购买页

      此处仅列出相关配置项,具体选型原则可参考EIP选型指引
      • 付费模式:按量付费适用于业务量不固定的场景,包年包月适用于长期稳定的业务。本文选择按量付费

      • 地域和可用区:与 ECS 实例所在地域保持一致。

      • 线路类型:仅部分地域支持选择。

      • 安全防护:仅按量付费模式下的BGP(多线)EIP支持选择。

      • 地址池:已有IP地址池的情况下,可以选择从已有IP地址池中分配EIP。

      • 购买数量:选择计划绑定的 EIP 数量。

    2. 将 EIP 与辅助弹性网卡的多个私网 IP 一一绑定:

      1. 前往弹性公网IP页面,在顶部菜单栏选择 EIP 所属地域。

      2. 单击目标 EIP 操作列的绑定资源,选择弹性网卡,并选择对应的辅助私网 IP。

步骤二:配置策略路由

为 ECS 实例配置策略路由,确保流量进出路径一致。

  1. 登录 ECS 实例,为辅助弹性网卡eth1添加默认路由:创建路由表table 1001、私网 IP 的对应路由策略。

    ip -4 route add default via <默认网关> dev eth1 metric 1001 && \
    ip -4 route add default via <默认网关> dev eth1 table 1001 && \
    ip -4 rule add from <辅助弹性网卡的私网 IPv4 地址 1> lookup 1001 && \
    ip -4 rule add from <辅助弹性网卡的私网 IPv4 地址 2> lookup 1001 && \
    ip -4 rule add from <辅助弹性网卡的私网 IPv4 地址 3> lookup 1001
  2. 执行ip route list table 1001 && ip rule list,可查看创建的路由表和策略路由。

    image

  3. 配置开机时自动更新路由,避免重启实例后配置失效。

    1. 执行vim /etc/rc.local,将创建路由表和策略路由的相关命令写入文件。

    2. 执行sudo chmod +x /etc/rc.local,添加执行权限。

步骤三:结果验证

验证出站 IP

登录 ECS 实例,执行curl --interface <辅助弹性网卡的私网 IP> https://ifconfig.me,确认从不同私网 IP 发起访问的公网出口 IP 是对应绑定的EIP。

image

验证出入流量路径

  1. 登录其他可访问公网的测试 ECS,执行ping <辅助弹性网卡绑定的 EIP>

  2. 同时登录本 ECS 实例,执行tcpdump -i eth1 icmp,在 eth1 捕获 ICMP协议的数据包。

可查看到,数据包从eth1进入,依然从eth1回复,流量进出路径一致。

image

应用于生产环境

  • 风险防范:本方案使用单点 ECS 实例,建议使用负载均衡确保业务高可用。但需注意,实例重启或网络配置变更可能导致业务中断。

  • 监控与告警:为辅助弹性网卡的网络流量、CPU和内存使用率等关键指标设置监控告警,以便及时发现异常。

  • 安全加固:为辅助弹性网卡配置最小权限的安全组规则,仅放行业务必需的端口和源IP地址。

计费说明

  • EIP 计费

    • EIP 配置费(公网 IP 保有费):

      • 按量付费EIP:当与辅助弹性网卡绑定时,即使没有公网流量,也会收取EIP配置费(公网IP保有费)。

      • 包年包月EIP:不收取 EIP 配置费。

    • 公网网络费:

      • 按量付费EIP:按所选的计费方式(按固定带宽或按使用流量)收取费用。

      • 包年包月EIP:按照带宽峰值计费。

  • 其他资源计费:ECS实例等资源按其自身计费规则收费,辅助弹性网卡本身免费。