Kubernetes网络策略怎么用?从NetworkPolicy原理到落地方法

Kubernetes网络策略怎么用?本文从 NetworkPolicy 的作用、CNI 前提、策略设计、典型 YAML 示例和落地顺序等角度,讲清楚 Kubernetes 集群里如何做更实用的网络隔离。

Kubernetes网络策略怎么用,是很多团队在做集群安全和服务隔离时都会遇到的问题。因为在不少默认网络环境里,Pod 与 Pod 之间、命名空间与命名空间之间的访问往往比想象中更开放。如果没有显式的网络访问控制,一个被入侵的工作负载就可能在集群内部横向扩散。NetworkPolicy 的价值,正是把这些原本隐性的访问关系,变成可声明、可治理、可审计的网络策略。

写在前面

  • 本文适用范围: 适合正在建设 Kubernetes 集群安全、推进命名空间隔离,或想掌握 NetworkPolicy 基本用法的团队。
  • 本文前置知识: 需要了解 Pod、Namespace、Service、标签选择器和基础 Kubernetes 网络概念。
  • 本文评估口径: 本文重点讨论企业落地中的策略思路和使用方法,不比较具体 CNI 产品参数。

很多团队第一次接触 NetworkPolicy,会把它理解成“给 Kubernetes 加一个防火墙”。这个理解不算错,但还不够准确。更本质地说,NetworkPolicy 是 Kubernetes 里用来表达“谁能访问谁、通过什么端口访问、从哪里访问”的声明式访问控制方式。

Kubernetes NetworkPolicy示意图

先说结论:NetworkPolicy 不是为了全部封死,而是让访问关系显式化

如果只先记住一句话,可以直接记这句:Kubernetes 网络策略的核心,不是让所有 Pod 都不能通信,而是让每一条允许的访问路径都有明确依据。

这意味着 NetworkPolicy 的目标不是“越严越好”,而是:

  • 哪些服务真的需要互相访问
  • 哪些命名空间应该彼此隔离
  • 哪些端口应该被限制
  • 哪些出站访问根本不应该存在

换句话说,NetworkPolicy 的价值在于把“默认模糊开放”变成“按需放行”。

Kubernetes 网络策略到底是什么

Kubernetes 网络策略通常指 NetworkPolicy 资源。它是一种声明式配置,用来约束 Pod 的网络流量,主要包括:

  • Ingress:谁可以访问当前 Pod
  • Egress:当前 Pod 可以访问谁

它常常围绕三类条件进行控制:

  • Pod 标签
  • Namespace 标签
  • 端口和协议

因此你可以通过 NetworkPolicy 表达这样的规则:

  • 只有网关 Pod 可以访问后端服务
  • 只有应用服务可以访问数据库
  • 某个命名空间不能主动访问外网
  • 指定服务只能暴露某个端口给指定来源

为什么 Kubernetes 集群需要 NetworkPolicy

如果 Pod 默认都能彼此访问,通常会带来这些问题:

  • 服务之间访问边界不清晰
  • 测试服务可能误打生产依赖
  • 被入侵的工作负载更容易横向移动
  • 敏感组件缺少最小访问控制
  • 审计时很难解释哪些访问本来就不应该存在

在微服务和多租户环境里,随着服务数量增长,这种“默认开放”的风险会越来越大。NetworkPolicy 的作用,就是让集群内部访问关系从隐式默认,变成显式治理。

使用 NetworkPolicy 前,先确认这个前提

这是最容易被忽略的一点:你的 CNI 网络插件必须支持 NetworkPolicy。

如果底层网络插件不支持,即使你创建了 NetworkPolicy 资源,也可能完全不会生效。所以在真正落地前,先确认这些问题:

  • 当前 CNI 是否支持 NetworkPolicy
  • 是否同时支持 Ingress 和 Egress 策略
  • 不同环境是否使用了相同或行为一致的 CNI
  • 平台侧是否已经有默认网络策略在生效

这一步非常关键。很多“策略写了但没效果”的问题,本质上都不是 YAML 写错,而是底层前提没有满足。

Kubernetes网络策略怎么用:先掌握这 4 个设计原则

1. 从关键服务开始,不要一上来全量封锁

如果团队第一次做 NetworkPolicy,就直接把所有命名空间全收紧,通常很容易误伤正常业务。更稳妥的方式,是先从数据库、消息队列、管理面、核心后端等关键服务开始。

2. 先梳理访问关系,再写策略

NetworkPolicy 不是凭感觉写的。真正有效的策略,前提是你知道:

  • 哪些服务之间确实存在调用
  • 哪些命名空间之间应该互通
  • 哪些端口是必须暴露的
  • 哪些出站访问没有业务必要

3. 标签规范比策略数量更重要

如果 Pod 和 Namespace 标签本身混乱,NetworkPolicy 也很难长期维护。标签体系越清晰,策略越容易表达。

4. Ingress 和 Egress 都要考虑

很多团队只做入站控制,却忽略了出站访问。如果一个被攻陷的 Pod 可以随意对外连接,风险仍然很大。真正完整的网络隔离通常要同时考虑入口和出口。

一个典型的 NetworkPolicy 示例

下面这个例子表示:只允许带有 role=gateway 标签的 Pod 访问带有 app=orders 标签的 Pod 的 8080 端口。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-gateway-to-orders
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: orders
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              role: gateway
      ports:
        - protocol: TCP
          port: 8080

