You need to enable JavaScript to run this app.
导航
ALB实现IPv4+IPv6流量的负载均衡
最近更新时间:2024.12.18 15:47:23首次发布时间:2024.07.08 16:07:56
我的收藏
有用
有用
无用
无用

本文指导您如何配置双栈 ALB 实例,以实现 ALB 承接 IPv4 、IPv6 的业务流量。通过参考本文的配置步骤,您的双栈 ALB 实例可以将 IPv4 、IPv6 的业务流量转发至后端服务器,从而使 IPv6 网络的客户端请求也能访问后端服务。

场景

您的业务希望利用 ALB 转发来自 IPv6 客户端的请求,IPv6 客户端通过 ALB 正常访问后端服务器。
Image

前提条件

说明

  • 当前私有网络开通 IPv6 功能、公网 IP 配置 IPv6 网关仅为白名单用户提供,如需体验请联系您的客户经理。
  • IPv4&IPv6 双栈实例仅对白名单用户开放。如需体验,请您联系客户经理或提交工单申请试用。

操作步骤

一、创建1个 IPv6 的 ECS-01 模拟客户端,1个 IPv4 的 ECS-02作为后端服务器。

  1. 创建一个 IPv6 的 ECS-01 ,模拟 IPv6 客户端访问。
  2. 创建一个 IPv4 的 ECS-02。作为后端服务器接收来自 ALB 的流量。具体内容请参考购买并使用云服务器实例
  3. 为 ECS-02 配置安全组规则,放行80端口,使安全组入方向能够允许接受 ALB 发送的请求。安全组放行100.64.0.0/10 服务网段。具体配置请参考搭建后端服务器安全组放通 ALB。在 ECS-02 中部署 Nginx 服务。
    yum install -y nginx && systemctl start nginx && systemctl status nginx && cd /usr/share/nginx/html/ && echo "Hello World! this is ipv4 rs." > index.html
    

二、为 ALB 所在的私有网络配置 IPv6 网关,实现公网访问。

  1. 登录 私有网络控制台,为 ALB 所在的私有网络启用 IPv6 。
    Image
  2. 登录子网控制台,参考子网开通/关闭IPv6,为 ECS 所在的私有网络下不同子网所对应的可用区开通 IPv6、分配 IPv6 CIDR。
    Image
    为 ALB 不同可用区分配 IPV6 CIDR:
    Image

三、创建 IPv4&IPv6 双栈实例,用于接收客户端的 IPv4、IPv6流量。

注意

  • IPv4&IPv6 双栈实例仅对白名单用户开放。如需体验,请您联系客户经理或提交工单申请试用。
  • 该实例与 ECS-02 所在的私有网络相同。
  • 该实例的可用区已经开通 IPv6 。
  • 私网类型的 IPv4&IPv6 双栈实例,不能接入公网流量。公网类型的 IPv4&IPv6 双栈实例,在创建时自动开通 IPv6 公网带宽,可以接入 IPv4、 IPv6的公网流量。

登录火山引擎应用型负载均衡控制台,完成如下操作。

  1. 参考创建实例创建一个公网类型的 IPv4&IPv6 双栈实例。
    Image
  2. 参考创建服务器组并添加后端服务器创建服务器组、添加后端服务器 ECS-02。
  3. 参考创建HTTP监听,完成双栈实例监听器的配置。
  4. 参考实例域名,获取 ALB 实例域名。在域名控制台配置域名解析,将您的服务域名通过 CNAME 方式解析到 ALB 实例上,通过实例域名的形式令您访问网络资源更加便捷。

四、测试连通性

方式一:通过 ping6 检查连接状况,通过 dig 获取详细 DNS 解析信息

假设你测试的应用服务域名为alb.example.com。实际测试时,请将alb.example.com替换为您的服务域名。

  1. ping6 检查:

    ping6 alb.example.com 
    

    如果返回了响应,说明 alb.example.com 已经成功解析到了一个 IPv6 地址且网络路径通畅。

  2. dig 检查:

    dig alb.example.com
    

    您可获取并查看服务域名的详细 DNS 解析信息,以确定解析结果是否符合预期。
    Image

方式二:通过模拟访问,查看相关字段确认连通性

  1. 前置工作:
    确保 Nginx 配置记录 X-Forwarded-For 头部:在 Nginx 配置文件(如 /etc/nginx/nginx.conf /etc/nginx/conf.d/default.conf)中增加或修改日志格式,确保包含 X-Forwarded-For头部。

    1. 打开配置文件/etc/nginx/nginx.conf

      sudo vim /etc/nginx/nginx.conf 
      
    2. 在 http 块中添加或修改日志格式。

      http {
       log_format custom '$remote_addr - $remote_user [$time_local] "$request" '
                         '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for"';
                         
       access_log /var/log/nginx/access.log custom;
       ...
      }
      
    3. 重新加载或重启 Nginx 配置:修改完配置文件后,重新加载 Nginx 配置以使更改生效。

      sudo systemctl reload nginx 
      
  2. 利用 ECS-01 模拟 IPv6 客户端使用curl 访问服务域名

    1. 输入curl命令。实际测试时,请将alb.example.com替换为您的服务域名。

      curl -6 -g -I http://alb.example.com 
      
    2. 您可获取服务器响应的基本情况,如下图所示,表示您的服务已接入 ALB 。
      Image

  3. 在服务端 Nginx 上查看访问日志,可发现在 x-forwarded-for 中存在 IPv6 客户端真实 IP 地址。使用如下命令:

    grep 'X-Forwarded-For' /var/log/nginx/access.log 
    

    您也可通过抓包工具来获取 x-forwarded-for 的信息。 x-forwarded-for 信息表明,IPv6 客户端已经成功接入 ALB。
    Image

常见问题

ALB 如何获取真实客户端IP地址?

答:ALB 会将真实的客户端 IP (IPv4 或者 IPv6)放在 HTTP 头部的 X-Forwarded-For字段,字段中的第一个地址就是客户端真实 IP。

使用双栈 ALB 实例后,访问提示502 错误

答:建议您优先检查后端应用服务运行状态是否正常,例如:

  • 检查后端ECS 安全组是否正确放行服务网段:100.64.0.0/10
  • 建议 ALB 启用后端服务健康检查,避免ALB 转发流量到异常的后端服务器。

如何提高 IPv6 按实际流量计费模式的默认带宽上限?默认带宽上限是否可以提升?

答:您可参考以下两种方式:

  1. 基于业务场景,您可通过购买共享带宽包的方式来提高默认 200M 的带宽限制。目前共享带宽包计费模式支持:固定带宽上限、95带宽,不支持如 IPv4 的按主流量计费模式。
  2. IPv6 按实际流量计费模式时,如需提高默认的带宽上限,您可联系客户经理,基于实例提升带宽上限。