Amazon ANS-C01: VPC 设计与高级网络 — 学习指南

属于 AWS Advanced Networking Specialty ANS-C01 — 学习指南. 使用经过验证的答案练习: Amazon 考试中心, 或参加限时模拟考试: ExamRoll.io.

VPC 架构与子网划分基础

VPC 是 AWS 中最基础的网络边界,其 CIDR 分配的形态决定了之后的一切。规划 CIDR 地址块时要考虑到未来的增长和跨账户连接性:为每个账户/区域分配大的、不重叠的地址空间(例如,每个环境一个 /16),然后将其细分为 /20–/24 的子网,以便按功能和可用区隔离工作负载。请记住,EKS 和其他容器平台会为 Pod ENI 或辅助 IP 消耗 IP 地址;AWS VPC CNI 从 VPC 子网中为 Pod 分配 IP,而每个实例的 ENI/IP 限制(DescribeInstanceTypes)则约束了最大的 Pod 密度。对于 IPv6 的采用,首选双栈设计,将面向公网的服务迁移到 IPv6,同时保留 IPv4 用于传统集成;通过 API 调用 aws ec2 associate-vpc-cidr-block --vpc-id <vpc> --amazon-provided-ipv6-cidr-block 将 Amazon 提供的 IPv6 CIDR 块与 VPC 关联,并使用 create-subnet--ipv6-cidr-block 选项启用子网级别的 IPv6 分配。为 IPv4 出口流量规划 NAT 资源,对于 IPv6 则使用 Egress-Only Internet Gateway,通过 CreateEgressOnlyInternetGateway 创建并附加到 VPC。

路由表和子网布局是强制实施拓扑和弹性的方式。根据子网用途(公共、带 NAT 的私有、带 Direct Connect 的私有以及隔离)创建不同的路由表,使用 CreateRouteTableCreateRoute。跨多个 AZ 使用多个 NAT Gateway(或带自动伸缩的 NAT 实例)以避免单 AZ 出口故障;在使用 Transit Gateway (CreateTransitGateway, CreateTransitGatewayRouteTable) 时,要明确指定路由传播,以便本地(on-premises)前缀只被注入到预期的位置。对于账户内部的服务发现,使用 Route 53 私有托管区并将其与需要记录的 VPC 关联,以避免 DNS 信息跨边界泄露。

关键服务与配置细节

对于私有连接,有三种主流的结构需要理解:VPC Peering、AWS Transit Gateway 和 AWS PrivateLink (接口 VPC 端点)。VPC Peering (CreateVpcPeeringConnection, AcceptVpcPeeringConnection) 是简单、低成本的点对点连接,它需要配置路由表条目且不支持传递性路由(transitive routing)。Transit Gateway (CreateTransitGateway, CreateTransitGatewayVpcAttachment) 是可扩展的中心枢纽,支持数千个 VPC、集中式路由控制,并能与 Direct Connect Gateway 集成以实现混合连接;在 Transit Gateway 中使用路由表传播和路由表关联来控制东西向流量。PrivateLink(使用 CreateVpcEndpointServiceConfiguration 注册一个由 NLB 支持的服务,并使用 CreateVpcEndpoint 创建接口端点)可以在不将 VPC 暴露给路由的情况下跨账户暴露服务,提供精细的、按服务划分的安全性并简化安全组控制;它的扩展性很好,因为消费者创建接口端点,流量停留在 NIC 层面。

负载均衡和客户端 IP 保留是需要正确设计的常见选择。Application Load Balancer (ALB) 终止 TLS,在 L7 层进行路由(CreateLoadBalancer Type application),并注入 X-Forwarded-For/X-Forwarded-Proto 标头,后端必须信任这些标头才能记录客户端 IP。Network Load Balancer (NLB) 为目标组保留源 IP,并支持数百万连接;要实现真正的 TLS 穿透到后端,请使用带有 TCP 侦听器(CreateListener Protocol TCP)的 NLB,并按 IP 注册目标,以便加密会话完整地到达 Pod 或实例。对于 gRPC 和极高连接数的场景,首选在 EKS 前面放置 NLB,目标类型为 ip,并使用 AWS Load Balancer Controller 注解 service.beta.kubernetes.io/aws-load-balancer-type: "nlb-ip" 来直接注册 Pod IP;这种组合保留了源 IP,支持在 Pod 级别进行 mTLS 终止,并能与自动伸缩器协同扩展。

