Kubernetes中如何通过REST API列出CustomResource实例?
有没有对应的REST API来列出CustomResource实例?
当然有!Kubernetes的REST API完全支持查询自定义资源(CustomResource)的实例,和你用kubectl get <customresource_kind>执行的操作本质上是一样的——kubectl其实就是在背后调用这些REST API来完成功能的。
核心思路:找到CustomResource对应的API路径
每个CustomResource都属于特定的API组和API版本,你需要先明确这两个信息,才能构造出正确的API请求路径。
构造API请求的步骤
确定CustomResource的API组、版本和复数名称
- 你可以通过
kubectl get crd <crd-name>查看CRD的定义,比如:
在输出的kubectl get crd foos.example.com -o yamlspec.group字段能找到API组,spec.versions里是版本,spec.names.plural是复数名称(这是API路径里要用的,比如Foo对应的复数通常是foos)。 - 或者更简单的方式,用
kubectl explain <customresource-kind>,输出开头会显示GROUP: example.com和VERSION: v1。
- 你可以通过
构造GET请求路径
- 如果是命名空间级的CustomResource(CRD的
scope是Namespaced),请求路径格式为:
举个例子:假设你的CustomResource是/apis/<api-group>/<api-version>/namespaces/<namespace>/<plural-name>Foo,API组example.com,版本v1,要查default命名空间下的实例,路径就是:/apis/example.com/v1/namespaces/default/foos - 如果是集群级的CustomResource(CRD的
scope是Cluster),不需要指定命名空间,路径格式为:
对应例子的路径就是:/apis/<api-group>/<api-version>/<plural-name>/apis/example.com/v1/foos
- 如果是命名空间级的CustomResource(CRD的
执行GET请求
你可以用curl、Postman等工具发送GET请求,记得带上Kubernetes API的认证信息(比如kubeconfig里的token或者客户端证书),和kubectl使用的认证方式一致。比如用curl的例子:curl -k -H "Authorization: Bearer $(kubectl get secret $(kubectl get serviceaccount default -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 -d)" https://<kube-api-server>/apis/example.com/v1/namespaces/default/foos
快速验证API路径的方法
你可以直接用kubectl get --raw命令查看API的原始响应,这能帮你确认路径是否正确:
kubectl get --raw /apis/example.com/v1/namespaces/default/foos
这个命令会返回和REST API完全一致的JSON格式响应,和kubectl get foos -o json的输出基本相同。
内容的提问来源于stack exchange,提问作者krckumar
相关产品推荐
相关产品推荐

