当没有足够的 IP 地址来启动实例或扩展时 - AWS App Runner

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

当没有足够的 IP 地址来启动实例或扩展时

注意

对于公共服务,App Runner 不会在您的中创建弹性网络接口 (ENI) VPCs,因此您的公共服务不受此更改的影响。

本指南可帮助您解决在 App Runner 服务上可能遇到的 IP 耗尽错误,这些错误已启用 VPC 访问传出流量。

App Runner 将在与您的 VPC 连接器关联的子网中启动实例。App Runner 在启动您的实例的子网中为每个实例创建 1 个 ENI。每个 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 ,请执行以下操作:

  1. 使用更大 CIDR 块创建新子网。

  2. 使用新的子网创建新的 VPC 连接器。

  3. 更新您的 App Runner 服务以使用新的 VPC 连接器。

计算您的服务 IPs 需求

在尝试创建具有更大 CIDR 块的新子网之前,请确定 IPs 您的 App Runner 服务所需的子网数量。我们建议按如下方式计算连接器中 IPs 需要的数量:

  1. 对于每项启用了出站流量 VPC 访问权限的服务,请记下 auto scaling 配置中的最大大小(最大实例数)

  2. 对所有服务的值进行求和。

  3. 将此金额翻一番,以计入蓝绿色部署期间启动的新实例。

示例

假设两个服务 A 和 B 使用同一 VPC 连接器。

  1. 服务 A 的最大大小配置为 25。

  2. 服务 B 的最大大小配置为 15。

必填 IPs = 2 × (25 + 15) = 80

确保您的子网 IPs 总共至少有 80 个可用。

创建新子网

  1. 确定 IPv4 使用此公式所需的 CIDR 块大小(请注意,AWS 保留了 5 IPs 个:子网大小

    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
  2. 使用 AWS EC2 CLI 创建新的子网。

    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
  3. 创建新的 VPC 连接器。请参阅:管理 VPC 访问权限

  4. 使用此新 VPC 连接器启用到 VPC 的传出流量来更新您的服务。服务更新后,App Runner 将开始使用新的子网。

注意

VPCs 还受 IPs 到 CIDR 块可以分配给子网的可用数量的限制。如果您无法创建具有更大 CIDR 块的子网,则可能需要在创建新子网之前使用辅助 CIDR 块更新您的 VPC。

将辅助 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

验证

更新服务后。您可以使用以下方法对您的修复进行验证

  1. 监控事件日志:监控您的 App Runner 服务事件日志,以验证没有出现新 IP 或 ENI 不可用错误

  2. 检查服务扩展:

    1. 通过更改自动缩放配置中的最小实例数来全面扩展服务

    2. 确认所有新实例均已启动,且没有任何与 IP 相关的错误

    3. 监控多个扩展事件,确保性能稳定

  3. 控制台横幅:如果您使用的是 AWS 管理控制台,请确认 App Runner 不再显示横幅警告不足 IPs。

  4. VPC 和子网 IP 利用率:

    1. 使用 VPC 控制面板或 CLI 命令检查新子网中的 IP 地址利用率。

    2. 确认在扩大服务规模 IPs 后,仍有可观的可用余额

常见陷阱

在解决 App Runner 服务中的 IP 耗尽问题时,请注意以下潜在问题:

  1. IP 地址规划不足:低估 future 的 IP 需求可能会导致反复出现耗尽问题。考虑潜在的服务增长和高峰使用情况,进行全面的容量规划。

  2. 忽视 VPC 范围内的 IP 使用情况:请记住,同一 VPC 内的其他 AWS 服务也会消耗 IP 地址。在规划 VPC 和子网配置时,请考虑所有服务的 IP 要求。

  3. 忽略更新服务:创建新子网或 VPC 连接器后,请务必更新您的 App Runner 服务以使用新的配置。不这样做将导致继续使用已耗尽的 IP 范围。

  4. 误解 CIDR 区块重叠:向 VPC 添加辅助 CIDR 块时,请确保它们不会与现有区块重叠。重叠的 CIDR 块可能会导致路由冲突和 IP 地址模糊。

  5. 超出 VPC 限制:请注意,一个 VPC 最多可以有 5 个 CIDR 块(1 个主网段和 4 个辅助网段)。在这些限制条件下规划 IP 地址空间扩展。

  6. 忽略子网可用区分布:创建新子网时,请确保子网分布在多个可用区中,以实现高可用性和容错性。

  7. 忽略 ENI 限制:请记住,可以附加到实例的 ENIs数量有限制。确认您的 AWS 账户限制与您计划的网络接口使用量一致。

通过了解这些陷阱,您可以更有效地管理您的 VPC 资源并避免 App Runner 服务中的 IP 耗尽问题。

其他资源

术语表

  1. ENI:弹性网络接口,AWS 中的虚拟网络接口。

  2. CIDR:无类域间路由,一种分配 IP 地址的方法。

  3. VPC 连接器:一种支持 App Runner 连接到您的 VPC 的资源。