Kubernetes 网络策略(Network Policies)详解:从基础到实践
·
🔥「炎码工坊」技术弹药已装填!
点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】
一、基础概念
什么是网络策略?
Kubernetes 网络策略(Network Policy)是一种声明式资源对象,用于控制 Pod 之间及 Pod 与外部网络实体之间的流量。它通过标签选择器(Label Selector)定义规则,实现对流量的精细控制,类似于“应用级防火墙”。
核心作用:
- 流量隔离:限制 Pod 间的通信,防止横向渗透攻击。
- 安全加固:遵循最小权限原则,仅允许必要的流量通过。
- 合规性管理:满足行业标准(如 PCI-DSS)对网络分段的要求。
关键术语:
- Ingress(入口规则):控制外部流量如何进入 Pod。
- Egress(出口规则):控制 Pod 如何访问外部服务。
- 标签选择器(Label Selector):通过标签匹配目标 Pod 或命名空间。
二、技术实现
1. 网络策略的组成
网络策略通过 YAML 文件定义,包含以下核心字段:
podSelector:指定策略作用的目标 Pod(通过标签匹配)。policyTypes:定义策略类型(Ingress、Egress或两者)。ingress/egress:定义允许的流量来源(IP 段、命名空间、Pod 标签)及端口。
示例:允许特定命名空间的流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-from-same-namespace
spec:
podSelector: {} # 匹配命名空间内所有 Pod
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector: # 允许来自同命名空间的流量
matchLabels:
name: default
2. 支持网络策略的插件
Kubernetes 本身不直接实现网络策略,需依赖第三方网络插件,例如:
- Calico:支持复杂策略,适用于大规模集群。
- Cilium:基于 eBPF,性能优异。
- Weave Net:简单易用,适合中小型集群。
前置条件:
- 集群必须使用支持网络策略的网络插件。
- 策略仅作用于同一命名空间内的 Pod(跨命名空间需结合
namespaceSelector)。
三、常见风险
- 默认流量放行导致的漏洞
- 问题:默认情况下,所有 Pod 可以自由通信。
- 风险:攻击者可横向渗透整个集群。
- 配置错误导致服务中断
- 问题:误配置策略规则,导致关键服务无法访问。
- 示例:错误地拒绝了数据库 Pod 的入站流量。
- 过度宽松的策略
- 问题:策略范围过大(如允许整个 IP 段),增加攻击面。
- 未覆盖的出口流量
- 问题:未限制 Pod 访问外部服务(如公网),可能导致数据泄露。
四、解决方案
- 默认拒绝策略
- 目标:禁止所有流量,仅允许明确指定的流量。
- 示例:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all-ingress spec: podSelector: {} policyTypes: - Ingress
- 按标签精确控制流量
- 场景:仅允许前端 Pod 访问后端 Pod 的 80 端口。
- 示例:
-
ingress: - from: - podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 80
- 结合命名空间隔离敏感服务
- 场景:支付服务所在的命名空间仅允许特定服务访问。
- 示例:
ingress: - from: - namespaceSelector: matchLabels: project: finance
- 限制出口流量到特定 IP 段
- 场景:限制数据库 Pod 仅能访问指定的数据库 IP。
- 示例:
egress: - to: - ipBlock: cidr: 192.168.1.0/24
五、工具示例
- Calico 网络策略配置
Calico 支持高级策略(如全局网络策略),示例:apiVersion: projectcalico.org/v3 kind: NetworkPolicy metadata: name: calico-policy namespace: default spec: selector: role == 'db' types: - Ingress ingress: - action: Allow source: selector: role == 'app' - Azure 网络策略管理器(NPM)
Azure 提供内置策略管理,支持 Prometheus 监控指标,可通过 Azure 门户可视化流量。
六、最佳实践
- 遵循最小权限原则
- 仅允许必要的流量,避免宽泛规则(如
0.0.0.0/0)。
- 仅允许必要的流量,避免宽泛规则(如
- 分阶段实施策略
- 先测试策略(如通过
kubectl apply -f policy.yaml --dry-run=client),再逐步部署。
- 先测试策略(如通过
- 结合命名空间隔离
- 将敏感服务(如数据库)部署到独立命名空间,并限制跨命名空间访问。
- 定期审计策略
- 使用工具(如
kubectl get networkpolicies)检查策略覆盖率。
- 使用工具(如
- 监控异常流量
- 集成 Prometheus 和 Grafana,监控策略匹配的流量日志。
可视化流程图

专有名词说明表
| 英文术语 | 中文解释 |
| NetworkPolicy | 网络策略:Kubernetes 中用于控制 Pod 流量的资源对象。 |
| Ingress | 入口规则:控制外部流量如何进入 Pod。 |
| Egress | 出口规则:控制 Pod 如何访问外部服务。 |
| podSelector | Pod 选择器:通过标签匹配目标 Pod。 |
| namespaceSelector | 命名空间选择器:通过标签匹配目标命名空间。 |
| IPBlock | IP 段:定义允许或拒绝的 CIDR 网络范围。 |
| Calico | 支持网络策略的开源网络插件,提供高性能流量控制。 |
| Cilium | 基于 eBPF 的网络插件,支持高级安全策略。 |
| Prometheus | 开源监控工具,用于收集网络策略的流量指标。 |
总结
Kubernetes 网络策略是保障云原生安全的核心工具。通过合理配置策略,可以有效隔离流量、防止攻击扩散,并满足合规要求。初学者应从默认拒绝策略开始,逐步细化规则,并结合监控工具持续优化策略。
🚧 您已阅读完全文99%!缺少1%的关键操作:
加入「炎码燃料仓」🚀 获得:
√ 开源工具红黑榜
√ 项目落地避坑指南
√ 每周BUG修复进度+1%彩蛋
(温馨提示:本工坊不打灰工,只烧脑洞🔥)
更多推荐

所有评论(0)