6.11 云网络进阶——AWS VPC + 混合云 + 多云方案

预计阅读时间:13 分钟

📖 目录

学习目标

学完本章后,你将能够:

  • 用 AWS CLI 创建 VPC、子网、路由表、IGW、NAT Gateway 等核心网络组件
  • 对比 Site-to-Site VPN 与 Direct Connect 的带宽、延迟与成本,为混合云选型
  • 用 Terraform 多 Provider 编排 AWS / Azure / GCP 多云网络互联
  • 区分安全组与 NACL 的层级、状态性与规则评估顺序
  • 用 Route 53 加权路由实现跨云 DNS 负载分发与故障转移
  • 评估 Consul、Istio East-West Gateway 等跨云服务发现方案

前置知识

一、AWS VPC 核心组件

VPC(Virtual Private Cloud)是 AWS 网络架构的基石。理解其核心组件是构建任何云上网络的前提。

1.1 子网(Subnet)

子网是 VPC 的 IP 地址分段,分为公有子网私有子网

  • 公有子网:路由表关联 Internet Gateway(IGW),实例可直接访问互联网
  • 私有子网:无 IGW 路由,实例仅能通过 NAT 访问外网,适合数据库、应用服务器等
# 使用 AWS CLI 创建 VPC
aws ec2 create-vpc --cidr-block 10.0.0.0/16 --tag-specifications \
  'ResourceType=vpc,Tags=[{Key=Name,Value=prod-vpc}]'

# 创建公有子网
aws ec2 create-subnet --vpc-id vpc-0abc123 --cidr-block 10.0.1.0/24 \
  --availability-zone ap-northeast-1a --tag-specifications \
  'ResourceType=subnet,Tags=[{Key=Name,Value=public-subnet-1a}]'

# 创建私有子网
aws ec2 create-subnet --vpc-id vpc-0abc123 --cidr-block 10.0.2.0/24 \
  --availability-zone ap-northeast-1a --tag-specifications \
  'ResourceType=subnet,Tags=[{Key=Name,Value=private-subnet-1a}]'

1.2 路由表(Route Table)

路由表决定子网流量的走向。每个子网必须关联一个路由表:

# 创建路由表并关联子网
aws ec2 create-route-table --vpc-id vpc-0abc123
aws ec2 associate-route-table --route-table-id rtb-0def456 --subnet-id subnet-0abc123

# 添加到 IGW 的路由(公有子网)
aws ec2 create-route --route-table-id rtb-0def456 \
  --destination-cidr-block 0.0.0.0/0 --gateway-id igw-0ghi789

1.3 NAT Gateway

NAT Gateway 允许私有子网中的实例访问互联网,同时阻止外部主动发起连接:

# 在公有子网创建 NAT Gateway
aws ec2 create-nat-gateway --subnet-id subnet-public-id \
  --allocation-id eipalloc-0xxx --type public
最佳实践:生产环境应在每个可用区部署独立的 NAT Gateway,避免单点故障。通过多 AZ 部署实现高可用。

1.4 Internet Gateway(IGW)

IGW 是 VPC 与互联网的连接点,水平扩展、高可用:

# 创建并附加 IGW
aws ec2 create-internet-gateway
aws ec2 attach-internet-gateway --internet-gateway-id igw-0ghi789 --vpc-id vpc-0abc123

1.5 VPC 组件关系图

组件作用关联对象
子网IP 地址分段VPC、路由表
路由表流量转发规则子网、路由条目
IGW互联网出入VPC、公有子网路由
NAT GW私有子网出站公有子网、EIP
安全组实例级防火墙EC2 实例、ENI

二、混合云网络——VPN 专线与 Direct Connect

混合云将本地数据中心与 AWS 云网络互联,核心方案包括 Site-to-Site VPN 和 Direct Connect。

2.1 Site-to-Site VPN

基于 IPSec 隧道的加密连接,适合快速部署:

# 创建虚拟私有网关(VGW)
aws ec2 create-vpn-gateway --type ipsec.1

