NetworkPolicy 仅支持基于标签的访问控制,不提供流量清洗能力;其核心是通过 podSelector 和 namespaceSelector 匹配 Pod 并用 ingress/egress 规则允许或拒绝连接,真正清洗需依赖 Ingress Controller、服务网格、WAF 或 CNI 扩展。

NetworkPolicy 本身不支持“流量清洗”,只做访问控制
很多人一看到“基于标签的动态流量清洗”,就下意识去查 NetworkPolicy 的限速、丢包或 DDoS 防御能力——它根本没有。NetworkPolicy 是 Kubernetes 原生的网络策略对象,作用域仅限于「允许或拒绝 Pod 之间的连接」,底层依赖 CNI 插件(如 Calico、Cilium)实现,但所有标准实现都不提供协议解析、速率限制、异常行为识别等清洗能力。
真正能做清洗的是:
- 专用 Ingress controller(如 Nginx Ingress + ModSecurity)
- 服务网格(如 Istio 的
EnvoyFilter+ WAF 策略) - 独立的云原生 WAF(如 Traefik Enterprise、Solo Gloo Edge)
- 底层 CNI 扩展(如 Cilium 的
BandwidthPolicy或 eBPF 流量重定向)
如果你硬要用 NetworkPolicy 模拟“清洗”,唯一可行路径是:用标签匹配恶意来源 Pod,然后 deny 其所有出口/入口流量。但这属于“封禁”,不是“清洗”。
用 labelSelector 实现基于标签的精准封禁
NetworkPolicy 的核心能力是通过 podSelector 和 namespaceSelector 匹配目标,再用 ingress/egress 规则控制流量。关键点在于:规则生效的前提是 CNI 支持 NetworkPolicy,且 Pod 必须带标签。
例如,你想封禁所有打上 role=attacker 标签的 Pod 的出向连接:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: block-attacker-egress
namespace: default
spec:
podSelector:
matchLabels:
role: attacker
policyTypes:
- Egress
egress: []
注意:egress: [] 表示“不允许任何出向连接”,不是“放行全部”。这是初学者最常写反的地方。
常见陷阱:
-
podSelector: {}(空选择器)会匹配命名空间内所有 Pod,容易误伤 - 没指定
policyTypes,某些 CNI(如早期 Flannel)会忽略该策略 - Pod 标签变更后,策略不会自动重加载——必须重启 Pod 或等待控制器同步(通常秒级)
- NetworkPolicy 默认不跨 namespace 生效,
namespaceSelector需显式配置,且不能用通配符
“动态”靠的是标签生命周期管理,不是 NetworkPolicy 本身
所谓“动态”,实际是指:当某个 Pod 被检测到异常行为(比如高频 DNS 查询、外连已知 C2 地址),由外部系统(如 Falco + Kubeless 函数)给它打上 security-risk=true 标签,触发预置的 NetworkPolicy 自动生效。
这个流程里,NetworkPolicy 是静态的,真正动态的是标签注入动作。你可以用如下命令快速打标:
kubectl label pods <pod-name> security-risk=true --overwrite
但要注意:
- 标签键名必须符合 DNS 子域名规范(如不能含大写字母、下划线),否则
podSelector不会匹配 - 多个 NetworkPolicy 同时作用时,按“最小权限原则”叠加:只要有一条规则允许某连接,该连接就可通过
- NetworkPolicy 对 HostNetwork Pod 无效;对 kube-system 命名空间内的系统组件(如 kube-dns)也常被默认跳过,需检查 CNI 文档
真正需要清洗时,该换工具而不是硬撑
如果你的场景涉及 HTTP 层攻击(SQLi、XSS)、TLS 握手异常、连接洪泛,NetworkPolicy 完全无能为力。这时候应该:
- Ingress 层:用
nginx.ingress.kubernetes.io/waf-rule注解开启 ModSecurity 规则集 - 服务网格层:在 Istio 中定义
EnvoyFilter,注入 Lua 脚本做请求头校验或速率限制 - 底层增强:Cilium 1.14+ 支持
ClusterwideNetworkPolicy+ eBPF 流量镜像,可把可疑流量复制到分析服务
强行用 NetworkPolicy 做清洗,就像用锤子拧螺丝——能转,但会把螺纹磨平,还听不见“咔哒”声。


















