Kubernetes无法查看Calico创建的projectcalico.org/v3网络策略的解决方法
当前Kubernetes集群中存在两类不同API版本的NetworkPolicy资源定义:
# Calico 自定义网络策略 apiVersion: projectcalico.org/v3 kind: NetworkPolicy # Kubernetes 原生网络策略 apiVersion: networking.k8s.io/v1 kind: NetworkPolicy
执行kubectl get networkpolicy命令查询集群网络策略时,仅能返回networking.k8s.io/v1 API版本创建的策略资源,无法查询到由Calico创建、API版本为projectcalico.org/v3的网络策略。
kubectl get networkpolicy默认匹配的是networking.k8s.io核心API组下的NetworkPolicy资源,projectcalico.org/v3版本的NetworkPolicy是Calico通过CRD(自定义资源定义)实现的独立资源,不属于Kubernetes原生NetworkPolicy的API组范畴,因此默认查询不会返回这类资源。
方法1:直接指定CRD资源路径查询(无需额外安装工具)
Calico v3版本命名空间级NetworkPolicy对应的CRD全称为networkpolicies.projectcalico.org,直接在kubectl命令中指定该资源类型即可查询:- 查询全集群所有Calico网络策略:
kubectl get networkpolicies.projectcalico.org -A - 查询指定命名空间下的Calico网络策略(以default命名空间为例):
kubectl get networkpolicies.projectcalico.org -n default - 查看单条Calico网络策略的详细配置(替换尖括号内的实际值):
kubectl get networkpolicies.projectcalico.org <策略名称> -n <所属命名空间> -o yaml
注意:如果是Calico的集群级全局网络策略(GlobalNetworkPolicy,无命名空间隔离范围),对应的CRD名称为
globalnetworkpolicies.projectcalico.org,查询时直接指定该资源名即可,无需加-n或-A参数。- 查询全集群所有Calico网络策略:
方法2:使用Calico原生命令行工具calicoctl查询
如果集群已经部署配置了calicoctl工具,可以直接使用Calico原生命令查询,不需要输入长CRD名称:- 查询全集群所有Calico命名空间级网络策略:
calicoctl get networkpolicy -A - 查看单条策略详情:
calicoctl get networkpolicy <策略名称> -n <所属命名空间> -o yaml
- 查询全集群所有Calico命名空间级网络策略:
内容的提问来源于stack exchange,提问作者Unknown developer