VPC 端点可以免除访问 AWS API 和流行服务时的互联网出口流量。用于 S3 和 DynamoDB 的网关端点(使用 CreateVpcEndpoint 并指定 --service-name com.amazonaws.<region>.s3)会向端点前缀列表添加路由,并且是免费的。接口端点(使用 CreateVpcEndpoint 并指定 --vpc-endpoint-type Interface)会创建带有私有 IP 和安全组的弹性网络接口;它们按小时和每 GB 流量计费,但能实现 PrivateLink 风格的服务消费,并且在与 NLB 支持的服务配对时支持跨账户访问。

设计模式与权衡

对于由多个跨账户的业务单元使用的中央共享服务,当您需要对每个连接进行控制和隔离时,PrivateLink 和端点服务是最安全、最具扩展性的模式。将服务托管在共享服务 VPC 中的 Network Load Balancer 后面,创建一个 VPC 端点服务 (

undefined

),然后让消费者账户创建您批准的接口端点。这样可以避免全网状连接并防止传递性路由,而且接口端点上的安全组允许您限制哪些消费者可以连接。其权衡之处在于每个端点的成本,以及接受和审计端点连接所需的一些管理开销。

当您有许多 VPC 需要广泛的连接性、集中的检查,以及一个通过 Direct Connect (

undefined

,

undefined

) 通告本地前缀的单一位置时,Transit Gateway 便能大放异彩。使用路由表分段和传播控制来避免意外的横向移动;Transit Gateway 支持路由优先级和路由表关联,因此您可以将生产流量与信任度较低的网络隔离开来。其权衡之处在于,Transit Gateway 会集中流量,并可能对本应是本地的跨 VPC 流量产生费用;它还会改变故障域,并需要仔细规划 CIDR 以防止地址重叠。

对于 CIDR 复用受限的混合架构,可以考虑将 Direct Connect 与 Transit Gateway 和 Direct Connect Gateway (

undefined

) 结合使用,以减少虚拟接口的数量。如果您需要在共享的物理链路上按业务单元隔离带宽,可以部署多个私有虚拟接口,并监控每个 VIF 的 CloudWatch 指标(指标名称如

undefined

,

undefined

),同时使用 VIF 级别的 CloudWatch 警报。要识别高流量用户,请启用 VPC Flow Logs (

undefined

) 将日志发送到 S3 或 CloudWatch Logs,并使用 Athena 或 CloudWatch Logs Insights 进行分析;对于虚拟机级别的抓包,可以在短时间内使用 Traffic Mirroring (

undefined

)。

采用 IPv6 和双栈设计可以减少对 NAT 的依赖,降低 NAT Gateway 的吞吐量成本,并简化面向客户端的地址分配。使用 API 调用

undefined

来分配一个由 Amazon 提供的 IPv6 前缀,并创建带有 IPv6 CIDR 块的子网。请注意,某些服务和第三方设备可能尚未支持 IPv6;可以在负载均衡器上使用双栈模式 (使用

undefined

并将

undefined

设置为

undefined

),以便在后端系统保持 IPv4 的同时,支持 IPv4 和 IPv6 客户端。

常见陷阱与决策标准

忽略 Kubernetes Pod 的 IP 地址消耗是服务中断的一个常见原因。要考虑到每种实例类型的 ENI 和辅助 IP 限制,并使用 VPC CNI 的设置(如

undefined

或前缀代理)来提高 IP 的可用性。未能在 L7 层面保留客户端 IP 是另一个常见的疏漏:如果必须在负载均衡器上终止 TLS,您必须确保应用程序读取

