在 2024 年 5 月,亚马逊网络服务AWS推出了一项新功能,为互联网可访问的应用负载均衡器提供服务。此增强功能使您可以在不需要公共 IPv4 地址的情况下配置应用负载均衡器,允许客户端仅通过 IPv6 地址连接。客户端通过解析分配给负载均衡器的 AAAA DNS 记录来进行连接。该应用负载均衡器仍然支持双栈,能够使用私有 IPv4 地址与负载均衡器和目标之间进行通信。此功能的好处在于,您可以灵活地为应用目标使用 IPv4 和 IPv6,同时避免不必要的公共 IPv4 费用。
在深入了解该功能之前,让我们回顾一下应用负载均衡器支持的 IP 地址类型:
地址类型描述ipv4客户端必须使用 IPv4 地址连接负载均衡器例如:192021。dualstack客户端可以同时使用 IPv4 地址例如:192021和 IPv6 地址例如:2001db885a38a2e03707334连接负载均衡器。dualstackwithoutpublicipv4客户端必须使用 IPv6 地址连接负载均衡器例如:2001db885a38a2e03707334。如图 1 所示,一个应用负载均衡器已在两个双栈子网中创建。这些子网具有指向互联网网关的默认 IPv6 (/0) 路由。应用负载均衡器提供了一个客户端可以通过互联网连接的 IPv6 地址,然后使用私有 IP 地址与目标进行通信。接下来,您可以在 Amazon Route 53 的公共托管区域中创建一个指向应用负载均衡器的 AAAA 别名记录,供您的应用用户使用。
图 1 无公共 IPv4 的双栈应用负载均衡器
下面我们来看看如何使用 AWS 命令行界面AWS CLI 或 AWS 管理控制台 来配置此功能。
使用 createloadbalancer 命令创建一个双栈负载均衡器。与任何应用负载均衡器一样,您必须在不同的可用区中指定两个子网,并且在创建应用负载均衡器之前,需要创建安全组。
bashaws elbv2 createloadbalancer name DualstackwithoutPublicIPv4ALB subnets subnet05ba35492f49ebf96 subnet07f835be0c4841904 securitygroups sg008c280444b05d751 ipaddresstype dualstackwithoutpublicipv4json{ LoadBalancers [ { LoadBalancerArn arnawselasticloadbalancinguseast1777788889999loadbalancer/app/DualstackwithoutPublicIPv4ALB/c32fa99f5dd20f18 DNSName DualstackwithoutPublicIPv4ALB949941269useast1elbamazonawscom CanonicalHostedZoneId Z35SXDOTRQ7X7K CreatedTime 20240524T2100488800000000 LoadBalancerName DualstackwithoutPublicIPv4ALB Scheme internetfacing VpcId vpc03d1bfe794747c9d8 State { Code provisioning } Type application AvailabilityZones [ { ZoneName useast1a SubnetId subnet05ba35492f49ebf96 LoadBalancerAddresses [] } { ZoneName useast1d SubnetId subnet07f835be0c4841904 LoadBalancerAddresses [] } ] SecurityGroups [ sg008c280444b05d751 ] IpAddressType dualstackwithoutpublicipv4 } ]}
要创建目标组或监听器等,请遵循文档:使用 AWS CLI 创建应用负载均衡器的教程。
通过打开亚马逊 EC2 控制台在同一地区,进入负载均衡器部分,然后单击 创建负载均衡器 创建一个新的应用负载均衡器,如图 2 所示。
接着,如图 3 所示,输入负载均衡器的名称,选择 互联网可访问 作为计划,以及 双栈无需公共 IPv4 作为 IP 地址类型。
选择虚拟私有云VPC、子网、安全组和目标组,如图 4 所示。
确保创建一个目标组和监听器。有关如何配置此操作的详细信息,请参考如何配置目标组和监听器。
确认新创建的应用负载均衡器只有一个 AAAA DNS 名称,如图 5 所示。
在 网络映射 选项卡中,应用负载均衡器被证明未配置任何公共 IPv4 地址,如图 6 所示。应用负载均衡器仍然会创建私有 IPv4 地址以便与目标进行通信。
您可以使用 nslookup 或 dig 验证负载均衡器仅返回 IPv6 地址:
bash nslookup DualstackwithoutPublicIPv4ALB368593218useast2elbamazonawscomServer 10102Address 10102#53
Nonauthoritative answerName DualstackwithoutPublicIPv4ALB368593218useast2elbamazonawscomAddress 2001db81063f105de70b4042fd8f27fName DualstackwithoutPublicIPv4ALB368593218useast2elbamazonawscomAddress 2001db81063f1065a412957435050c3
dig DualstackwithoutPublicIPv4ALB368593218useast2elbamazonawscom AAAA short2001db81063f1065a412957435050c32001db81063f105de70b4042fd8f27f
测试与应用负载均衡器的连接:
bash
以下使用案例是可以利用此功能的客户示例:
您的客户端可以在 IPv6 网络上与应用负载均衡器互通。这些客户端可以解析 IPv6 DNS,并连接到应用负载均衡器的 IPv6 端点。如果您需要公共 IPv4 连接,则必须继续使用双栈应用负载均衡器。使用支持 IPv6 端点的内容分发网络CDN作为源时,可以启用此功能。针对这种情况启用不带 IPv4 的双栈将消除应用负载均衡器的公共 IPv4 费用。
如果您当前只使用 IPv4 的应用负载均衡器,我们建议您先切换到双栈。这将使您在转换到不使用 IPv4 的双栈时更有信心,因为这是一个更渐进的改变。
然后,您应该测试所有的 IPv6 基础设施,特别是应用负载均衡器、互联网网关和路由表是否正确设置。确保所有客户端通过 nslookup 或 dig 获取应用负载均衡器的 IPv6 地址,并且客户端可以成功使用 curl 6 命令连接到 IPv6 应用负载均衡器的端点。在确认所有客户端都能成功连接到 IPv6 应用负载均衡器端点后,您可以使用选项 2 将地址类型切换到禁用 IPv4 的双栈,以平稳地将流量导向 IPv6 端点。
对于此选项,您可以创建两个独立但相同的环境。一个环境运行当前应用版本双栈或 IPv4 应用负载均衡器,另一个环境运行新应用版本无公共 IPv4 的双栈。验证客户端在执行 nslookup 或 dig 时,仅获取应用负载均衡器的 IPv6 地址,并且客户端能够成功通过 curl 6 命令完成请求。有关更多详细信息,请参考关于 部署策略 的白皮书。
使用这种方法可以提高应用的可用性,降低部署风险,并简化故障回滚过程。如果部署失败,则可以迅速回退。一旦对新环境完成测试,生产应用流量将重定向到新环境,旧环境将被弃用。
在这种情况下,您可以根据前面“配置该功能”部分中的步骤为不带 IPv4 地址的双栈应用负载均衡器创建新的部署,经过彻底测试后,将流量故障转移到新部署。
flyingbird 飞鸟机场在准备实施无公共 IPv4 的双栈应用负载均衡器时,请考虑以下事项:
在将应用负载均衡器迁移到无公共 IPv4 的双栈之前,请确认您没有任何客户端仍使用公共 IPv4 进行连接。您可以使用应用负载均衡器访问日志验证客户端详细信息,并查看 clientport 字段。如果您使用外部身份提供者IdP认证与应用负载均衡器一起使用,则应用负载均衡器与 IdP 或 Cognito 端点之间的所有通信仅使用 IPv4。如果您使用不带 IPv4 的应用负载均衡器,必须将其子网配置为能够访问 IdP 公共端点。您可以查看我们关于使用 NAT 网关连接只有 IPv6 的工作负载到 IPv4 服务的博客文章了解一个选项。如果您使用 AWS WAF,防火墙或安全服务支持 IPv6 端点作为目标,能够启用此功能。对于这种用途,启用禁用 IPv4 的双栈将消除应用负载均衡器的公共 IPv4 费用。创建负载均衡器时,您可以设置 IP 地址类型ipv4、dualstack 或 dualstackwithoutpublicipv4,并随时更新。有关配置的详细信息,请参见 双栈要求 部分。当您