本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
当没有足够的 IP 地址来启动实例或扩展时
注意
对于公共服务,App Runner 不会在您的中创建弹性网络接口 (ENI)VPCs,因此您的公共服务不受此更改的影响。
本指南可帮助您解决在启用传出流量VPC访问权限的 App Runner 服务上可能遇到的 IP 耗尽错误。
App Runner 将在与您的VPC连接器关联的子网中启动实例。App Runner 在启动您的实例的子网中为ENI每个实例创建 1 个。每个子网都ENI使用一个私有 IP。子网的IPs可用数量是固定的,具体取决于与该子网关联的CIDR块。如果 App Runner 找不到足IPs以创建的子网ENI,它将无法为您的 App Runner 服务启动新实例。这可能会导致扩展服务时出现问题。在这种情况下,您将看到 App Runner 事件日志,表明 App Runner 无法找到可用IPs子网。您可以按照以下说明更新您的服务,以解决此类错误。
如何更新您的服务以提供更多可用服务 IPs
子网中可用的 IP 地址数量取决于与该子网关联的CIDR区块。 CIDR与子网关联的块在创建后无法更新。App Runner VPC 连接器一经创建,也无法更新。要为启用传出流量VPC访问权限的 App Runner 服务提供更多信息IPs,请执行以下操作:
-
使用更大的CIDR区块创建新的子网。
-
使用新子网创建新的VPC连接器。
-
更新您的 App Runner 服务以使用新的VPC连接器。
计算您的服务IPs需求
在尝试创建包含较大CIDR区块的新子网之前,请确定各个 App Runner 服务所需的子网数量。IPs我们建议按如下方式计算连接器中IPs需要的数量:
-
对于每个启用了出站流量VPC访问权限的服务,请记下 auto scaling 配置中的最大大小(最大实例)。
-
对所有服务的值进行求和。
-
将此金额翻一番,以计入蓝绿色部署期间启动的新实例。
示例
假设两个服务 A 和 B 使用相同的VPC连接器。
-
服务 A 的最大大小配置为 25。
-
服务 B 的最大大小配置为 15。
必填 IPs = 2 × (25 + 15) = 80
确保您的子网IPs总共至少有 80 个可用。
创建新子网
-
确定IPv4使用此公式所需的CIDR区块大小(请注意,5 IPs 由AWS:子网大小调整)
Number of available IP addresses = 2^(32 - prefix length) - 5
Example : For 192.168.1.0/24: Prefix length is 24 Number of available IP addresses = 2^(32 - 24) - 5 = 2^8-5 = 251 IP addresses For 10.0.0.0/16: Prefix length is 16 Number of available IP addresses = 2^(32 - 16) - 5 = 2^16-5 = 65,531 IP addresses Quick reference: /24 = 251 IP addresses /16 = 65,531 IP addresses
-
使用创建新子网AWSEC2CLI。
aws ec2 create-subnet --vpc-id <my-vpc-id> --cidr-block <cidr-block>
示例(创建一个包含 4,096 IPs 的子网):
aws ec2 create-subnet --vpc-id my-vpc-id --cidr-block 10.0.0.0/20
-
创建新的VPC连接器。请参阅:管理VPC访问权限
-
将您的服务更新为VPC启用传出流量以使用此新 VPC Connector.App Runner 将在您的服务更新后开始使用新的子网。
注意
VPCs还受可按CIDR块分配给子网的可用IPs数量的限制。如果您无法创建包含较大CIDR块的子网,则可能需要在创建新子网之前VPC使用辅助CIDR块进行更新。
将辅助CIDR方块附加到你的 VPC
将辅助CIDR方块与之关联VPC。
aws ec2 associate-vpc-cidr-block --vpc-id <my-vpc-id> --cidr-block <cidr-block>
示例 :
aws ec2 associate-vpc-cidr-block --vpc-id my-vpc-id --cidr-block 10.1.0.0/16
验证
更新服务后。您可以使用以下方法对您的修复进行验证
-
监控事件日志:监控您的 App Runner 服务事件日志,以验证没有出现新 IP ENI 或不可用错误
-
检查服务扩展:
-
通过更改自动缩放配置中的最小实例数来全面扩展服务
-
确认所有新实例均已启动,且没有任何与 IP 相关的错误
-
监控多个扩展事件,确保性能稳定
-
-
控制台横幅:如果您使用的是AWS管理控制台,请确认 App Runner 不再显示有关不足的横幅警告IPs。
-
VPC和子网 IP 利用率:
-
使用VPC控制面板或CLI命令检查新子网中的 IP 地址利用率。
-
确认在扩大服务规模IPs后,仍有可观的可用余额
-
常见陷阱
在解决 App Runner 服务中的 IP 耗尽问题时,请注意以下潜在问题:
-
IP 地址规划不足:低估 future 的 IP 需求可能会导致反复出现耗尽问题。考虑潜在的服务增长和高峰使用情况,进行全面的容量规划。
-
忽略VPC整个范围的 IP 使用情况:请记住,同一范围内的其他AWS服务VPC也会消耗 IP 地址。在规划您的VPC和子网配置时,请考虑所有服务的 IP 要求。
-
忽略更新服务:创建新子网或VPC连接器后,请确保更新 App Runner 服务以使用新配置。不这样做将导致继续使用已耗尽的 IP 范围。
-
误解CIDR方块重叠:在 a 中添加辅助CIDR方块时VPC,请确保它们不会与现有方块重叠。重叠的CIDR区块可能会导致路由冲突和 IP 地址模糊。
-
超出VPC限制:请注意,a 最多VPC可以有 5 个CIDR方块(1 个主方块和 4 个辅助方块)。在这些限制条件下规划 IP 地址空间的扩展。
-
忽略子网可用区分布:创建新子网时,请确保子网分布在多个可用区中,以实现高可用性和容错性。
-
忽略ENI限制:请记住,可以附加到实例的ENIs数量有限制。确认您的AWS账户限制与您计划的网络接口使用量一致。
通过了解这些陷阱,您可以更有效地管理VPC资源并避免 App Runner 服务中出现的 IP 耗尽问题。
其他资源
术语表
-
ENI: 弹性网络接口,中的虚拟网络接口AWS。
-
CIDR: 无类域间路由,一种分配 IP 地址的方法。
-
VPC连接器:一种资源,可让 App Runner 连接到你的VPC。