ALB快速实现IPv6服务的负载均衡

应用型负载均衡ALB(Application Load Balancer)支持转发IPv6网络请求,本文指导您如何为双栈ALB实例开启IPv6挂载,即ALB实例同时支持挂载IPv4和IPv6的云服务器ECS(Elastic Compute Service),使IPv6网络的客户端请求通过ALB可以访问部署在后端的IPv4和IPv6服务。

场景示例

本文以下图场景为例。某公司希望ALB可以转发来自IPv6客户端的请求,以实现IPv6客户端使用公网正常访问VPC中的IPv4和IPv6服务。该公司需要创建具有IPv4和IPv6地址的ECS,同时需要在VPC中创建双栈ALB实例并创建具有IPv6挂载功能的服务器组。完成上述配置后,IPv6客户端的请求即可通过ALB访问部署在后端ECS上的IPv4和IPv6服务。

image

使用限制

  • 双栈支持的地域,请参见ALB双栈支持的地域

  • 使用双栈功能,需要开通VPC可用区中交换机的IPv6功能。

  • 双栈ALB实例支持将IPv4和IPv6的客户端流量转发至IPv4、IPv6的后端服务。

    • 双栈ALB实例将IPv6的客户端流量转发至IPv4的后端服务时,后端服务支持服务器类型(ECS、ENI、ECI)、IP类型,不支持函数计算类型。

    • 双栈ALB实例将IPv6的客户端流量转发至IPv6的后端服务时,后端服务支持服务器类型(ECS、ENI、ECI),不支持IP类型、函数计算类型。

  • 不支持已有的IPv4实例升级为双栈实例,仅支持新建双栈实例。

  • IPv4类型的ALB实例在创建监听时,无法添加开启了IPv6挂载功能的服务器组。

前提条件

  • 您已在华东2(上海)地域创建了一个VPC,并将该VPC名称修改为VPC1,且该VPC已开通了IPv6网段。开通IPv6网段后,系统会为您默认创建一个IPv6网关。

  • 您已在华东2(上海)地域的可用区E和可用区G分别创建了一个交换机,并将可用区E的交换机名称修改为交换机1,将可用区G的交换机名称修改为交换机2,且交换机1和交换机2均已开通IPv6

  • 您已经注册域名并完成备案

步骤一:创建并配置ECS实例

  1. 登录专有网络管理控制台
  2. 在左侧导航栏,单击交换机

  3. 选择交换机的地域,本文选择华东2(上海)

  4. 交换机页面,找到目标交换机,然后在操作列选择添加云产品 > ECS实例

  5. 云服务器ECS购买页面的自定义购买页签下,创建2台ECS实例,并将IPv4 ECS修改实例名称为ECS01,将IPv6 ECS修改实例名称为ECS02,两台ECS实例绑定的安全组均需要放行80端口。具体操作,请参见自定义购买实例

    单击查看本文ECS实例的配置

    ECS实例名称

    地域

    VPC名称

    交换机

    IP版本

    镜像

    ECS01

    华东2(上海)

    VPC1

    可用区E的交换机1

    IPv4

    Alibaba Cloud Linux 3.2104 LTS 64位

    ECS02

    华东2(上海)

    VPC1

    可用区G的交换机2

    IPv6

    说明

    创建具有IPv6地址的实例时,需在IPv6处选中免费分配IPv6地址

    Alibaba Cloud Linux 3.2104 LTS 64位

  6. 远程登录ECS01和ECS02实例,具体操作,请参见ECS远程连接操作指南

  7. 在ECS01中执行如下命令,部署Nginx服务。

    yum install -y nginx
    systemctl start nginx.service
    cd /usr/share/nginx/html/
    echo "Hello World ! this is ipv4 rs." > index.html
    
  8. 在ECS02中执行如下命令,部署Nginx服务。

    yum install -y nginx
    systemctl start nginx.service
    cd /usr/share/nginx/html/
    echo "Hello World ! this is ipv6 rs." > index.html
    
  9. 配置ECS02实例的IPv6地址。具体操作请参见IPv6通信

    说明

    如果您的ECS02实例镜像为Alibaba Cloud Linux 3.2104 LTS 64,并且在创建时已在IPv6处选中免费分配IPv6地址,可忽略此步骤。

    1. 远程登录VPC中的ECS02实例。

    2. 配置IPv6地址。

      执行ip addr | grep inet6或者ifconfig | grep inet6命令。

      如下图所示,表示已成功配置IPv6地址,您可忽略此步骤。

      image

      1. 如果未返回inet6相关内容,表示实例未开启IPv6服务,请先开启IPv6服务

      2. 如果返回inet6相关内容,表示ECS02实例已成功开启IPv6服务并识别到IPv6地址,请继续配置IPv6地址