# 创建 VPN 连接
aws ec2 create-vpn-connection --type ipsec.1 \
  --customer-gateway-id cgw-0abc --vpn-gateway-id vgw-0def

# 下载 VPN 配置文件
aws ec2 get-vpn-connection-device-sample-configuration \
  --vpn-connection-id vpn-0abc123 \
  --vendor "Generic" \
  --platform "Linux"
注意事项:VPN 连接的理论带宽上限为 1.25 Gbps,且受互联网质量影响,延迟和抖动不可控。对稳定性要求高的场景请考虑 Direct Connect。

2.2 Direct Connect

专线连接提供稳定、低延迟的私有网络通道:

对比维度VPNDirect Connect
带宽最高 1.25 Gbps1 / 10 / 100 / 400 Gbps
延迟受公网影响稳定、可预测
安全性IPSec 加密物理隔离(可叠加 VPN)
部署时间分钟级数周
成本

2.3 Azure ExpressRoute 与 GCP Cloud Interconnect

三大云厂商的专线方案大同小异:

# Azure ExpressRoute 示例
az network express-route create --resource-group rg-prod \
  --name prod-express-route --bandwidth 100 --peering-location "Amsterdam" \
  --provider "Equinix" --sku-tier Standard

# GCP Cloud Interconnect 示例
gcloud compute interconnects attachments create partner-attach \
  --region europe-west1 --router router-01 \
  --cloud-router-config "hello=world"

三、多云网络互联——Terraform 多 Provider 方案

多云架构避免厂商锁定,Terraform 是实现多云基础设施编排的首选工具。

3.1 多 Provider 配置

# main.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.0"
    }
    google = {
      source  = "hashicorp/google"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "ap-northeast-1"
  alias  = "tokyo"
}

provider "azurerm" {
  features {}
  alias = "westeurope"
}

provider "google" {
  project = "my-gcp-project"
  region  = "europe-west1"
  alias   = "europe"
}

3.2 跨云 VPC Peering 方案

# AWS VPC Peering(同区域/跨区域)
resource "aws_vpc_peering_connection" "cross_region" {
  provider    = aws.tokyo
  vpc_id      = aws_vpc.tokyo.id
  peer_vpc_id = aws_vpc.london.id
  peer_region = "eu-west-2"
  auto_accept = false

  tags = {
    Name = "tokyo-london-peering"
  }
}

# 跨云 VPN 隧道互联
resource "aws_vpn_connection" "to_azure" {
  provider            = aws.tokyo
  vpn_gateway_id      = aws_vpn_gateway.tokyo.id
  customer_gateway_id = aws_customer_gateway.azure.id
  type                = "ipsec.1"
  static_routes_only  = true
}

resource "aws_vpn_connection_route" "azure_cidr" {
  destination_cidr_block = "10.1.0.0/16"
  vpn_connection_id      = aws_vpn_connection.to_azure.id
}
建议:使用 Terraform Workspace 管理多环境,或通过 Backend 配置实现状态文件的远程共享与锁定。

3.3 多云网络拓扑设计

互联方式适用场景延迟复杂度
VPN Over Internet非关键业务、测试环境中等
专线互联生产核心链路
SaaS 中间件API 级互联
Service Mesh微服务跨云调用

四、云上安全组与 NACL 对比

AWS 提供两层网络防护机制,理解差异是架构设计的前提。

4.1 对比表

维度安全组(SG)网络 ACL(NACL)
层级实例级子网级
规则类型仅允许规则(Allow)允许 + 拒绝规则
状态有状态(自动允许回程)无状态(需双向配置)
默认行为默认拒绝所有入站默认允许所有流量
规则评估全部规则同时评估按编号顺序依次评估
关联范围多个实例仅一个子网

4.2 配置示例

# 安全组 —— 只允许 SSH 和 HTTP 入站
aws ec2 authorize-security-group-ingress --group-id sg-0abc123 \
  --protocol tcp --port 22 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id sg-0abc123 \
  --protocol tcp --port 80 --cidr 0.0.0.0/0

