VPC 核心概念
深入理解 Amazon Virtual Private Cloud (VPC) 的核心概念和工作原理。
什么是 VPC
VPC 的本质
虚拟私有云:
VPC 是你在 AWS 云中的私有网络空间:
├─ 逻辑隔离的网络环境
├─ 完全由你控制
├─ 类似于传统数据中心网络
├─ 但更灵活、可扩展
└─ 支持混合云架构
VPC 的作用:
1. 资源隔离
├─ 不同应用、环境的网络隔离
├─ 多租户隔离
└─ 符合合规要求
2. 网络控制
├─ 自定义 IP 地址范围
├─ 创建子网
├─ 配置路由表
└─ 设置网关
3. 安全边界
├─ 安全组(Security Groups)
├─ 网络 ACL
├─ 流量监控
└─ 访问控制
VPC 的特性
关键特性:
完全可定制:
├─ IP 地址范围(CIDR)
├─ 子网划分
├─ 路由策略
├─ 网关配置
└─ 网络安全规则
高可用性:
├─ 跨多个可用区(AZ)
├─ 冗余网关
├─ 自动故障转移
└─ 弹性 IP 地址
灵活连接:
├─ Internet 连接
├─ VPN 连接
├─ Direct Connect
├─ VPC Peering
└─ Transit Gateway
可扩展性:
├─ 支持数千个实例
├─ 弹性网络接口
├─ 多个子网
└─ 灵活的 IP 分配
VPC 组件
1. CIDR 块(IP 地址范围)
CIDR 是什么:
CIDR (Classless Inter-Domain Routing):
├─ 定义 VPC 的 IP 地址范围
├─ 格式:IP地址/前缀长度
├─ 例如:10.0.0.0/16
└─ 决定 VPC 可用的 IP 数量
计算可用 IP:
├─ /16 = 65,536 个 IP 地址
├─ /24 = 256 个 IP 地址
├─ /28 = 16 个 IP 地址
└─ AWS 保留每个子网 5 个 IP
CIDR 规划原则:
选择合适的大小:
├─ /16:65,536 IP(推荐用于大型 VPC)
├─ /20:4,096 IP(中型 VPC)
├─ /24:256 IP(小型 VPC)
└─ /28:16 IP(最小推荐大小)
避免冲突:
├─ 不与本地网络冲突
├─ 不与其他 VPC 冲突
├─ 规划未来扩展空间
└─ 考虑 VPC Peering 需求
推荐的私有 IP 范围:
├─ 10.0.0.0/8(Class A)
├─ 172.16.0.0/12(Class B)
└─ 192.168.0.0/16(Class C)
CIDR 规划示例:
大型组织多 VPC 规划:
生产环境 VPC:
├─ VPC-Prod: 10.0.0.0/16
│ ├─ 可用 IP:65,536
│ └─ 用途:生产应用
开发环境 VPC:
├─ VPC-Dev: 10.1.0.0/16
│ ├─ 可用 IP:65,536
│ └─ 用途:开发测试
测试环境 VPC:
├─ VPC-Test: 10.2.0.0/16
│ ├─ 可用 IP:65,536
│ └─ 用途:QA 测试
管理 VPC:
└─ VPC-Mgmt: 10.3.0.0/16
├─ 可用 IP:65,536
└─ 用途:运维工具、跳板机
2. 子网(Subnets)
子网的作用:
子网是 VPC 内的 IP 地址段:
├─ 将 VPC 划分为更小的网络
├─ 每个子网属于一个可用区(AZ)
├─ 提供资源隔离
└─ 实现安全分层
子网类型:
├─ 公有子网(Public Subnet)
│ ├─ 可以访问 Internet
│ ├─ 有公网 IP
│ └─ 通过 Internet Gateway
│
└─ 私有子网(Private Subnet)
├─ 不能直接访问 Internet
├─ 仅有私有 IP
└─ 通过 NAT Gateway 访问外网(可选)
AWS 保留的 IP 地址:
每个子网 AWS 保留 5 个 IP:
示例:子网 10.0.1.0/24
保留地址:
├─ 10.0.1.0:网络地址
├─ 10.0.1.1:VPC 路由器
├─ 10.0.1.2:AWS DNS 服务器
├─ 10.0.1.3:AWS 预留(未来使用)
└─ 10.0.1.255:广播地址
可用地址:
├─ 10.0.1.4 - 10.0.1.254
└─ 共 251 个可用 IP
因此:
256 (总数) - 5 (保留) = 251 (可用)
子网规划最佳实践:
多可用区部署:
VPC: 10.0.0.0/16
├─ AZ-A 公有子网: 10.0.1.0/24
├─ AZ-A 私有子网: 10.0.11.0/24
├─ AZ-B 公有子网: 10.0.2.0/24
├─ AZ-B 私有子网: 10.0.12.0/24
├─ AZ-C 公有子网: 10.0.3.0/24
└─ AZ-C 私有子网: 10.0.13.0/24
优势:
├─ 高可用性
├─ 容错能力
├─ 灵活扩展
└─ 负载均衡
3. 路由表(Route Tables)
路由表的作用:
控制子网内流量的路由:
├─ 每个子网必须关联一个路由表
├─ 决定流量的目的地
├─ 支持多个路由规则
└─ 默认本地路由自动添加
路由表类型:
├─ 主路由表(Main Route Table)
│ ├─ VPC 创建时自动生成
│ └─ 未显式关联路由表的子网使用
│
└─ 自定义路由表
├─ 针对特定子网
└─ 更精细的路由控制
路由规则评估:
路由匹配原则:最长前缀匹配
路由表示例:
目的地 目标
10.0.0.0/16 local
0.0.0.0/0 igw-xxx
192.168.0.0/24 pcx-xxx
流量路由决策:
├─ 10.0.5.100 → local(最长匹配 /16)
├─ 8.8.8.8 → igw-xxx(匹配 /0)
└─ 192.168.0.50 → pcx-xxx(最长匹配 /24)
优先级:
1. 最具体的路由(最长前缀)
2. local 路由优先级最高
3. 静态路由优先于传播路由
4. Internet Gateway (IGW)
IGW 的作用:
Internet Gateway 是 VPC 与 Internet 的桥梁:
├─ 水平扩展
├─ 高可用
├─ 自动冗余
└─ 无带宽限制
工作原理:
VPC 资源 → IGW → Internet
│ │
└─ 私有 IP └─ 公有 IP
功能:
├─ NAT(网络地址转换)
├─ 路由
└─ 高可用(AWS 管理)
IGW vs NAT Gateway:
Internet Gateway:
├─ 用于公有子网
├─ 双向通信(入站 + 出站)
├─ 需要公网 IP 或 EIP
├─ 免费
└─ AWS 管理的高可用
NAT Gateway:
├─ 用于私有子网
├─ 单向通信(仅出站)
├─ 私有 IP → 公网 IP 转换
├─ 按小时和数据传输收费
└─ 需要部署在公有子网
5. NAT Gateway
NAT Gateway 详解:
用途:
让私有子网的资源访问 Internet,但不允许 Internet 主动访问它们
特性:
├─ 高可用(单 AZ)
├─ 自动扩展带宽(最高 45 Gbps)
├─ 需要弹性 IP(EIP)
├─ 部署在公有子网
└─ 受管服务(AWS 维护)
架构:
私有子网 EC2 → NAT Gateway → IGW → Internet
(私有IP) (EIP) (公网)
成本:
├─ 按小时收费:$0.045/小时
├─ 数据处理费:$0.045/GB
└─ 高可用需要每个 AZ 一个
NAT Gateway vs NAT Instance:
NAT Gateway(推荐):
├─ AWS 托管服务
├─ 自动高可用(单 AZ)
├─ 自动扩展带宽
├─ 无需管理
├─ 更高性能
└─ 成本较高
NAT Instance(不推荐):
├─ 自己管理 EC2
├─ 需要手动配置高可用
├─ 带宽受实例类型限制
├─ 需要维护和打补丁
├─ 可能成为瓶颈
└─ 成本较低(仅 EC2 费用)
选择建议:
✓ 生产环境:NAT Gateway
✓ 开发/测试:NAT Instance(成本敏感)
✓ 高可用:每个 AZ 一个 NAT Gateway
6. 弹性 IP (Elastic IP)
EIP 特性:
弹性 IP 地址:
├─ 静态公网 IPv4 地址
├─ 可以重新关联到不同资源
├─ 掩盖实例故障
├─ 账户级别拥有
└─ 跨可用区使用
使用场景:
├─ NAT Gateway
├─ 需要固定公网 IP 的 EC2
├─ 网络接口
└─ 故障转移
成本:
├─ 关联到运行实例:免费
├─ 未使用或关联到停止实例:收费
└─ 每个账户限制 5 个(可申请增加)
VPC 架构模式
单层架构
简单架构:
┌─────────────────────────────────┐
│ VPC (10.0.0.0/16) │
│ │
│ ┌───────────────────────────┐ │
│ │ Public Subnet (10.0.1.0/24) │
│ │ │ │
│ │ ┌──────┐ ┌──────┐ │ │
│ │ │ Web │ │ App │ │ │
│ │ └──────┘ └──────┘ │ │
│ └─────────────┬───────────────┘ │
│ │ │
│ ┌──────▼──────┐ │
│ │ IGW │ │
│ └─────────────┘ │
└─────────────────────────────────┘
特点:
├─ 所有资源在公有子网
├─ 直接暴露到 Internet
├─ 配置简单
└─ 安全性较低
适用场景:
├─ 简单的静态网站
├─ 开发/测试环境
└─ 概念验证(POC)
双层架构
经典三层架构:
┌────────────────────────────────────────────┐
│ VPC (10.0.0.0/16) │
│ │
│ ┌──────────────────┐ ┌─────────────────┐│
│ │ Public Subnet │ │ Private Subnet ││
│ │ (10.0.1.0/24) │ │ (10.0.11.0/24) ││
│ │ │ │ ││
│ │ ┌──────┐ │ │ ┌──────┐ ││
│ │ │ Web │ │ │ │ App │ ││
│ │ └──────┘ │ │ └──────┘ ││
│ │ ↓ │ │ ↓ ││
│ │ ┌──────┐ │ │ ┌──────┐ ││
│ │ │ ELB │ │ │ │ DB │ ││
│ │ └──────┘ │ │ └──────┘ ││
│ └─────┬────────────┘ └────────┬───────┘│
│ │ │ │
│ │ ┌────────┐ │ │
│ └─────►│ IGW │ │ │
│ └────────┘ │ │
│ │ │
│ ┌────────┐ │ │
│ │NAT GW │◄───────┘ │
│ └────────┘ │
└────────────────────────────────────────────┘
特点:
├─ Web 层在公有子网
├─ 应用和数据层在私有子网
├─ NAT Gateway 提供出站访问
└─ 更好的安全隔离
适用场景:
├─ 生产 Web 应用
├─ 典型的三层架构
└─ 需要数据库保护的应用
多层高可用架构
企业级架构:
┌─────────────────────────────────────────────────────────────┐
│ VPC (10.0.0.0/16) │
│ │
│ AZ-A AZ-B │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Public-A │ │ Public-B │ │
│ │ 10.0.1.0/24 │ │ 10.0.2.0/24 │ │
│ │ ┌────────┐ │ │ ┌────────┐ │ │
│ │ │ Web │ │ │ │ Web │ │ │
│ │ └────────┘ │ │ └────────┘ │ │
│ │ ┌────────┐ │ │ ┌────────┐ │ │
│ │ │NAT GW-A│ │ │ │NAT GW-B│ │ │
│ │ └────────┘ │ │ └────────┘ │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │
│ ┌────────┴────────┐ ┌────────┴────────┐ │
│ │ Private-A │ │ Private-B │ │
│ │ 10.0.11.0/24 │ │ 10.0.12.0/24 │ │
│ │ ┌────────┐ │ │ ┌────────┐ │ │
│ │ │ App │ │ │ │ App │ │ │
│ │ └────────┘ │ │ └────────┘ │ │
│ └─────────────────┘ └─────────────────┘ │
│ │ │ │
│ ┌────────┴────────┐ ┌────────┴────────┐ │
│ │ Data-A │ │ Data-B │ │
│ │ 10.0.21.0/24 │ │ 10.0.22.0/24 │ │
│ │ ┌────────┐ │ │ ┌────────┐ │ │
│ │ │RDS Pri │ │◄─────────────┤ │RDS Stan│ │ │
│ │ └────────┘ │ │ └────────┘ │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
│ ┌─────────────────┐ │
│ │ Internet GW │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
特点:
├─ 跨多个可用区
├─ 每个 AZ 有独立的 NAT Gateway
├─ 应用层冗余部署
├─ RDS 多 AZ 主备
└─ 负载均衡器分发流量
适用场景:
├─ 关键生产应用
├─ 需要高可用的服务
└─ 符合合规要求
VPC 设计原则
1. 高可用设计
多 AZ 部署:
原则:
├─ 至少使用 2 个可用区
├─ 每个层在每个 AZ 都有资源
├─ 使用负载均衡器
└─ 数据库使用 Multi-AZ
示例:
Web 层:
├─ AZ-A: 2 个 EC2
├─ AZ-B: 2 个 EC2
└─ ALB 分发流量
App 层:
├─ AZ-A: 2 个 EC2
├─ AZ-B: 2 个 EC2
└─ 内部 ALB
数据层:
├─ RDS Multi-AZ
├─ ElastiCache 多节点
└─ 自动故障转移
2. 安全分层
最小权限网络访问:
层次化安全:
├─ DMZ(公有子网)
│ └─ 仅暴露必要的服务
├─ 应用层(私有子网)
│ └─ 只接受来自 Web 层的流量
└─ 数据层(私有子网)
└─ 只接受来自应用层的流量
安全组规则:
Web → Internet: 允许 80, 443
App → Web: 允许应用端口
DB → App: 允许数据库端口
3. 可扩展设计
预留扩展空间:
CIDR 规划:
├─ 使用较大的 VPC CIDR(如 /16)
├─ 子网使用较小的 CIDR(如 /24)
├─ 预留 CIDR 用于未来子网
└─ 避免后期无法扩展
子网规划:
├─ 每个 AZ 预留多个子网 CIDR
├─ 为新服务预留空间
└─ 考虑未来的服务增长
理解这些核心概念是设计和管理 VPC 的基础!