AWS账单上那个每月400美元的NAT Gateway费用,可能不是业务增长带来的,而是你没有限制Pod出站流量。
大多数团队部署NetworkPolicy是为了安全:微隔离、爆炸半径控制。成本从来不在讨论范围内。这是个错误。无限制的Pod出站流量直接通向NAT Gateway数据处理费、跨可用区传输费,以及AWS账单上的意外项目。NetworkPolicy既是安全控制,也是成本控制。只把它当安全工具用的团队,正在把真金白银留在桌上。
AWS对NAT Gateway的收费是每GB 0.045美元,这还不包括每小时0.045美元的网关运行费——在传输一个字节之前,每月就要32.40美元。
在没有出站NetworkPolicy的集群里,每个调用外部API、包仓库或遥测端点的Pod,都会让流量经过NAT。一个拥有50个工作负载的集群,每个每天拉取100MB依赖更新,每月就会产生150GB的NAT处理数据。按0.045美元/GB计算,仅更新一项就是每月6.75美元。再加上应用遥测、对外端点的健康检查心跳、日志投递,这个数字会快速攀升。
真正的复利效应发生在规模扩大时。团队每个冲刺都部署新工作负载。每个工作负载拿到默认开放的Pod配置。没人审计它对外调用什么。六个月后,NAT Gateway数据处理变成每月400美元的项目,却没人对此负责。
跨可用区流量让问题雪上加霜。AWS对每个方向的跨可用区数据收取每GB 0.01美元。us-east-1a的Pod调用部署在us-east-1b的服务,往返要付0.02美元/GB。没有拓扑感知路由、没有NetworkPolicy引导流量到本地端点,这笔费用会和NAT成本一起隐形累积。
Kubernetes默认采用全允许网络模型。每个Pod可以到达其他每个Pod和每个外部端点,除非有显式限制。这不是bug,而是故意的设计选择,为了让上手更容易。但"容易上手"和"大规模安全运行"是不同的需求。
NetworkPolicy对象为Pod定义入站和出站规则。它们是命名空间范围的,且只在CNI插件支持执行时才生效。这是大多数文档一笔带过的部分:策略对象本身不够,你需要支持策略的CNI。
默认的AWS VPC CNI(aws-node)原生不执行NetworkPolicy。你必须安装AWS Network Policy Controller插件(EKS 1.25+可用)、作为独立策略引擎与aws-node并行部署的Calico,或完全替换aws-node的Cilium(基于eBPF的数据平面)。
GKE上,NetworkPolicy执行需要在集群创建时启用--enable-network-policy标志,或升级到Dataplane V2(基于Cilium)。AKS上,你在集群创建时选择Azure CNI with Calico或Azure Network Policy Manager。
关键含义:如果你的集群里有NetworkPolicy对象,但CNI不支持执行,你既没有安全,也没有成本节约。你只是有一份虚假的安全感,和一张持续膨胀的账单。
热门跟贴