VPC 网络
VPC 基础
VPC(Virtual Private Cloud)是云上的隔离网络环境,逻辑上等同于传统数据中心网络。
| 组件 | 说明 |
|---|---|
| VPC | 隔离的虚拟网络,定义 CIDR(如 10.0.0.0/16) |
| 子网 | VPC 内的网段分区,绑定可用区 |
| 公有子网 | 有路由到 Internet Gateway,实例可获取公网 IP |
| 私有子网 | 无直接公网访问,通过 NAT Gateway 出站 |
| Internet Gateway | VPC 与公网的出入口 |
| NAT Gateway | 私有子网的出站代理(只出不进) |
| 路由表 | 控制子网之间和出站的流量方向 |
安全组 vs NACL
| 安全组(Security Group) | NACL | |
|---|---|---|
| 层级 | 实例级别 | 子网级别 |
| 类型 | 有状态(自动允许回包) | 无状态(需显式出入规则) |
| 规则 | 只有允许规则 | 允许 + 拒绝规则 |
| 优先级 | 所有规则合并评估 | 规则编号,匹配到即停止 |
| 推荐 | 主要使用 | 作为额外防线 |
安全组配置示例
安全组 Terraform
resource "aws_security_group" "web" {
name = "web-sg"
vpc_id = aws_vpc.main.id
# 入站:HTTP + HTTPS
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# 入站:仅允许堡垒机 SSH
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
security_groups = [aws_security_group.bastion.id]
}
# 出站:全部允许
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
VPC 互联
| 方式 | 场景 | 特点 |
|---|---|---|
| VPC Peering | 两个 VPC 互联 | 不可传递、CIDR 不能重叠 |
| Transit Gateway | 多 VPC 组网 | 中心化路由,星型拓扑 |
| VPN | 连接本地数据中心 | IPSec 加密隧道 |
| 专线 | 低延迟连接 IDC | Direct Connect / 专有网络 |
常见面试问题
Q1: 公有子网和私有子网的区别?
答案:
- 公有子网:路由表中有一条
0.0.0.0/0 → Internet Gateway的路由,实例可分配公网 IP 直接访问互联网 - 私有子网:路由表中
0.0.0.0/0 → NAT Gateway(或无默认路由),实例无公网 IP
最佳实践:Web 服务器放公有子网(或用 ALB),数据库和内部服务放私有子网。
Q2: 如何设计 VPC CIDR?
答案:
- 预留足够地址空间:生产环境用
/16(65536 个 IP) - 不同环境 CIDR 不重叠(方便 VPC Peering)
- 子网按可用区 × 用途划分(公有/私有/数据库)
- 预留 IP:每个子网 AWS 保留 5 个 IP