# NACL —— 显式拒绝某 CIDR,放行其余
aws ec2 create-network-acl --vpc-id vpc-0abc123
aws ec2 create-network-acl-entry --network-acl-id acl-0def456 \
  --rule-number 100 --protocol -1 --cidr-block 192.0.2.0/24 \
  --rule-action deny --egress false
aws ec2 create-network-acl-entry --network-acl-id acl-0def456 \
  --rule-number 200 --protocol -1 --cidr-block 0.0.0.0/0 \
  --rule-action allow --egress false
安全提醒:NACL 规则按编号从小到大执行,匹配即停止。务必确保拒绝规则编号小于允许规则,否则拒绝规则可能永远不会生效。

AWS VPC 安全最佳实践

实践说明
默认拒绝所有入站安全组只添加 Allow 规则,不使用 Deny
最小权限端口仅开放必要端口(22/80/443),避免 0.0.0.0/0 全开
自引用安全组安全组引用自身实现内部通信,无需维护 IP 列表
NACL 辅助防护NACL 做子网级兜底(如阻止已知恶意 IP 段)
Flow Logs 审计开启 VPC Flow Logs 记录所有网络流量
Private Link访问 AWS 服务走 Private Link 而非公网
# 开启 VPC Flow Logs
aws ec2 create-flow-logs --resource-type VPC \
  --resource-ids vpc-0abc123 \
  --traffic-type ALL \
  --log-destination-type cloud-watch-logs \
  --log-group-name /vpc/flowlogs \
  --deliver-logs-permission-arn arn:aws:iam::role/vpc-flowlogs-role

五、跨云 DNS 与服务发现

多云环境下,统一的 DNS 和服务发现机制是应用互通的关键。

5.1 各云厂商 DNS 服务

厂商DNS 服务特点
AWSRoute 53支持加权/延迟/故障转移路由策略
AzureAzure DNS与 Azure Resource Manager 深度集成
GCPCloud DNS全球 Anycast、低延迟

5.2 跨云 DNS 解析方案

# Route 53 权重路由 —— 同域名分流到多云
# main.tf
resource "aws_route53_record" "api" {
  for_each = {
    "aws"  = aws_lb.app_alb.dns_name
    "azure" = azurerm_lb.app_lb.fqdn
  }

  zone_id = aws_route53_zone.main.zone_id
  name    = "api.example.com"
  type    = "A"

  weighted_routing_policy {
    weight = each.key == "aws" ? 70 : 30
  }

  set_identifier  = each.key
  alias {
    name                   = each.value
    zone_id                = each.key == "aws" ? aws_lb.app_alb.zone_id : ""
    evaluate_target_health = true
  }
}

5.3 服务发现工具对比

工具适用场景多云支持
Consul传统微服务、VM 混合环境原生支持
Istio + East-West GWKubernetes 跨集群服务网格支持
AWS Cloud MapAWS 原生服务发现仅 AWS
CoreDNSKubernetes 集群内 DNS需额外插件
# Consul 跨数据中心配置示例
# /etc/consul/config.hcl
datacenter = "dc-tokyo"

primary_datacenter = "dc-tokyo"

# 跨 DC 发现
retry_join = [
  "provider=aws tag_key=consul-server tag_value=dc-tokyo"
]

connect {
  enabled = true
}

# DNS 回退配置
dns {
  config {
    service_conistency = "global"
  }
}
架构建议:跨云服务发现推荐使用 Consul 或 Istio 的 East-West Gateway。两者均支持健康检查、服务注册、故障转移,且不依赖特定云厂商。

多云架构成本优化策略

策略说明节省比例
Reserved Instances预留 1-3 年实例30-60%
Spot/Preemptible使用可抢占实例(无状态服务)60-90%
Right Sizing根据实际使用调整实例规格20-40%
S3 Intelligent Tiering自动切换存储层级30-50%
NAT Gateway 整合减少 NAT Gateway 数量30-50%
跨区域流量优化就近部署减少跨 AZ 流量10-30%
成本治理 云成本优化不是一次性工作,而是持续过程。建议每月 review 账单,使用 AWS Cost Explorer / Azure Cost Management 识别浪费,建立 FinOps 流程。

