亚马逊AWS官方博客

使用 PrivateLink 服务和端点加速 IPv6 的采用

Original URL: https://aws.amazon.com/blogs/networking-and-content-delivery/expedite-your-ipv6-adoption-with-privatelink-services-and-endpoints/

亚马逊云科技现在针对 Amazon PrivateLink 服务和终端节点支持 IPv6。针对 PrivateLink 支持 IPv6,通过解耦服务使用者和服务提供商的 IP 协议版本来加速 IPv6 的采用。即使服务提供商尚未对其所有后端服务开放 IPv6 支持,服务使用者也可以在其 VPC 中使用 IPv6 来访问服务端点。服务提供商可以专注其应用程序的核心功能,而服务使用者则可以通过本地或其他私有连接通过 IPv6 连接到其 VPC 中的服务端点。

越来越多的客户告诉我们他们有采用 IPv6 的意愿。IPv4 的 32 位寻址方案导致可用地址短缺,并会限制我们客户的增长速度。互联网占用量大的客户感受到了公有 IP 地址耗尽的压力,而 IPv4 私有地址池有限的企业也感受到了这种压力,因此他们希望能够扩展 IPv6 的使用。此外,采用 IPv6 还可带来其他优势,例如对 IPSec 的内置支持和简化网络管理。

随着 IPv6 采用量的日益增加,IPv4 资源无法自动与 IPv6 资源通信。因此,只能通过双栈、IPv4 到 IPv6 的转换或重构每个资源以仅使用 IPv6 来实现通信。如果实施起来,这可能会是一项繁重的任务。

实现了对 PrivateLink 服务和端点的 IPv6 支持后,服务提供商可以在网络边界实施双栈,而服务使用者和服务提供商都可以按照自己的节奏来采用 IPv6 。现有使用者和服务可以继续使用 IPv4,而新的使用者则可以开始使用 IPv6。

图 1 显示了使用服务提供商的 PrivateLink 服务的使用者架构示例。服务提供商的后端服务可以继续使用 IPv4。与此同时,一些使用者采用 IPv4 端点,而另一些使用者则采用 IPv6 兼容端点。

图 1:IPv6 与 Amazon PrivateLink 兼容性的网络拓扑图

本文先介绍 1/ 如何为 PrivateLink 服务采用 IPv6,然后介绍 2/ 如何为 PrivateLink 端点采用 IPv6。如果您是服务提供商,可以通过本文了解使 VPC 端点服务能够使用 IPv6 需要做出的更改(即使您的后端服务仍在运行 IPv4)。如果您是服务使用者,则可以通过本文了解使用 IPv6 兼容接口端点的步骤。

概览

  • 保留现有功能:采用 IPv6 的 VPC 端点具有所有现有功能,例如支持私有 DNS 名称、端点策略和安全组。带宽、配额、源 IP 保留和代理协议版本 2(PPv2)功能也均未发生变化。有关更多信息,请参阅 Amazon PrivateLink 概念
  • 默认情况下禁用互联网访问:具有 IPv6 地址的 VPC 端点弹性网络接口(ENI)是私有的,因此无法从互联网寻址。由于 ENI 上启用了 DenyAllIGWTraffic 属性,因此它们不能通过 VPC 的互联网网关(IGW)接收任何流量。所以,在创建和部署时都不能禁用该属性。
  • IP 地址类型取决于 VPC 子网:当您调用 create-vpc-endpoint 和 modify-vpc-endpoint API 时,IpAddressType 值表示是向您的 VPC 端点 ENI 分配 IPv4 地址、IPv6 地址还是两者兼而有之。只能在具有兼容 IP 版本的子网中创建 VPC 端点。有关更多信息,请参阅通过 Amazon PrivateLink 共享您的服务中的 IP 地址类型
  • DNS 记录类型取决于 IP 地址类型:当您在 DnsOptions 下调用 create-vpc-endpointmodify-vpc-endpoint API 时,DnsRecordIpType 值会指定您 VPC 端点的私有、区域和可用区 DNS 是具有 A 记录、AAAA 记录还是两者兼而有之。DnsRecordIpType  的允许值为 ipv4ipv6dualstack 或 service-defined,具体取决于 IpAddressType。有关更多信息,请参阅创建 Amazon PrivateLink 支持的服务 中的将您的端点服务设置为可供服务使用者使用
  • 亚马逊云科技私有 DNS 服务:当亚马逊云科技服务公开推出 *.aws 域名时,PrivateLink 将支持该域名作为额外的私有 DNS 名称。

针对 PrivateLink 启用 IPv6

VPC 端点服务

如果您是服务提供商,则必须按照步骤 1-4 执行操作,使使用者能够针对其 VPC 端点服务创建 IPv6 VPC 接口端点。服务提供商是亚马逊云科技客户或合作伙伴(例如 ISV)、附属组织(例如监管机构),或者仅仅是您向组织内其他 VPC 公开的应用程序,无需网络连接(例如 VPC 对等连接或 VPC 共享)。

步骤 1:将 VPC 和子网配置为双栈

