首页 > 解决方案 > Kubernetes API 服务器按字段过滤 - 在请求时间内

问题描述

我正在尝试获取类型集群中的所有秘密helm.sh/release.v1

$ curl -X GET $APISERVER/api/v1/secrets --header "Authorization: Bearer $TOKEN" --insecure
{
  "kind": "SecretList",
  "apiVersion": "v1",
  "metadata": {
    "selfLink": "/api/v1/secrets",
    "resourceVersion": "442181"
  },
  "items": [
    {
      "metadata": {
         ...
      },
      "data": {
         ...
      },
      "type": "helm.sh/release.v1"
    },
    {
      "metadata": {
         ...
      },
      "data": {
         ...
      },
      "type": "kubernetes.io/service-account-token"
    },
    {
      "metadata": {
         ...
      },
      "data": {
         ...
      },
      "type": "kubernetes.io/service-account-token"
    },
    ...
}

我可以使用上面的命令,然后自己过滤(jq或其他),但我想知道是否有一个选项可以通过添加查询参数或其他东西在 API 中过滤,例如(没用):

curl -X GET $APISERVER/api/v1/secrets?type=<value>

知道如何按特定字段过滤吗?( type) 我还可以在响应中请求特定字段吗(如果我不关心data例如)?

标签: kuberneteskubernetes-helmkube-apiserver

解决方案


我将使用来自我的应用程序 (python) 的 HTTP 请求,该请求在集群中的 pod 中运行。我正在努力提高效率,只询问我需要的东西(仅限特定类型,而不是集群中的所有秘密)

如果您的应用程序是用Python编写的,那么使用Kubernetes Python 客户端库获取秘密可能是个好主意?

如果要获取类型集群中的所有秘密helm.sh/release.v1,可以使用以下Python代码:

from  kubernetes import client , config 

config.load_kube_config()
v1 = client.CoreV1Api()
list_secrets = v1.list_secret_for_all_namespaces(field_selector='type=helm.sh/release.v1')

如果您还想计算它们,请使用:

print(len(list_secrets.items))

打印秘密的名称使用:

print(list_secrets.items[0].metadata.name)

检索它的数据:

print(list_secrets.items[0].data)

等等...

更多详细信息,包括可用于此方法的参数,您可以在此处找到(只需搜索list_secret_for_all_namespaces):

# **list_secret_for_all_namespaces**
> V1SecretList list_secret_for_all_namespaces(allow_watch_bookmarks=allow_watch_bookmarks, _continue=_continue, field_selector=field_selector, label_selector=label_selector, limit=limit, pretty=pretty, resource_version=resource_version, timeout_seconds=timeout_seconds, watch=watch)

推荐阅读