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

启用Calico的Minikube集群中NetworkPolicy未生效问题

问题原因分析与解决

问题场景

已在Minikube上部署Calico并验证状态正常,在ns1、ns2、ns3三个命名空间中部署了Nginx Deployment,所有Pod均处于Running状态。在ns3中创建了如下NetworkPolicy:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: deny-ns2
  namespace: ns3
spec:
  podSelector:
    matchLabels:
      environment: test
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          permission: allowed

执行kubectl describe networkpolicy -n ns3确认策略已应用,但ns2中的Pod仍能正常访问ns3的Pod,未被拦截。

核心原因

  • PodSelector未匹配目标Pod:你的NetworkPolicy通过podSelector.matchLabels.environment: test筛选要管控的Pod,但从kubectl get pods -A的输出可见,ns3下的Nginx Pod并没有environment=test标签,导致该策略根本没有作用到任何ns3的Pod上。
  • Calico默认流量规则:Calico默认允许所有Pod间的流量通行,当NetworkPolicy未匹配到目标Pod时,不会对这些Pod的流量做任何限制。

解决步骤

  1. 给ns3的Pod添加匹配标签
    直接为已运行的Pod添加标签:

    kubectl label pods -n ns3 new-deploy-7c577ddf69-hvnkb new-deploy-7c577ddf69-s92q5 environment=test
    

    或修改ns3的Nginx Deployment模板,在Pod模板中添加environment: test标签,确保后续新建Pod自动继承该标签。

  2. 调整NetworkPolicy规则(按需选择)
    如果需求是拒绝ns2访问ns3所有Pod,可修改策略为:

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: deny-ns2
      namespace: ns3
    spec:
      podSelector: {} # 匹配ns3下所有Pod
      policyTypes:
      - Ingress
      ingress:
      - from:
        - namespaceSelector:
            matchExpressions:
              - key: kubernetes.io/metadata.name
                operator: NotIn
                values:
                  - ns2
    

内容的提问来源于stack exchange,提问作者i'i'i'i'i'i'i'i'i'i'i'i

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:15:04