首页/云/Kubernetes 速查/NetworkPolicy 网络策略基础
网络与服务55 条

NetworkPolicy 网络策略基础

以 Pod 为对象的防火墙规则:选择哪些 Pod、允许哪些方向的流量;策略是叠加的允许清单,未放行的默认拒绝。

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

网络策略是什么

网络策略是以对象为粒度的防火墙规则:先选定一组对象,再声明允许哪些来源、访问哪些端口。它的语义是允许清单——一旦某个对象被策略选中,未明确放行的流量就被拒绝。这一点与习惯上的「加一条拒绝规则」相反,理解错了会把服务整体切断。

生效前提是网络插件支持

策略对象由网络插件负责实现,插件不支持时对象能创建成功但完全不生效,也不会报错。因此上线网络策略前必须确认插件能力,否则会得到「以为已经隔离了、实际上仍然互通」的错觉。这也是排查时需要先回答的第一个问题。

基本信息

作用层级网络层与传输层,基于地址、端口与协议
生效前提集群网络插件支持策略执行
作用对象由选择器选中的对象,默认在所属命名空间内
规则语义允许清单,未放行即拒绝
方向可分入站与出站两个方向
叠加行为多个策略之间是并集关系,任一允许即通过

典型使用场景

  • 数据库隔离:只允许应用层访问数据库端口,其他来源一律拒绝
  • 默认拒绝:为新命名空间铺一条基线,只放行必要流量
  • 东西向收敛:限制服务之间不必要的互相访问,缩小横向移动面
  • 合规要求:按审计要求证明关键组件之间的访问是受控的
  • 排障隔离:临时限制某个服务的入站来源,判断问题是否来自外部调用
  • 多租户隔离:不同团队的对象之间默认互不可达

允许同命名空间内指定标签访问

允许同命名空间内指定标签访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: db-allow-web
  namespace: prod
spec:
  podSelector:              # 策略作用在哪些对象上
    matchLabels:
      app: db
  policyTypes: ["Ingress"]   # 声明管入站方向
  ingress:
    - from:
        - podSelector:       # 允许哪些来源
            matchLabels:
              app: web
      ports:
        - protocol: TCP
          port: 5432

验证与排查

验证与排查
kubectl get networkpolicy -A                        # 看已生效的策略范围
kubectl describe networkpolicy db-allow-web -n prod  # 查看规则语义
kubectl exec -it test-pod -- nc -zv db.prod 5432     # 在容器内验证端口连通
kubectl exec -it test-pod -- nslookup kubernetes.default   # 确认解析未被策略影响

关键点读法

配置含义常见误解
podSelector策略作用的对象范围空选择器表示命名空间内全部对象
policyTypes管理的方向只写入站时入站不受影响
from 来源允许哪些来源访问同命名空间内用标签指定来源
ports允许访问的端口不写端口表示允许全部端口
策略一旦选中某个对象,未被放行的入站流量都会被拒绝,包括健康检查与监控采集,上线前要把这些来源一并加入允许清单。
解析流量同样需要放行,默认拒绝入站的命名空间里,未放行解析来源会导致服务名解析超时。

易错点

  • 网络插件不支持策略:对象创建成功却毫无效果,误以为隔离已经生效
  • 误以为策略是拒绝清单:实际是允许清单,未写明的流量一律被拒,容易造成服务整体不可达
  • 忘记放行监控与健康检查来源:上线后采集与探测同时失败,故障现象看起来像应用崩溃
  • 以为策略有优先级:多个策略之间是并集,任一允许即放行,不存在覆盖式的优先级

数据来源与参考

  • Kubernetes 官方文档 · Network Policies
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