配置双堆栈 Elastic Beanstalk 负载均衡器
您可以通过配置了双堆栈的负载均衡器让您的 Elastic Beanstalk 环境同时支持 IPv4 和 IPv6 两种协议。创建负载均衡环境时,基础设施默认为支持 IPv4。您可以选择创建具有双堆栈配置的新环境,也可以选择将现有的仅限 IPv4 的环境更新为双堆栈环境。
若要使环境的负载均衡器能够处理 IPv6 和 IPv4 两种网络流量,请将 aws:elbv2:loadbalancer 命名空间中的 IpAddressType 选项设置为双堆栈。
注意
Elastic Beanstalk 仅支持应用程序负载均衡器和网络负载均衡器的双堆栈协议。对于使用经典负载均衡器的环境或单实例环境,它不支持双堆栈。
Amazon VPC 先决条件
在 Elastic Beanstalk 环境中配置负载均衡器之前,必须先使用 Amazon VPC 完成一些配置步骤:
-
将 IPv6 CIDR 数据块与您环境的 VPC 关联。
-
将 IPv6 CIDR 数据块与 VPC 的所有子网关联。
-
(可选)如果您的环境与 VPC 以外的组件交换网络流量,则其具有指定 VPC 可以与之通信的网络的路由表。在这种情况下,您必须更新 VPC 路由表以启用 IPv6 流量。
您可以使用 Amazon VPC 控制台或 AWS CLI 命令完成这些先决条件配置。以下主题将指导您并引导您参阅《Amazon VPC 用户指南》和 AWS CLI 命令参考以了解更多详细信息。
注意
完成 VPC 配置后,请等待几分钟让更改传播,然后再为负载均衡器配置双堆栈。如果在双堆栈设置过程中遇到 VPC 或子网配置错误,请等待几分钟让 VPC 配置传播,然后再次尝试配置双堆栈。
使用控制台完成 VPC 先决条件
《Amazon VPC 用户指南》中提供了完成这些先决任务的详细步骤。
-
请参阅《Amazon VPC 用户指南》中的步骤 1:将 IPv6 CIDR 数据块与您的 VPC 和子网关联。
此步骤包含两个您必须完成的程序:
-
将 IPv6 CIDR 块与 VPC 关联。
-
将 IPv6 CIDR 数据块与 VPC 子网关联。
-
-
(可选)如果您的环境与 VPC 以外的组件交换网络流量,则其具有指定 VPC 可以与之通信的网络的路由表。在这种情况下,您必须更新 VPC 路由表以启用 IPv6 流量。要完成此配置,请参阅《Amazon VPC 用户指南》中的步骤 2:更新路由表。
使用 AWS CLI 完成 VPC 先决条件
您可以使用 AWS CLI 来完成和验证先决条件配置。
-
将 IPv6 CIDR 数据块与您环境的 VPC 关联。
-
使用 associate-vpc-cidr-block 命令将 CIDR 数据块与您的 VPC 关联。
-
使用 describe-vpcs 命令验证您的 VPC 配置。
例 命令
# Associate an Amazon-provided IPv6 CIDR block with your VPC aws ec2 associate-vpc-cidr-block \ --vpc-idvpc-12345678\ --regionus-east-1\ --amazon-provided-ipv6-cidr-block # Verify the IPv6 CIDR block association aws ec2 describe-vpcs \ --vpc-idsvpc-12345678\ --regionus-east-1\ --query'Vpcs[0].Ipv6CidrBlockAssociationSet' -
-
将 IPv6 CIDR 数据块与 VPC 的所有子网关联。
-
使用 associate-subnet-cidr-block 命令将 CIDR 数据块与您的子网关联。
-
使用 describe-subnets 命令验证您的子网配置。
例 命令
# List all subnets in your VPC aws ec2 describe-subnets \ --regionus-east-1\ --filters"Name=vpc-id,Values=vpc-12345678"\ --query'Subnets[].{SubnetId:SubnetId,AvailabilityZone:AvailabilityZone}'# Associate IPv6 CIDR block with each subnet aws ec2 associate-subnet-cidr-block \ --subnet-idsubnet-12345678\ --regionus-east-1\ --ipv6-cidr-block2001:db8::/64# Verify IPv6 CIDR block association for all subnets aws ec2 describe-subnets \ --regionus-east-1\ --filters"Name=vpc-id,Values=vpc-12345678"\ --query'Subnets[].{SubnetId:SubnetId,Ipv6CidrBlock:Ipv6CidrBlockAssociationSet[0].Ipv6CidrBlock}' -
-
(可选)如果您的环境与 VPC 以外的组件交换网络流量,则其具有指定 VPC 可以与之通信的网络的路由表。在这种情况下,您必须更新 VPC 路由表以启用 IPv6 流量。
-
使用 create-route 命令在 VPC 内的路由表中添加路由。
-
使用 describe-route-tables 命令验证您的路由表。
例 命令
# Add IPv6 route to Internet Gateway for public subnets aws ec2 create-route \ --route-table-idrtb-12345678\ --destination-ipv6-cidr-block::/0\ --gateway-idigw-12345678\ --regionus-east-1# Add IPv6 route to NAT Gateway for private subnets (if applicable) aws ec2 create-route \ --route-table-idrtb-87654321\ --destination-ipv6-cidr-block::/0\ --nat-gateway-idnat-12345678\ --regionus-east-1# Verify routes aws ec2 describe-route-tables \ --route-table-idsrtb-12345678\ --regionus-east-1\ --query'RouteTables[0].Routes' -
为 Elastic Beanstalk 负载均衡器配置双堆栈
为环境设置 VPC 先决条件配置后,您可以使用双堆栈选项配置负载均衡器,使其同时支持 IPv4 和 IPv6 两种协议。您可以使用 Elastic Beanstalk 控制台、AWS CLI、.ebextensions 中的配置文件和 AWS SDK 来配置负载均衡器,以处理双堆栈流量。
使用控制台
您可以使用 Elastic Beanstalk 控制台为环境的负载均衡器配置双堆栈。
注意
此配置取决于数据在多个点的传播时间。配置负载均衡器并测试更改时,请考虑以下时间要求。
VPC 配置时间。完成 Amazon VPC 先决条件中所述的 VPC 配置后,请等待几分钟让更改传播,然后再执行以下步骤。如果在双堆栈设置过程中遇到 VPC 或子网配置错误,请等待几分钟,然后重试配置步骤。
DNS 传播时间。将 IpAddressType 选项设置为双堆栈后,请等待几分钟让更改传播,然后再进行测试。Route 53 DNS 传播可能需要 1 至 2 分钟才能完成。在此期间,如果您使用 IPv6 协议发起请求,则在测试从客户端到应用程序的通信时可能会遇到问题。
创建新环境:配置负载均衡器以支持双堆栈
-
启动 Elastic Beanstalk 控制台,并开始执行创建新环境的步骤。在配置服务访问权限页面中设置服务角色和 EC2 实例配置文件必填字段后,继续执行此过程中的步骤,为负载均衡器设置双堆栈配置。有关开始操作的更多信息,请参阅创建 Elastic Beanstalk 环境。
-
在配置服务访问权限中,选择下一步。
-
设置联网、数据库和标签页面随即显示。
如果您完成了上一节中所述的 Amazon VPC 先决条件,那么您已经设置了所需的 VPC 和子网。在这种情况下,请跳过此步骤及其子步骤,继续选择 VPC。
-
若要配置 VPC 和子网,您可以选择创建 VPC 以转到 VPC 控制台。按照使用控制台完成 VPC 先决条件中的步骤操作。
-
等待几分钟让 VPC 更新传播,然后返回到 Elastic Beanstalk 控制台并选择刷新以继续下一步。
如果在后续步骤中遇到 VPC 或子网配置错误,请等待几分钟让 VPC 配置传播,然后重试步骤。
-
-
在设置联网、数据库和标签页面上,从 VPC 下拉列表中选择一个已关联 IPv6 CIDR 数据块的值。
选择 VPC 后,实例子网将会填充 VPC 子网。
-
选择一个或多个实例子网,然后选择下一步。
-
配置实例流量和扩缩页面随即显示。
在负载均衡器网络设置中,将双堆栈(IPv4 和 IPv6)选择为启用。
-
选择负载均衡器类型。应用程序负载均衡器和网络负载均衡器均支持双堆栈。
-
您可以继续在当前控制台页面上配置其他负载均衡器选项。有关负载均衡器选项和配置的更多信息,请参阅本章中的其他主题。
-
继续执行后续步骤,完成环境的配置和创建。有关更多信息,请参阅 创建 Elastic Beanstalk 环境。
现有环境:配置负载均衡器以支持双堆栈
打开 Elastic Beanstalk 控制台
,然后在 Regions(区域)列表中选择您的 AWS 区域。 -
在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。
在导航窗格中,选择 Configuration(配置)。
-
在网络和数据库配置类别中,选择编辑。
-
如果您完成了上一节中所述的 Amazon VPC 先决条件,那么您已经设置了所需的 VPC 和子网。在这种情况下,请跳过此步骤及其子步骤,继续选择 VPC。
-
若要配置 VPC 和子网,您可以选择创建 VPC 以转到 VPC 控制台。按照使用控制台完成 VPC 先决条件中的步骤操作。
-
等待几分钟让 VPC 更新传播,然后返回到 Elastic Beanstalk 控制台并选择刷新以继续下一步。
如果在后续步骤中遇到 VPC 或子网配置错误,请等待几分钟让 VPC 配置传播,然后重试步骤。
-
-
在网络和数据库页面中,从 VPC 下拉列表中选择一个已关联 IPv6 CIDR 数据块的值。
选择 VPC 后,实例子网将会填充 VPC 子网。
-
选择一个或多个实例子网。
-
要保存更改,请选择页面底部的 Apply(应用)。
-
在 Instance traffic and scaling(实例流量和扩展)配置类别中,选择 Edit(编辑)。
-
在负载均衡器网络设置中,将双堆栈(IPv4 和 IPv6)选择为启用。
-
要保存更改,请选择页面底部的 Apply(应用)。
使用 AWS CLI
您可以使用 AWS 命令行界面(AWS CLI)将环境的负载均衡器配置为同时处理 IPv6 和 IPv4 网络流量。本节提供包含 aws:elbv2:loadbalancer 命名空间 create-environment 和 update-environment 命令的示例。
注意
此配置取决于数据在多个点的传播时间。配置负载均衡器并测试更改时,请考虑以下时间要求。
VPC 配置时间。完成 Amazon VPC 先决条件中所述的 VPC 配置后,请等待几分钟让更改传播,然后再运行这些命令将您的负载均衡器配置为双堆栈。如果在双堆栈设置过程中遇到 VPC 或子网配置错误,请等待几分钟,然后重试命令。
DNS 传播时间。将 IpAddressType 选项设置为双堆栈后,请等待几分钟让更改传播,然后再进行测试。Route 53 DNS 传播可能需要 1 至 2 分钟才能完成。在此期间,如果您使用 IPv6 协议发起请求,则在测试从客户端到应用程序的通信时可能会遇到问题。
例 :具有双堆栈配置的 create-environment 命令(内联命名空间选项)
aws elasticbeanstalk create-environment \ --region\ --application-nameus-east-1\ --environment-namemy-app\ --solution-stack-namemy-env\ --option-settings \ Namespace="64bit Amazon Linux 2 v3.4.0 running Python 3.8"aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role\ Namespace=aws:elbv2:loadbalancer,OptionName=IpAddressType,Value=dualstack
作为替代方法,请使用 options.json 文件来指定命名空间选项,而不是将其内联。以下示例命令演示了 update-environment 命令。
例 :具有双堆栈配置的 update-environment 命令(options.json 文件中的命名空间选项)
aws elasticbeanstalk update-environment \ --region\ --application-nameus-east-1\ --environment-namemy-app\ --solution-stack-namemy-env\ --option-settings \"64bit Amazon Linux 2 v3.4.0 running Python 3.8"file://options.json
### example options.json ### [ { "Namespace":"aws:elbv2:loadbalancer", "OptionName":"IpAddressType", "Value": "" } ]dualstack
以下示例更新了现有环境,将 IpAddressType 选项设置为 IPv4。
注意
如果您需要将环境配置从双堆栈回滚到 IPv4,则此示例中的 update-environment 命令非常有用。
例 :update-environment 命令,用于将 IpAddressType 设置为 IPv4
aws elasticbeanstalk update-environment \ --region\ --application-nameus-east-1\ --environment-namemy-app\ --solution-stack-namemy-env\ --option-settings \ Namespace="64bit Amazon Linux 2 v3.4.0 running Python 3.8"aws:elbv2:loadbalancer,OptionName=IpAddressType,Value=ipv4
使用 .ebextensions 配置文件
您可以使用 Elastic Beanstalk 配置文件使环境的负载均衡器能够处理 IPv6 和 IPv4 两种网络流量。请将 aws:elbv2:loadbalancer 命名空间中的 IpAddressType 选项设置为双堆栈。
注意
此配置取决于数据在多个点的传播时间。配置负载均衡器并测试更改时,请考虑以下时间要求。
VPC 配置时间。完成 Amazon VPC 先决条件中所述的 VPC 配置后,请等待几分钟让 VPC 更改传播,然后再应用 .ebextensions 配置。如果在此配置的设置过程中遇到 VPC 或子网配置错误,请等待几分钟,然后重试。
DNS 传播时间。将 IpAddressType 选项设置为双堆栈后,请等待几分钟让更改传播,然后再进行测试。Route 53 DNS 传播可能需要 1 至 2 分钟才能完成。在此期间,如果您使用 IPv6 协议发起请求,则在测试从客户端到应用程序的通信时可能会遇到问题。
例 :用于负载均衡器双堆栈配置的 .ebextensions/options.config(速记语法)
option_settings:aws:elbv2:loadbalancer:IpAddressType:dualstack
例 :用于负载均衡器双堆栈配置的 .ebextensions/options.config(标准语法)
option_settings: - namespace:aws:elbv2:loadbalanceroption_name:IpAddressTypevalue:dualstack
使用 AWS SDK
您可以使用 AWS SDK 配置双堆栈。与上一节中提到的 update-environment 和 create-environment AWS CLI 命令类似,您也可以使用 CreateEnvironment 和 UpdateEnvironment API 操作。使用 OptionSettings 请求参数来指定 aws:elbv2:loadbalancer 命名空间的选项。
注意
此配置取决于数据在多个点的传播时间。配置负载均衡器并测试更改时,请考虑以下时间要求。
VPC 配置时间。完成 Amazon VPC 先决条件中所述的 VPC 配置后,请等待几分钟让更改传播,然后再运行程序为双堆栈配置负载均衡器。如果在双堆栈设置过程中遇到 VPC 或子网配置错误,请等待几分钟,然后再次尝试运行双堆栈配置程序。
DNS 传播时间。将 IpAddressType 选项设置为双堆栈后,请等待几分钟让更改传播,然后再进行测试。Route 53 DNS 传播可能需要 1 至 2 分钟才能完成。在此期间,如果您使用 IPv6 协议发起请求,则在测试从客户端到应用程序的通信时可能会遇到问题。
故障排除
尝试使用 Amazon Q 开发者版 CLI 进行人工智能辅助故障排除
Amazon Q 开发者版 CLI 可以帮助您针对环境问题快速进行故障排除。Q CLI 可通过检查环境状态、审核事件、分析日志和询问澄清问题来提供解决方案。有关更多信息和详细演练,请参阅 AWS 博客中的 Troubleshooting Elastic Beanstalk Environments with Amazon Q Developer CLI
本节提供有关对负载均衡器双堆栈配置问题进行故障排除的指导。
事件:VPC vpc_id does not have IPv6 CIDR blocks configured. 双堆栈负载均衡器需要 IPv6 CIDR 数据块。在使用双堆栈模式之前,请将 IPv6 CIDR 数据块与 VPC 关联。
VPC 和所有子网都必须有与之关联的 IPv6 CIDR 数据块。这是在配置负载均衡器以支持双堆栈之前必须达成的 VPC 先决条件之一。有关更多信息,请参阅本主题前面的 Amazon VPC 先决条件。
事件:One or more subnets for VPC vpc_id do not have IPv6 CIDR blocks configured. 双堆栈负载均衡器所用的子网需要 IPv6 CIDR 数据块。在使用双堆栈模式之前,请将 IPv6 CIDR 数据块与所有必需的子网关联。
VPC 的所有子网都必须有与之关联的 IPv6 CIDR 数据块。这是在配置负载均衡器以支持双堆栈之前必须达成的 VPC 先决条件之一。有关更多信息,请参阅本主题前面的 Amazon VPC 先决条件。
错误:The IpAddressType option can only be applied on Elastic Beanstalk environments configured with an Application Load Balancer or Network Load Balancer.
此消息表明 Elastic Beanstalk 环境可能是单实例环境,或者该环境可能正在使用经典负载均衡器。只有配置了应用程序负载均衡器或网络负载均衡器的环境才能配置 IpAddressType。