步骤二:ECS02配置IPv6安全组规则

您需要为ECS02实例配置IPv6安全组规则,使安全组入方向能够允许接受IPv6客户端发送的请求。

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择网络与安全 > 安全组

  3. 在顶部菜单栏处,选择目标安全组的地域。本文选择华东2(上海)

  4. 安全组页面,找到目标安全组,在操作列单击管理规则

  5. 单击安全组详情页面,然后在访问规则区域,单击入方向页签。

  6. 单击手动添加,在规则列表中根据以下信息配置IPv6安全组规则,然后在操作列单击保存

    参数

    描述

    授权策略

    设置是否允许安全组的授权策略。本文选择允许

    优先级

    设置安全组的优先级。优先级的数值越小,优先级越高。取值范围:1~100

    本文保持默认值1

    协议类型

    允许入方向放行的安全组的协议类型。本文选择全部ICMP(IPv6)

    端口范围

    允许入方向放行的安全组的端口范围。

    协议类型选择全部ICMP(IPv6)时,端口范围的目的端口只能设置为-1/-1且不能修改。

    授权对象

    输入授权的IPv6地址段。

    本文输入::/0,表示授权所有IPv6地址。

    说明

    本文配置的授权对象仅为示例,您可以根据需要放行指定的IPv6网段。

    描述

    自定义描述信息。

步骤三:创建ALB实例

  1. 登录应用型负载均衡ALB控制台
  2. 实例页面,单击创建应用型负载均衡

  3. 在购买页面,完成以下配置,然后单击立即购买并根据控制台提示完成实例开通。

    此处仅列出和本文强相关的配置项,其他未列出的配置项使用默认值。关于参数的更多信息,请参见创建实例

    参数

    描述

    地域

    选择实例所属的地域。本文选择华东2(上海)

    实例网络类型

    选择实例网络类型,系统会根据您的选择分配私网或公网服务地址。本文选择公网

    说明

    实例网络类型选择公网类型只作用于IPv4,IPv6默认是私网类型。本文使用IPv6的公网类型,需执行步骤4变更IPv6的网络类型为公网类型。

    VPC

    选择实例所属的VPC。

    说明

    请确保该VPC开启了IPv6功能。

    可用区

    1. 选择至少2个可用区。本文选择上海 可用区E上海 可用区G

    2. 分别在所选可用区内选择交换机。本文选择可用区E下的交换机1和可用区G下的交换机2。

    IP模式

    选择实例的IP地址模式。本文选择固定IP

    协议版本

    选择实例的IP协议版本。本文选择双栈

    功能版本(实例费)

    选择实例的功能版本。本文选择标准版

    实例名称

    输入自定义实例名称。

    服务关联角色

    首次创建应用型负载均衡实例时,需要单击创建服务关联角色,创建一个名称为AliyunServiceRoleForAlb的服务关联角色。系统会为该角色添加名称为AliyunServiceRolePolicyForAlb的权限策略,授予ALB拥有访问其他云产品实例的权限。更多操作,请参见应用型负载均衡ALB系统权限策略参考

  4. 创建完公网双栈ALB实例后,本文需要使用公网IPv6地址,请执行以下步骤将ALB实例的IPv6地址变更为公网地址。更多信息,请参见协议版本

    1. 返回实例页面,找到目标ALB实例,单击实例ID。

    2. 实例详情页签的基本信息区域,找到网络类型,然后在IPv6:私网的右侧单击变更网络类型

    3. 变更网络类型对话框中单击确定变更

      变更成功后,您可以看到IPv6的网络类型变成了公网。