undefined

头部,并且 ALB 的安全控制要限制直接访问,以确保该头部是可信的。认为 VPC 对等连接可以无限扩展往往会导致难以管理的网状结构;对于多对多连接,应首选 Transit Gateway;对于需要精细安全和流量隔离的一对多服务暴露,应首选 PrivateLink。

安全策略应将安全组和网络 ACL 与命名空间级别的控制结合使用。要严格强制通过 Global Accelerator 而非直接的 ALB URL 进行访问,可以依赖以下组合方案:使用 AWS WAF IP 集,其中填充了 Global Accelerator 的 IP 范围(通过发布的

undefined

自动填充);或者将 ALB 设计为内部负载均衡器,并由一个作为 Global Accelerator 目标的 NLB 作为其前端,然后仅暴露 Global Accelerator 的入口。务必自动化任何基于 IP 的控制更新,并使用

undefined

和定期摄取

undefined

来进行验证。

实践问题:用例场景

公司:Equinox Payments。挑战:Equinox 运行一个由 EKS 支持的 gRPC 服务,该服务需要为数千个并发连接提供端到端的 mTLS,通过 Cluster Autoscaler 和 HPA 进行自动扩展,并为日志记录保留客户端 IP。方法:1) 通过 AWS Load Balancer Controller,将服务部署在一个 Network Load Balancer 后面,该 NLB 在 443 端口上配置了 TCP 侦听器,并使用注解

undefined

,以便将 Pod IP 注册为目标;2) 在 Pod 层面(而非 NLB)终止 TLS,并在应用程序中实现双向 TLS(服务器和客户端证书验证),使用 Kubernetes Secrets 存储证书,并利用就绪探针来驱动目标注册;3) 使用目标类型

undefined

来保留客户端源 IP,仅在需要中间设备时才启用代理协议,并依赖 Pod 端的日志记录从 TCP 连接中捕获客户端 IP;4) 将健康检查配置为 TCP 或 gRPC 感知的就绪探针,并确保 Cluster Autoscaler 策略和节点实例类型具有足够的 ENI 和 IP 容量;5) 实施 CloudWatch Container Insights 和 VPC Flow Logs (

undefined

) 来监控连接数和 VPC 级别的遥测数据。AWS 理由:带有 TCP 侦听器的 NLB 在扩展到数百万连接的同时,保留了加密会话和源 IP;目标类型

undefined

允许 Pod 无需 NAT 即可直接接收源 IP;在 Pod 层面终止 mTLS 满足了端到端加密和双向身份验证的要求;自动扩展之所以有效,是因为 Pod 的就绪状态直接影响目标注册,并且 NLB 会随着连接负载透明地扩展。


所有领域 · 混合连接:VPN 与 Direct Connect

练习这些题目 → · 在 ExamRoll.io 上限时练习 →

Pass the whole exam — not just this question

You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.

通过考试 →

浏览 Amazon →

Related guides

一体化访问

一次订阅。所有考试。

所有计划均可无限制搜索答案、进行模拟测试、获取AI解释以及访问完整的资源库 — 支持20多种语言。

每月
24.87
Just €0.83/day
包含所有内容:
  • 无限答案搜索
  • 无限模拟测试
  • AI驱动的解释
  • 完整资源库
  • 20多种语言
  • 每周内容更新
  • 奖励与推荐
  • 优先支持
开始免费试用

无需信用卡*

最具价值
12个月
179.87
Just €0.49/daySave 40%
包含所有内容:
  • 无限答案搜索
  • 无限模拟测试
  • AI驱动的解释
  • 完整资源库
  • 20多种语言
  • 每周内容更新
  • 奖励与推荐
  • 优先支持
开始免费试用

无需信用卡*

✓ 包含免费计划 · ✓ 随时取消 · ✓ 所有计划均解锁完整产品