这个例子的重点不在 YAML 本身,而在策略思路:

  • 先明确保护对象是谁
  • 再明确允许的来源是谁
  • 最后收敛到指定端口和协议

这比“谁都能访问,只靠应用层自己拦”更适合作为底层访问边界。

NetworkPolicy 和 API 鉴权、零信任是什么关系

很多团队会把这些概念混在一起,但它们关注的不是同一层:

  • NetworkPolicy:网络层控制谁能连谁
  • API 鉴权:应用层判断调用方有没有权限访问某个接口
  • 零信任:更上层的访问控制理念,强调身份、上下文和持续验证

所以 NetworkPolicy 不是用来替代 API 鉴权的,也不是零信任的全部。但它可以成为零信任和 Kubernetes 安全落地中的一个重要基础能力,用来降低默认开放和横向移动风险。

企业落地时最容易踩的 5 个坑

1. 没确认 CNI 支持就开始写策略

这是最基础也最常见的问题。

2. 标签体系混乱,策略难维护

如果 Pod 标签没有统一规范,后面任何 NetworkPolicy 都会越来越难改。

3. 一次性收紧太多流量

没有渐进式验证时,业务很容易被误伤。

4. 只做 Ingress,不做 Egress

这样虽然限制了别人访问服务,但服务自己仍然可能随意向外通信。

5. 没有验证机制

写完策略并不代表真的生效。团队还需要验证:

  • 业务访问是否按预期放通
  • 非法访问是否确实被拒绝
  • 是否影响现有健康检查和内部依赖
Kubernetes网络通信流程示意图

企业更稳妥的推进顺序是什么

如果你的团队刚开始做 Kubernetes 网络策略,更现实的顺序通常是:

  1. 先确认 CNI 插件支持情况
  2. 先梳理关键命名空间和关键服务访问关系
  3. 先给数据库、消息队列、管理面等敏感组件加 Ingress 限制
  4. 再逐步扩展到业务服务之间的访问控制
  5. 最后补 Egress 控制、审计和与安全体系的联动

这种方式比一开始就“全量默认拒绝”更稳,也更容易理解影响范围。

总结:Kubernetes 网络策略真正解决的是“访问边界不清”

回到 Kubernetes网络策略怎么用 这个问题,最核心的答案就是:先确认底层支持,再梳理访问关系,用 NetworkPolicy 把关键服务和命名空间之间的允许访问路径显式表达出来。

它的价值不在于把集群变成“谁都访问不了”,而在于让网络访问更可解释、更可治理、更符合最小权限原则。对企业来说,真正值得优先做的,也通常不是一次性全量封锁,而是先从高风险、高价值组件开始,小步推进网络隔离。

FAQ

创建了 NetworkPolicy,一定会生效吗?

不一定。前提是底层 CNI 插件支持 NetworkPolicy,否则资源创建成功也可能不真正限制流量。

NetworkPolicy 能替代 API 鉴权吗?

不能。NetworkPolicy 管的是网络层访问边界,API 鉴权管的是应用层身份和权限,两者应该配合使用。

Kubernetes 网络策略要一开始就全量启用吗?

通常不建议。更稳妥的方式是先保护关键服务和关键命名空间,再逐步扩大范围。

只做 Ingress 控制够吗?

很多时候不够。为了降低异常外联和横向移动风险,Egress 控制也很重要。

转载请注明出处:https://www.cloudnative-tech.com/p/6528/

(0)
上一篇 3天前
下一篇 2小时前

相关推荐

  • Kubernetes安全怎么做?从权限控制到网络策略的关键实践

    Kubernetes安全怎么做,是很多团队从“把集群跑起来”走向“把集群稳定用起来”时必须面对的问题。Kubernetes 本身提供了丰富的权限、网络、配置和策略能力,但这些能力如果不被正确配置,反而会形成新的风险面。真正的 Kubernetes 安全,不是简单装一个安全工具,而是要把身份权限、镜像来源、配置基线、网络隔离、运行时防护和交付流程串成一套系统化…

    3天前
    0
  • 零信任是什么?云原生环境下的身份、访问与安全控制思路

    零信任是什么?本文从核心理念、与传统边界安全的区别、身份与最小权限控制,以及云原生环境下的落地思路等角度,讲清楚零信任为什么越来越重要。

    2小时前
    0
  • 容器漏洞怎么治理?别把镜像扫描当成治理闭环

    容器漏洞怎么治理?本文从漏洞来源、镜像扫描、优先级评估、基础镜像治理、准入控制和运行时联动等角度,梳理企业更实用的容器漏洞治理方法,而不是只停留在扫描报告层面。

    2小时前
    0
  • 容器镜像安全怎么做?镜像扫描、供应链风险与治理建议

    容器镜像安全怎么做,是企业从“会用容器”走向“敢把容器大规模用在生产环境”时必须补上的能力。很多团队在容器化初期,只关注镜像能不能构建成功、应用能不能跑起来,却忽视了镜像本身也是软件供应链的一部分。基础镜像漏洞、依赖包来源不可信、镜像内容不透明、构建链路缺乏审计,这些问题都可能在镜像进入生产环境之前就埋下隐患。因此,真正的镜像安全,不只是做一次漏洞扫描,而是…

    3天前
    0
  • 运行时安全是什么?为什么镜像扫描做了还不够

    运行时安全是什么?本文从异常进程、文件篡改、网络外联、提权逃逸和运行时检测等角度,讲清楚容器与云原生运行时安全到底在防什么,以及它为什么不能被镜像扫描替代。

    2小时前
    0