首页/云/Kubernetes 速查/NetworkPolicy 规则要素(from/to/ports)
网络与服务55 条

NetworkPolicy 规则要素(from/to/ports)

一条规则由「方向 + 来源/目的 + 端口」组成:from 管入向、to 管出向,ports 用协议+端口限定;粒度为端口级而非应用层。

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

NetworkPolicy 规则要素是什么

一条 NetworkPolicy 回答三个问题:管哪些 Pod(podSelector)、管哪个方向(policyTypes 里的 Ingress 或 Egress)、放行谁(from 或 to)访问哪些端口(ports)。它是纯粹的白名单叠加模型:被策略选中且声明了某方向后,该方向只有被放行的流量才通过,没有显式的拒绝规则。策略本身只是声明,真正生效依赖支持 NetworkPolicy 的 CNI 插件。

基本信息

资源类型networking.k8s.io/v1 的 NetworkPolicy,命名空间级资源
作用对象由 podSelector 选中的 Pod,按方向生效
方向声明policyTypes 列出 Ingress、Egress,不写时按规则内容推断
放行来源ingress.from 支持 podSelector、namespaceSelector、ipBlock
放行目的egress.to 使用同样的三种选择器
前置条件需要 Calico、Cilium 等支持策略的 CNI,否则策略不生效

入向与出向完整示例

入向与出向完整示例
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: api-policy
  namespace: prod
spec:
  podSelector:
    matchLabels:
      app: api
  policyTypes: ["Ingress", "Egress"]
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: web      # 只允许带 app=web 的 Pod 访问
      ports:
        - protocol: TCP
          port: 8080
  egress:
    - to:
        - podSelector:
            matchLabels:
              app: db
      ports:
        - protocol: TCP
          port: 5432
    - to:
        - namespaceSelector: {}
      ports:
        - protocol: UDP
          port: 53       # 出向收紧后必须显式放行 DNS

要素拆解

字段作用省略时的含义
podSelector选中本策略管辖的 Pod,空选择器表示本命名空间全部 Pod不写等同于空选择器,管整个命名空间
policyTypes声明本策略约束哪个方向只写了 ingress 规则时默认按入向处理
ingress.from允许哪些来源访问规则里不写 from 表示允许所有来源
ports限定协议与端口不写 ports 表示该来源的所有端口都放行
ipBlock 与 except按网段放行,可排除子网只在需要放行集群外地址时使用

典型使用场景

  • 东西向隔离:只允许前端访问后端指定端口,阻止同命名空间的其他 Pod 横向探测
  • 数据面收敛:数据库只接受业务 Pod 的连接,出向与入向都收紧
  • 出向治理:限制 Pod 只能访问指定服务与 DNS,降低被攻陷后的横向移动能力
  • 跨命名空间放行:只允许监控命名空间抓取指标端口,其余来源一律不放行
  • 灰度收敛:新策略先按观察模式验证标签匹配,确认无误再收紧端口范围
同一元素里的 namespaceSelector 与 podSelector 是 AND 关系,表示「该命名空间里带这个标签的 Pod」;把它们拆成两个并列元素则是 OR 关系,含义完全不同。这是写错策略最常见的地方,写完用实际 Pod 标签核对一遍。
策略是白名单叠加,一旦给某个 Pod 声明了某方向,该方向未被任何策略放行的流量都会被丢弃,包括 DNS 与健康检查。收紧出向前先确认客户端 Pod 的数量与标签,避免把运维通道一起关掉。

易错点

  • 只写 from 不写 ports:等于放行该来源的全部端口,收窄粒度低于预期
  • 把出向规则写成默认拒绝后忘记放行 DNS:故障表现是所有解析超时,很容易误判为集群 DNS 故障
  • 集群没有安装支持策略的 CNI 就上线策略:对象创建成功但不生效,误以为已经隔离
  • 混用并列元素与嵌套选择器:想表达 AND 却写成了 OR,策略范围比预期大得多
  • 改了标签没有同步策略:选择器匹配不到 Pod,策略静默失效,流量默默变为不受约束

数据来源与参考

  • Kubernetes 官方文档 · NetworkPolicy(规则要素)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