1. 理解Pod访问控制的核心需求
在企业级Kubernetes集群中,Pod与外部网络的通信控制是安全架构的关键组成部分。想象一下这样的场景:你的数据库Pod突然开始向可疑的外部IP地址传输数据,或者开发环境的Pod意外连接到生产系统的API端点。这些情况都可能引发严重的安全事件。
NetworkPolicy作为Kubernetes原生的网络策略资源,工作在OSI模型的第3层(IP)和第4层(端口),它能够精确控制:
- 哪些Pod可以访问特定外部IP段
- 哪些外部服务可以被Pod访问
- 基于协议和端口的精细化控制
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础环境准备与策略设计
2.1 网络插件选型要点
不是所有CNI插件都支持NetworkPolicy,以下是常见支持情况对比:
| 网络插件 | NetworkPolicy支持 | 性能特点 | 适用场景 |
|---|---|---|---|
| Calico | 完全支持 | 高性能,低延迟 | 生产环境首选 |
| Cilium | 完全支持(eBPF) | 极致性能,可观测性 | 高性能需求场景 |
| Weave Net | 支持 | 配置简单 | 中小规模集群 |
| Flannel | 需额外配置 | 轻量级 | 测试环境 |
生产环境推荐使用Calico或Cilium,它们提供了完整的策略实施能力和良好的性能表现。
2.2 策略设计原则
设计网络策略时,建议遵循最小权限原则:
- 默认拒绝所有出站流量
- 只开放必要的IP段和端口
- 按业务功能划分策略粒度
- 使用标签选择器实现动态绑定
3. 实战:阻止Pod访问特定外部IP段
3.1 基础拒绝策略模板
yaml复制apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-external-cidr
namespace: production
spec:
podSelector: {} # 应用到命名空间下所有Pod
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
except:
- 10.0.0.0/8 # 允许内网通信
- 192.168.1.0/24 # 允许特定网段
ports:
- protocol: TCP
port: 53 # 允许DNS查询
- protocol: UDP
port: 53
这个策略实现了:
- 默认拒绝所有出
