首页/云/Kubernetes 速查/NetworkPolicy 选择器组合语义
网络与服务55 条

NetworkPolicy 选择器组合语义

namespaceSelector 与 podSelector 写在同一条目里是 AND(该命名空间内匹配的 Pod),分成多条目是 OR(任一满足即放行)。

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

选择器组合是并还是或

网络策略里的来源条目可以组合命名空间选择器与 Pod 选择器。写在同一条目内表示同时满足两个条件,属于交集;写成多个条目表示任一满足即可放行,属于并集。缩进层级不同,语义完全不同,这也是策略写错却看不出问题的主要原因。

基本信息

所属接口组networking.k8s.io/v1
组合规则同条目内为交集,多条目之间为并集
空选择器表示匹配该维度的全部对象
依赖条件网络插件需支持策略执行
核对方式查看对象详情并做连通性验证

典型使用场景

  • 只允许特定命名空间内带固定标签的 Pod 访问数据库
  • 放行集群内多个来源:既允许管理命名空间,也允许本命名空间内特定角色
  • 收紧默认拒绝后的放行清单设计
  • 排查策略生效范围:确认某来源为何被放行
  • 多环境共用策略模板时按环境标签区分

同一条目:两个条件同时满足

同一条目:两个条件同时满足
ingress:
  - from:
      - namespaceSelector:
          matchLabels:
            env: prod
        podSelector:            # 必须属于上述命名空间,且带 app=web
          matchLabels:
            app: web
    ports:
      - protocol: TCP
        port: 5432

两个条目:满足任一即可

两个条目:满足任一即可
ingress:
  - from:
      - namespaceSelector:      # 条件一:prod 命名空间内任意 Pod
          matchLabels:
            env: prod
      - podSelector:            # 条件二:本命名空间内 app=web 的 Pod
          matchLabels:
            app: web

写法与语义对照

写法语义风险
同一列表项内两个选择器两个条件同时满足缩进写错会变成放行更宽的条件
分成两个列表项任一满足即放行范围比预期大,需要仔细核对
命名空间选择器留空匹配全部命名空间相当于对全网开放
未写来源列表默认拒绝全部来源漏了必要放行会导致业务不通
策略写完后不要只看语法,要在受控环境验证连通性:从应当被拒绝的来源发起连接,确认真的被阻断,否则无法区分是策略正确还是插件没有执行。
命名空间标签是策略的引用点,改动标签会影响所有引用它的策略命中范围。批量调整标签前,先确认哪些策略依赖它。

易错点

  • 列表缩进层级写错:交集变成并集,安全边界被意外放大且对象本身没有任何提示
  • 选择器留空表达宽松条件:本意是放行一个来源,实际放行了所有命名空间
  • 策略语法正确但插件不支持执行:看起来被隔离,实际流量完全畅通
  • 批量修改命名空间标签:依赖这些标签的策略命中范围随之变化,可能造成业务突然不通

数据来源与参考

  • Kubernetes 官方文档 · NetworkPolicy(Selectors)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