云网络架构设计原则

原则说明
最小权限安全组只开放必要端口,NACL 做兜底防护
高可用多 AZ 部署,NAT Gateway 每 AZ 独立
成本优化使用 VPC Endpoint 替代 NAT Gateway 访问 AWS 服务
可审计开启 VPC Flow Logs,记录所有网络流量
隔离性不同环境使用不同 VPC 或子网段

云网络故障排查命令速查

# AWS VPC 连通性排查
# 1. 检查安全组规则
aws ec2 describe-security-groups --group-ids sg-0abc123 --query 'SecurityGroups[*].IpPermissions'

# 2. 检查 NACL 规则
aws ec2 describe-network-acls --filters Name=vpc-id,Values=vpc-0abc123

# 3. 检查路由表
aws ec2 describe-route-tables --filters Name=vpc-id,Values=vpc-0abc123

# 4. 使用 Reachability Analyzer 验证路径
aws ec2 create-network-insights-path --source i-xxx --destination i-yyy --protocol TCP
aws ec2 start-network-insights-analysis --network-insights-path-id nip-xxx

# 5. 检查 VPC Flow Logs
aws logs filter-log-events --log-group-name /vpc/flowlogs --filter-pattern "REJECT"

常见错误

  • NACL 规则顺序导致拒绝失效:NACL 按编号从小到大评估,若允许规则编号小于拒绝规则,拒绝规则永远不会生效。务必确保拒绝规则编号更小。
  • VPN 隧道频繁断开:IPSec VPN 受公网质量影响,抖动或丢包会导致隧道重连。检查本地防火墙是否放行 UDP 500/4500 端口,确认双方 IKE/IPSec 参数完全匹配。
  • 私有子网实例无法访问互联网:常见原因是 NAT Gateway 所在子网缺少到 IGW 的路由,或实例的路由表未指向 NAT Gateway。逐一检查路由表条目和安全组出站规则。
  • VPC Peering 路由未配置:Peering 连接建立后仍需在双方路由表中添加对方 CIDR 的路由条目,否则流量无法互通。这是新手最常遗漏的步骤。
  • Direct Connect 路由泄漏:BGP 会话中断后路由可能未及时收回,导致流量黑洞。启用 BFD(Bidirectional Forwarding Detection)可加速故障检测。

最佳实践

  • 每个可用区部署独立 NAT Gateway:避免跨 AZ 流量产生额外费用,同时消除单点故障。使用 Terraform 模块批量部署,保持配置一致。
  • 安全组遵循最小权限原则:仅开放必要的端口和协议,避免 0.0.0.0/0 宽松规则。利用安全组引用自身实现自引用,简化内部通信配置。
  • 使用 Terraform Workspace 或 Backend 管理多环境:为 dev/staging/prod 创建独立状态文件,避免误操作覆盖其他环境配置。配合远程 State Backend(如 S3 + DynamoDB)实现团队协作锁定。
  • VPN 连接启用加密和日志:配置 CloudWatch Logs 监控隧道状态,设置告警在隧道 DOWN 时及时通知。生产环境建议配置双隧道冗余。
  • DNS 服务使用健康检查和故障转移:Route 53 配置健康检查,当主端点不可用时自动将流量切换到备用端点,实现跨云高可用。

故障排查案例:VPC Peering 路由配置后仍不通

现象:两个 VPC 之间已建立 Peering 连接(active 状态),但从 VPC-A 的实例 ping VPC-B 的实例超时。

排查:检查 VPC-A 的路由表,确认有到 VPC-B CIDR(10.1.0.0/16)的路由指向 Peering 连接;检查 VPC-B 的路由表,发现缺少到 VPC-A CIDR(10.0.0.0/16)的路由条目。

