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

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

场景示例

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

image

使用限制

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

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

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

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

  • IPv4类型的NLB实例在创建监听时,无法添加开启了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. 在顶部菜单栏处,选择目标安全组的地域。本文选择华东2(上海)

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

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

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

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

    参数

    描述

    授权策略

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

    优先级

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

    本文保持默认值1

    协议类型

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

    端口范围

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

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

    授权对象

    输入授权的IPv6地址段。

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

    说明

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

步骤三:创建NLB实例

  1. 登录网络型负载均衡NLB控制台
  2. 实例页面,单击创建网络型负载均衡

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

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

    配置参考信息

    配置

    说明

    地域

    选择实例所属的地域。

    实例网络类型

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

    说明

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

    VPC

    选择实例所属的VPC。

    说明

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

    可用区

    至少选择2个可用区。本文选择上海 可用区E及该可用区下的交换机1,上海 可用区G及该可用区下的交换机2。

    协议版本

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

    实例名称

    自定义实例名称。

    资源组

    选择所属的资源组。

    服务关联角色

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

  4. 创建完公网双栈NLB实例,系统默认提供私网IPv6地址,执行以下步骤,将私网IPv6地址变更为公网IPv6地址。

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

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

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

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

步骤四:创建服务器组

  1. 在顶部菜单栏,选择NLB实例所属的地域。

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

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

    关键配置信息可参考下表,其他未列出的配置项使用默认值。关于参数的更多信息,请参见创建服务器组

    参数

    说明

    服务器组类型

    服务器组挂载的后端服务器类型。本文选择服务器类型

    服务器组名称

    自定义填写服务器组名称。

    VPC

    服务器组所属VPC。

    说明

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

    选择后端协议

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

    选择调度算法

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

    IPv6挂载

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

    健康检查

    开启或关闭健康检查。本文保持默认配置。

  4. 单击服务器组实例右侧操作列的编辑后端服务器,然后单击添加后端服务器

  5. 添加后端服务器面板,选择服务器类型云服务器ECS/弹性网卡ENI,选择已创建的ECS01和ECS02实例,在IP地址列选择ECS01实例的IPv4地址,选择ECS02实例的IPv6地址,然后单击下一步

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

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

步骤五:配置监听

  1. 在左侧导航栏,选择网络型负载均衡 NLB > 实例

  2. 实例页面,找到目标实例,在操作列单击创建监听

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

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

    参数

    描述

    选择监听协议

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

    监听端口

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

    监听名称

    输入自定义监听名称。

    高级配置

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

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

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

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

步骤六:设置域名解析

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

  1. 在左侧导航栏,选择网络型负载均衡 NLB > 实例

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

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

    说明

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

    1. 登录域名解析控制台

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

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

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

      配置

      说明

      记录类型

      在下拉列表中选择CNAME

      主机记录

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

      说明

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

      解析请求来源

      选择默认。

      记录值

      输入域名对应的CNAME地址,此处为NLB实例的DNS名称。

      TTL

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

步骤七:验证结果

  1. 测试NLB可用性:

    说明

    测试可用性时,请确保您的客户端已支持IPv6功能。

    1. 以任意一台可以访问IPv6服务的Linux客户端为例。如果未安装telnet,以CentOS系统为例可以参考执行yum install -y telnet安装telnet。

    2. 执行telnet 域名 端口命令,收到下图回复报文Connected to nlb-...,则表示NLB可以将请求转发至后端服务器。

      Trying *.*.*.*...
      Connected to www.example.com.
      Escape character is '^]'

      通过浏览器访问域名,例如http://域名,可以看到如下图所示,表示NLB可以将请求转发至后端服务器。

      image

  2. (可选)模拟故障:

    1. 在ECS01中执行systemctl stop nginx.service停用应用。

    2. 等待几分钟后,客户端再次执行telnet 域名 端口命令,仍然收到下图回复报文Connected to nlb-...

      Trying *.*.*.*...
      Connected to www.example.com.
      Escape character is '^]'

      通过浏览器访问域名,例如http://域名,可以看到如下图所示,表示NLB可以将请求转发至后端服务器。

      image

    3. 在ECS01中执行systemctl start nginx.service重新启动应用,在ECS02中执行systemctl stop nginx.service停用应用。

    4. 等待几分钟后,在客户端中再次执行telnet 域名 端口命令,仍然收到下图回复报文Connected to nlb-...

      Trying *.*.*.*...
      Connected to www.example.com.
      Escape character is '^]'

      通过浏览器访问域名,例如http://域名,可以看到如下图所示,表示NLB可以将请求转发至后端服务器。

      image

    5. 如上表明后端单台服务器故障不影响NLB可用性。

释放资源

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

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

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

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

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

  2. 删除域名解析记录;

    删除域名解析记录,请参见删除域名解析记录

  3. 清理NLB资源:

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

    2. 登录网络型负载均衡NLB控制台,顶部选择实例所属地域,在服务器组菜单单击服务器组右侧的image.png,弹出的窗口中选择删除并确认。

  4. 清理VPC资源:

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

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

相关文档