You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes NetworkPolicy配置异常:Minikube+Calico跨命名空间通信问题

解决K8s NetworkPolicy跨命名空间通信管控问题

环境说明

  • 本地Minikube集群,已启用Calico网络插件
  • 存在两个命名空间:feature1-namespace、feature2-namespace

预期规则

  • feature1-namespace内的Pod仅允许与同命名空间内的Pod通信,禁止与feature2-namespace的Pod交互
  • feature2-namespace内的Pod仅允许与同命名空间内的Pod通信,禁止与feature1-namespace的Pod交互

当前问题

配置NetworkPolicy后,要么完全阻断所有内外通信,要么完全放行所有流量,策略未按预期生效,已检查标签配置未解决问题。

现有错误配置

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-ingress-from-feature1
  namespace: feature2-namespace
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: feature2-namespace
    - namespaceSelector:
        matchLabels:
          name: feature1-namespace
      podSelector:
        matchLabels:
          name: feature1-namespace


apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-ingress-from-feature1
  namespace: feature1-namespace
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: feature1-namespace
    - namespaceSelector:
        matchLabels:
          name: feature2-namespace
      podSelector:
        matchLabels:
          name: feature2-namespace

问题分析

现有配置的核心错误:

  1. 规则逻辑错误:同一个ingress.from数组里的两个namespaceSelector是或关系,意味着要么允许feature2命名空间的流量,要么允许feature1命名空间的流量,直接导致跨命名空间流量被放行,完全不符合预期
  2. 标签匹配逻辑混乱:配置里试图用name: feature1-namespace匹配Pod标签,但通常Pod不会用命名空间名称作为自身标签,应该给命名空间打专属标签,通过命名空间选择器来限定流量来源

正确配置方案

第一步:给命名空间打专属标签

先确保两个命名空间带有可识别的标签(如果还没添加):

kubectl label namespace feature1-namespace ns=feature1
kubectl label namespace feature2-namespace ns=feature2

第二步:配置目标NetworkPolicy

feature1-namespace策略(仅允许同命名空间流量进入)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-intra-namespace-feature1
  namespace: feature1-namespace
spec:
  podSelector: {}  # 作用于当前命名空间所有Pod
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          ns: feature1  # 仅允许来自带有ns=feature1标签的命名空间的流量

feature2-namespace策略(仅允许同命名空间流量进入)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-intra-namespace-feature2
  namespace: feature2-namespace
spec:
  podSelector: {}  # 作用于当前命名空间所有Pod
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          ns: feature2  # 仅允许来自带有ns=feature2标签的命名空间的流量

配置说明

  • podSelector: {}表示策略应用于当前命名空间下的所有Pod,如果需要针对特定Pod,可修改为对应的Pod标签(比如matchLabels: app: backend)
  • 策略通过命名空间标签精准匹配流量来源,确保只有同命名空间的Pod能发起通信,自动阻断跨命名空间的 ingress 流量

内容的提问来源于stack exchange,提问作者Randy Ren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 17:05:08