首页/云/Kubernetes 速查/NetworkPolicy 依赖的 CNI 能力
网络与服务55 条

NetworkPolicy 依赖的 CNI 能力

策略要真正执行必须由 CNI 插件实现;Calico、Cilium、Antrea 等支持策略,纯 Flannel 默认不执行策略(对象能建但不起作用)。

Kubernetes 速查云更新于 2026-10-13

策略要生效得靠插件

网络策略只是声明对象,是否真正阻断流量由网络插件决定。实现了策略执行的插件会把这些对象翻译成节点上的转发规则或内核程序;不支持的插件只会把对象存起来,流量照常通行。因此写策略之前,先确认集群里的插件具备这个能力。

基本信息

所属接口组networking.k8s.io/v1
执行方网络插件与节点上的转发规则
支持情况主流插件已支持,部分老式覆盖网络默认不执行
生效前提策略选择的目标 Pod 与该插件纳管的网络一致
验证方式建默认拒绝对照,验证连接被阻断

典型使用场景

  • 梳理东西向流量,收敛服务之间的可访问范围
  • 合规要求下隔离数据库与业务命名空间
  • 排查策略不生效:怀疑插件没有执行策略
  • 更换插件后做能力复核,确认策略能力没有退化
  • 多网卡环境确认策略作用于哪张网络

确认集群网络组件

确认集群网络组件
kubectl -n kube-system get pods -o wide | grep -i -E 'calico|cilium|antrea|flannel|kube-router'   # 插件类型
kubectl get networkpolicy -A | head                     # 已存在的策略
kubectl -n kube-system get pods -o wide                 # 插件副本是否就绪
kubectl get nodes -o wide                               # 节点网络情况

连通性验证(策略生效性测试)

连通性验证(策略生效性测试)
kubectl run np-test --rm -it --image=busybox:1.36 --restart=Never -n prod -- sh
# 容器内执行:
nc -zv -w 2 db 5432 && echo allowed || echo blocked     # 期望被阻断
nslookup db                                              # 解析是否正常
wget -qO- --timeout=2 http://db:5432                     # 另一种验证方式

能力与现象对照

情况现象处理
插件支持策略默认拒绝后连接被阻断按需逐条放开来源
插件不执行策略拒绝策略下连接仍然畅通更换或补齐插件能力
插件副本异常策略时灵时不灵先恢复插件自身状态
多网络并存只拦住其中一张网络的流量明确策略作用的网络范围
验证策略是否真正生效的标准做法是:先建一条默认拒绝,再从同命名空间的 Pod 发起连接。如果仍然畅通,说明插件没有执行策略,此时继续细化规则没有意义。
更换网络插件属于集群级变更,期间可能出现网络短暂中断。必须先完成方案设计与回滚演练,并在变更窗口内执行。

易错点

  • 插件不支持策略执行:策略对象创建成功却不阻断任何流量,形成虚假安全感
  • 只测受控环境不测拒绝路径:无法确认策略真实生效,问题往往在故障时才暴露
  • 更换插件前不做回滚演练:网络中断时无法快速恢复,影响面覆盖整个集群
  • 多网络并存未约定作用范围:策略只覆盖其中一张网卡,另一条路径仍然可达

数据来源与参考

  • Kubernetes 官方文档 · Network Policies / CNI 插件说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