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

Minikube Calico集群中Network Policy未生效问题排查求助

Minikube中Calico NetworkPolicy不生效的排查与解决方案

问题背景

我在Minikube集群中部署了Calico CNI组件,相关Pod状态正常:

NAMESPACE     NAME                                                              READY   STATUS    RESTARTS      AGE
kube-system   calico-kube-controllers-7bdbfc669-jz9m2                           1/1     Running   0             40m
kube-system   calico-node-ncwp5                                                 1/1     Running   0             40m

配置了以下NetworkPolicy,限制bootapp命名空间中只有app=product-service的Pod能访问app=mysql8的数据库Pod:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: "db-access-control"
  namespace: "bootapp"
spec:
  podSelector:
    matchLabels:
      app: "mysql8"
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: "product-service"

但实际情况是,app=inventory-service的Pod仍能正常连接数据库并处于就绪状态,不符合预期。当前bootapp命名空间的Pod状态:

$ kubectl get po -n bootapp
NAME                                                              READY   STATUS    RESTARTS      AGE     LABELS
inventory-service-7d7c8dc79-b9hcs                                 1/1     Running   0             2m16s   app=inventory-service,pod-template-hash=7d7c8dc79
mysql8-6b858fb5dc-9lj9p                                           1/1     Running   0             2m17s   app=mysql8,pod-template-hash=6b858fb5dc
product-service-5dcccc579c-9fm2t                                  1/1     Running   0             2m12s   app=product-service,pod-template-hash=5dcccc579c

排查步骤与解决方案

1. 确认Calico是否启用NetworkPolicy强制管控

Calico默认支持NetworkPolicy,但需检查核心配置:

  • 执行命令查看Felix配置(Felix是Calico负责Policy执行的核心组件):
    kubectl get felixconfigurations.crd.projectcalico.org default -o yaml
    
    检查spec.policy.enabled字段是否为true,如果是false,执行以下命令开启:
    kubectl patch felixconfigurations.crd.projectcalico.org default --type='merge' -p '{"spec":{"policy":{"enabled":true}}}'
    
  • 确认Minikube的CNI配置:启动Minikube时需指定--cni=calico,如果是事后安装Calico,需确保/etc/cni/net.d目录下Calico的配置文件优先级高于默认CNI配置。

2. 调试Calico的NetworkPolicy执行状态

  • 直接测试网络连通性:
    在inventory-service Pod内尝试连接MySQL,验证Policy是否生效:
    kubectl exec -n bootapp inventory-service-7d7c8dc79-b9hcs -- mysql -h mysql8 -u <你的用户名> -p<你的密码> -e "SELECT 1"
    
  • 用Calico工具查看Policy状态:
    使用calicoctl(需提前安装)查看Policy是否正确应用:
    calicoctl get networkpolicy -n bootapp
    calicoctl describe networkpolicy db-access-control -n bootapp
    
  • 检查Calico组件日志:
    查看Calico控制器和节点的日志,排查是否有Policy解析或应用错误:
    # 查看控制器日志
    kubectl logs -n kube-system calico-kube-controllers-7bdbfc669-jz9m2
    # 查看Felix组件日志
    kubectl logs -n kube-system calico-node-ncwp5 -c felix
    
  • 核对Pod标签匹配:
    确认NetworkPolicy中的podSelector标签与实际Pod标签完全一致,避免拼写或大小写错误。

补充更新

切换为Cilium作为CNI插件后,NetworkPolicy功能正常运行。Cilium基于eBPF实现,对NetworkPolicy的支持更高效,在Minikube中可通过minikube start --cni=cilium直接部署使用。

内容的提问来源于stack exchange,提问作者Mandar K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:14:51