根因:VPC Peering 是双向路由,必须在双方路由表中都添加对方 CIDR 的路由。新手常只在一侧配置路由,导致流量只能单向通过。

修复:① 在 VPC-B 的路由表中添加目标 10.0.0.0/16 → Peering 连接 ID 的路由条目;② 检查双方安全组是否放行了 ICMP 和业务端口;③ 使用 VPC Reachability Analyzer 验证端到端可达性。

# 验证双方路由表
aws ec2 describe-route-tables --filters "Name=vpc-id,Values=vpc-a-id" \
  --query 'RouteTables[*].Routes[?DestinationCidrBlock==`10.1.0.0/16`]'

# VPC Reachability Analyzer(验证路径)
aws ec2 create-network-insights-path --source vpc-a-instance-id \
  --destination vpc-b-instance-id --protocol TCP --destination-port 22
aws ec2 start-network-insights-analysis --network-insights-path-id 

# 检查安全组入站规则
aws ec2 describe-security-groups --group-ids sg-0abc123 \
  --query 'SecurityGroups[*].IpPermissions'
VPC Peering 检查清单 ① Peering 连接状态为 active → ② 双方路由表均有对方 CIDR 路由 → ③ 安全组放行双向流量 → ④ NACL 未拒绝出站/入站流量 → ⑤ 实例的源/目的检查(Source/Dest Check)已禁用(如需路由流量)。

云上 NAT 成本优化

方案月成本(估算)适用场景
每个 AZ 独立 NAT Gateway$32 × AZ数 + 数据费生产环境高可用
共享单 NAT Gateway$32 + 数据费开发/测试环境
NAT 实例(EC2 替代)实例费 + 数据费预算敏感、低流量
VPC Endpoint(S3/DynamoDB)免费(同区域)访问 AWS 服务免 NAT
# 使用 VPC Endpoint 替代 NAT Gateway 访问 S3(免费)
aws ec2 create-vpc-endpoint --vpc-id vpc-0abc123 \
  --service-name com.amazonaws.ap-northeast-1.s3 \
  --route-table-ids rtb-0def456

# 验证 Endpoint 是否生效
aws ec2 describe-vpc-endpoints --filters "Name=vpc-id,Values=vpc-0abc123"

练习题

  1. 设计 VPC 架构:为一个三层 Web 应用(Web / App / DB)设计 VPC,包含公有子网和私有子网,配置 IGW、NAT Gateway、路由表和安全组,使用 AWS CLI 或 Terraform 实现。
  2. 搭建跨云 VPN:在 AWS 和 Azure 之间建立 Site-to-Site VPN 连接,配置路由和安全组规则,验证两端虚拟机可以互相 ping 通。
  3. 多云 DNS 负载均衡:使用 Terraform 在 Route 53 配置加权路由策略,将 api.example.com 的流量按 70/30 比例分发到 AWS ALB 和 Azure LB,并验证解析结果。

学习检查点

学完本章后,请检验自己是否掌握以下内容:

检查项自测问题验证方法
概念理解能用自己的话解释云网络的 SDN 和 Overlay 网络原理尝试向他人讲解
命令操作能不查文档完成云网络的 VPC peering 和负载均衡配置在终端实际执行
原理掌握能说出云网络的流量工程和 QoS 保障原理画出流程图
故障排查能独立排查跨 VPC 通信失败或网络延迟高的问题模拟故障并修复
最佳实践能说明为什么需要设计合理的云网络 CIDR 规划对比不同方案

本章总结

AWS 云网络由子网、路由表、IGW 与 NAT Gateway 等虚拟组件构成,它们通过路由规则协同决定流量的走向;混合云与多云场景则需在 VPN、Direct Connect 和跨云互联之间权衡带宽、延迟与成本。安全组与 NACL 分别提供实例级有状态和子网级无状态防护,配合 Route 53 加权路由与 Consul 等服务发现工具,可构建跨云高可用的网络架构。

延伸阅读

↑ 回到顶部