步骤四:创建服务器组

  1. 在左侧导航栏,选择应用型负载均衡ALB > 服务器组

  2. 服务器组页面,单击创建服务器组

  3. 创建服务器组对话框中,完成以下配置,然后单击创建

    此处仅列出和本文强相关的配置项,其他未列出的配置项使用默认值。关于参数的更多信息,请参见创建服务器组

    参数

    描述

    服务器组类型

    选择一种服务器组类型。本文选择服务器类型

    服务器组名称

    输入自定义服务器组名称。

    VPC

    从VPC下拉列表中选择已创建的VPC,只有该VPC下的服务器可以加入到该服务器组。

    说明

    确保您选择的VPC开启了IPv6功能,且与创建ALB实例时选择的VPC相同。

    选择后端协议

    选择一种后端协议。本文选择HTTP

    选择调度算法

    选择一种调度算法。本文选择加权轮询

    IPv6挂载

    选择是否开启IPv6挂载功能。本文只支持选择开启IPv6挂载功能。

    会话保持

    开启或关闭会话保持。本文保持默认值即不开启会话保持。

    开启健康检查

    开启或关闭健康检查。本文开启。

    健康检查配置

    开启健康检查后,您可以单击后面的编辑,展开进行更多配置。

  4. 服务器组页面,找到目标服务器组,然后单击目标服务器组ID。

  5. 单击后端服务器页签,然后单击添加后端服务器

  6. 添加后端服务器面板,选择已创建的ECS01和ECS02实例,在IP地址列选择ECS01实例的IPv4地址,选择ECS02实例的IPv6地址,然后单击下一步

  7. 配置端口和权重配置向导,设置ECS01和ECS02实例的端口和权重,然后单击确定

    本文ECS实例端口配置为80,权重为默认值100

步骤五:配置监听

  1. 实例页面,找到目标实例,单击实例ID。

  2. 单击监听页签,然后单击创建监听

  3. 配置监听配置向导,完成以下配置,然后单击下一步

    此处仅列出和本文强相关的配置项,其他未列出的配置项使用默认值。关于配置监听的更多操作,请参见添加HTTP监听

    参数

    描述

    选择监听协议

    选择监听的协议类型。本文选择HTTP

    监听端口

    用来接收请求并向后端服务器进行请求转发的监听端口。本文输入80

    监听名称

    输入自定义监听名称。

    高级配置

    本文保持默认,可单击修改进行设置。

  4. 选择服务器组配置向导,选择服务器类型服务器类型下的目标服务器组,查看后端服务器信息,然后单击下一步

  5. 配置审核配置向导,确认配置信息,然后单击提交

  6. 单击知道了返回监听页签,查看目标监听的健康检查状态列为正常时,表示后端服务器ECS01和ECS02实例可以正常处理ALB实例转发的请求。

步骤六:设置域名解析