您的 VPC 必须与 IPv6 CIDR 关联,且您的子网必须为双栈子网。要将现有的仅限 IPv4 的 VPC 和子网迁移至双栈,请参阅将现有 VPC 从 IPv4 迁移至 IPv6;要创建具有 IPv6 CIDR 区块和子网的新 VPC,请参阅 Amazon Virtual Private Cloud 用户指南中的使用 Amazon CLI 创建双栈 VPC 和子网

步骤 2:将网络负载均衡器配置为使用双栈 IP 地址类型

您需要将网络负载均衡器(NLB)的 IP 地址类型配置为双栈,以支持 IPv6 流量。

要将现有 NLB 的 IP 地址类型从仅限 IPv4 更新为双栈,请运行以下命令。

aws elbv2 set-ip-address-type \
--load-balancer-arn <nlb-arn> \
--ip-address-type dualstack

要创建双栈 NLB,请参阅网络负载均衡用户指南中的创建双栈负载均衡器。有关更多信息,请参阅网络负载均衡器的 IP 地址类型。创建新的 NLB 后,您可以关联其目标组侦听器配置和您所需的监控。目标不需要支持 IPv6 流量。在步骤 4:为 IPv6 接口端点启用 VPC 端点服务的过程中,您需要将新 NLB 添加到您的 VPC 端点服务。

步骤 3:如果您的应用程序处理来自 PPv2 标头的 IP 地址,则它还必须处理 IPv6

如果您未在 NLB 目标组上使用 PPv2,则可以跳过此步骤。

在目标组上启用 PPv2 可确保每个请求都有一个前置标头,其中包含 IP 地址信息以及源使用者 VPC 端点 ID。如果启用了 PPv2,且您的目标应用程序正在处理源 IPv4 地址(例如用于过滤流量),则目标应用程序还必须允许处理 IPv6 地址。

有关 PPv2 的更多信息,请参阅网络负载均衡器的目标组中的代理协议

步骤 4:为 IPv6 接口端点启用 VPC 端点服务

运行以下命令,将 IPv6 添加为您的 VPC 端点服务支持的 IP 地址类型。这使您的 VPC 端点服务能够在双栈模式下运行,同时接受 IPv4 和 IPv6 请求。

aws ec2 modify-vpc-endpoint-service-configuration \
--service-id vpce-svc-12345678 \
--add-supported-ip-address-types ipv6

注意:如果没有将任何与 VPC 端点服务关联的 NLB 配置为用于双栈,此命令会出错(请参阅步骤 2:将网络负载均衡器配置为使用双栈 IP 地址类型)。您可以分别使用 --add-network-load-balancer-arns--remove-network-load-balancer-arns 选项在 VPC 端点服务中添加或从中删除 NLB。

以下命令可创建新的支持 IPv6 的 VPC 端点服务。--network-load-balancer-arns 选项必须仅指定双栈 NLB,--supported-ip-address-types 选项必须为 ipv4,ipv6。如果没有将任何与 VPC 端点服务关联的 NLB 配置为用于双栈,此命令会出错。

aws ec2 create-vpc-endpoint-service-configuration \
--network-load-balancer-arns <nlb-arns> \
--supported-ip-address-types ipv4,ipv6

VPC 端点

VPC 端点服务支持 IPv6 后,其使用者就可以为关联的 VPC 端点启用 IPv6 或双栈。如果您使用的是 PrivateLink 服务,必须按照步骤 1-4 创建 IPv6 或双栈 VPC 接口端点。

步骤 1:确认 VPC 端点服务允许 IPv6 端点

要在您的 VPC 端点上启用 IPv6,此服务必须将 IPv6 作为 SupportedIpAddressType。您可以通过调用 describe-vpc-endpoint-services API 来了解此服务是否支持 IPv6。

aws ec2 describe-vpc-endpoint-services
--filters "Name=supported-ip-address-types,Values=ipv4,ipv6"

在响应中,SupportedIpAddressTypes 提供了在 PrivateLink 服务上启用的 IP 地址类型。双栈 VPC 端点服务响应包括 IPv4 和 IPv6。

{
    "ServiceNames": [
        "com.amazonaws.vpce.region.vpce-svc-12345678"
    ],
    "ServiceDetails": [
        {
            "ServiceName": "com.amazonaws.vpce.region.vpce-svc-12345678",
            "ServiceId": "vpce-svc-12345678",
            ...
            "Owner": "098765432109",
            "BaseEndpointDnsNames": [
                "vpce-svc-12345678.region.vpce.amazonaws.com"
            ],
            ...
            "SupportedIpAddressTypes": [
                "ipv4",
                "ipv6"
            ]
        }
    ]
}

步骤 2:IpAddressType 值必须与子网的 IP 版本兼容

您必须选择您的 VPC 端点将使用哪个 IP 版本作为 IpAddressType 值,步骤 4:在接口端点上启用 IPv6 需要使用此版本。必须在具有兼容 IP 版本的子网中创建 VPC 端点。有关更多信息,请参阅通过 Amazon PrivateLink 共享您的服务中的为接口端点启用 IPv6 的要求。VPC 端点服务必须支持指定的 IP 地址类型。