实际业务场景中,建议您使用自有域名,通过CNAME解析的方式将自有域名指向ALB实例域名。

  1. 在左侧导航栏,选择应用型负载均衡 ALB > 实例

  2. 实例页面,复制已创建的ALB实例的DNS名称。

  3. 执行以下步骤添加CNAME解析记录。

    说明

    对于非阿里云注册域名,需先将域名添加到云解析控制台,才可以进行域名解析设置。具体操作,请参见域名管理。如果您是阿里云注册的域名,请直接执行以下步骤。

    1. 登录域名解析控制台

    2. 权威域名解析页面,找到目标域名,在操作列单击解析设置

    3. 解析设置页面,单击添加记录

    4. 添加记录面板,配置以下信息完成CNAME解析配置,然后单击确定

      配置

      说明

      记录类型

      在下拉列表中选择CNAME

      主机记录

      您的域名的前缀。本文输入@

      说明

      创建域名为根域名时,主机记录为@

      解析请求来源

      选择默认。

      记录值

      输入域名对应的CNAME地址,即您复制的ALB实例的DNS名称。

      TTL

      全称Time To Live,表示DNS记录在DNS服务器上的缓存时间,本文使用默认值。

  1. 在左侧导航栏,选择应用型负载均衡 ALB > 实例

  2. 实例页面,复制已创建的ALB实例的DNS名称。

  3. 执行以下步骤添加CNAME解析记录。

    说明

    对于非阿里云注册域名,需先将域名添加到云解析控制台,才可以进行域名解析设置。具体操作,请参见域名管理。如果您是阿里云注册的域名,请直接执行以下步骤。

    1. 登录域名解析控制台

    2. 权威域名解析页面,找到目标域名,在操作列单击解析设置

    3. 解析设置页面,单击添加记录

    4. 添加记录面板,配置以下信息完成CNAME解析配置,然后单击确定

      配置

      说明

      记录类型

      在下拉列表中选择CNAME

      主机记录

      您的域名的前缀。本文输入@

      说明

      创建域名为根域名时,主机记录为@

      解析请求来源

      选择默认。

      记录值

      输入域名对应的CNAME地址,即您复制的ALB实例的DNS名称。

      TTL

      全称Time To Live,表示DNS记录在DNS服务器上的缓存时间,本文使用默认值。

步骤七:测试连通性

说明

测试连通性时,请确保您的客户端已支持IPv6功能,您可以在浏览器地址栏输入网址http://test-ipv6.com/测试您的客户端是否支持IPv6功能。

以任意一台可以访问IPv6客户端的终端为例,测试IPv6客户端与ECS01和ECS02服务器的连通性。

  1. 打开终端的cmd窗口。

  2. 多次执行以下命令,测试IPv6客户端是否可以通过ALB以轮询的方式访问IPv4 ECS以及IPv6 ECS。

    curl -6 http://<域名> -v

    如果收到如下所示的回复报文,则表示IPv6客户端可以访问IPv4 ECS。

    image

    如果收到如下所示的回复报文,则表示IPv6客户端可以访问IPv6 ECS。image

完成上述操作后,表明IPv6客户端可以通过ALB以轮询的方式访问VPC中部署的IPv4服务和IPv6服务。

释放资源

  1. 清理ECS、安全组等资源:

    1. 删除ECS01实例及其安全组:

      1. 登录云服务器ECS实例控制台,顶部选择实例所属地域,单击ECS01实例右侧的image.png,弹出的窗口中选择释放,立即释放实例并确认。

      2. 登录云服务器ECS安全组控制台,顶部选择实例所属地域,勾选ECS01自定义安全组并单击删除,删除安全组。

    2. 参照上述步骤,删除ECS02实例及对应安全组资源。

  2. 删除域名解析记录:

    删除域名解析记录,具体操作,请参见删除域名解析记录

  3. 清理ALB资源:

    1. 登录应用型负载均衡ALB控制台顶部选择实例所属地域,单击目标实例右侧的image.png,弹出的窗口中选择释放并确认。

    2. 移除后端服务器,具体操作,请参见移除后端服务器

    3. 删除服务器组,具体操作,请参见删除服务器组

  4. 清理VPC资源:

    1. 登录专有网络VPC控制台,顶部选择实例所属地域。

    2. 单击实例右侧删除,删除时勾选强制删除,完成VPC与交换机资源的删除。