要将现有仅限 IPv4 的 VPC 和子网迁移到双栈或仅限 IPv6,请参阅 Amazon Virtual Private Cloud用户指南中的将现有 VPC 从 IPv4 迁移到 IPv6

步骤 3:DNS 记录 IP 地址类型必须基于 IP 版本

您的 DnsRecordIpType 必须基于您的 IpAddressType 值。步骤 4:在接口端点上启用 IPv6 将需要此值。有关基于 DnsRecordIpType 值创建的记录集的更多信息,请参阅通过 Amazon PrivateLink 共享您的服务中的接口端点的 DNS 记录 IP 地址类型

步骤 4:在接口端点上启用 IPv6

您可以创建或修改支持 IPv6 的端点。您可以使用验证过的支持 IPv6 的服务,并使用您在步骤 2步骤 3 中确定的值,来调用 create-vpc-endpoint API 或 modify-vpc-endpoint API。

以下示例使用 create-vpc-endpoint API 创建新的双栈接口端点。

aws ec2 create-vpc-endpoint \
--vpc-id vpc-12345678 \
--vpc-endpoint-type Interface \
--service-name com.amazonaws.vpce.region.vpce-svc-12345678 \
--subnet-id subnet-12345678 \
--security-group-id sg-12345678 \
--ip-address-type dualstack \
--dns-options "DnsRecordIpType=dualstack"

根据 PrivateLink 服务配置,新创建的端点连接可能需要被 VPC 端点服务提供商接受才能使用。有关更多信息,请参阅 Amazon PrivateLink 和 VPC 端点用户指南中的接受和拒绝端点连接请求

以下示例使用 modify-vpc-endpoint API,通过将端点更改为双栈来启用仅 IPv4 VPC 端点以用于 IPv6。

aws ec2 modify-vpc-endpoint \
--vpc-endpoint-id vpce-12345678 \
--add-subnet-ids subnet-12345678 \
--remove-subnet-ids subnet-12345678 \
--ip-address-type dualstack \
--dns-options "DnsRecordIpType=dualstack"

您可以通过调用 describe-vpc-endpoints API 来确保在端点上启用 IPv6。以下示例将为您的 VPC 端点的 dualstack 返回 IpAddressType 值。

aws ec2 describe-vpc-endpoints \
--vpc-endpoint-ids vpce-12345678

在响应中,IpAddressTypeDnsOptions 应返回您在创建或修改端点时指定的值。以下是我们的示例,它将两个值都显示为 dualstack

{
    "VpcEndpoints": [
        {
            "VpcEndpointId": "vpce-12345678",
            ...
            "IpAddressType": "dualstack",
            "DnsOptions": {
                "DnsRecordIpType": "dualstack"
            },
            ...
        }
    ]
}

您也可以使用 filters 选项列出与您指定的条件匹配的所有端点。以下示例将为所有 VPC 端点的 dualstack 返回 IpAddressType 值。

aws ec2 describe-vpc-endpoints \
--filters Name=ip-address-type,Values=dualstack

结论

PrivateLink 端点 IPv6 兼容性允许客户通过解耦服务提供商和服务使用者 IP 版本来更快地采用 IPv6。如果您是在 IPv4 上运行堆栈的服务提供商,则可以通过 IPv6 将您的服务端点设置为可供服务使用者使用。如果您是需要采用 IPv6 的使用者,现在可以选择通过 IPv6 与您的 PrivateLink 端点进行交互。本博文介绍了 PrivateLink IPv6 的功能,并提供了您可以遵循的步骤,只需很少的工作量即可将该功能应用于您的服务和端点。有关 PrivateLink 的更多信息,请参阅 Amazon PrivateLink 和 VPC 端点用户指南。要开始使用 PrivateLink,请参阅适用于 VPC 的亚马逊云科技管理控制台中的端点服务端点

本篇作者

Ken Howard

Kenneth “Ken” Howard 是亚马逊云科技在宾夕法尼亚州匹兹堡的一位解决方案架构师。他热衷于通过黄金标准架构和流程解决复杂的业务问题。在业余时间,Ken 会与妻子、女儿和一群狗一起共度时光,唱一些 Reba McEntire 的经典老歌。

Raju Rangan

Raju Rangan 是亚马逊云科技在纽约的一位高级解决方案架构师。Raju 于 2019 年加入亚马逊云科技,负责与各组织合作,在亚马逊云科技上设计和开发架构,并为他们的云之旅提供支持。

Blayze Stefaniak

Blayze Stefaniak 是亚马逊云科技的一名高级解决方案架构师,负责与公共部门、联邦金融和医疗保健组织合作。Blayze 在匹兹堡工作。他热衷于将复杂情况分解为切实可行的操作。他的兴趣包括人工智能、分布式系统和 Excel 公式运算。Blayze 拥有宾州克莱瑞恩大学的会计学学士学位和信息系统学士学位。在业余时间,Blayze 喜欢收听《星球大战》有声读物,与他的狗狗玩耍,也可能会静静的享受时光。