在没有 kubectl 的情况下使用 Kubernetes REST API
Use the Kubernetes REST API without kubectl
您可以使用其 REST API 简单地与 K8s 交互。例如得到 pods:
curl http://IPADDR/api/v1/pods
但是我找不到任何仅基于 curl 或 REST 的身份验证示例。所有示例都显示了 kubectl
作为代理或作为获取凭据的方式的用法。
如果我已经拥有 .kubeconfig
,没有别的,有什么方法可以直接发送 HTTP 请求(例如使用令牌)而不使用 kubectl
?
首次安装集群时下载的 kubeconfig
文件包含客户端证书和密钥。例如:
clusters:
- cluster:
certificate-authority-data: ...
server: https://api.cluster1.ocp.virt:6443
name: cluster1
contexts:
- context:
cluster: cluster1
user: admin
name: admin
current-context: admin
preferences: {}
users:
- name: admin
user:
client-certificate-data: ...
client-key-data: ...
如果将 client-certificate-data
和 client-key-data
提取到
文件,您可以使用它们通过 curl 进行身份验证。提取
数据:
$ yq -r '.users[0].user."client-certificate-data"' kubeconfig | base64 -d > cert
$ yq -r '.users[0].user."client-key-data"' kubeconfig | base64 -d >
key
然后使用curl
:
$ curl -k --cert cert --key key \
'https://api.cluster1.ocp.virt:6443/api/v1/namespaces/default/pods?limit=500'
{
"kind": "PodList",
"apiVersion": "v1",
"metadata": {
"resourceVersion": "22022"
},
"items": []
或者,如果您的 .kubeconfig
中有标记,如下所示:
[...]
users:
- name: your_username/api-clustername-domain:6443
user:
token: sha256~...
然后您可以将该令牌用作不记名令牌:
$ curl -k https://api.mycluster.mydomain:6443/ -H 'Authorization: Bearer sha256~...'
...但请注意,这些令牌通常会在一段时间后过期,而证书应该无限期地工作(除非它们以某种方式被撤销)。
您可以使用其 REST API 简单地与 K8s 交互。例如得到 pods:
curl http://IPADDR/api/v1/pods
但是我找不到任何仅基于 curl 或 REST 的身份验证示例。所有示例都显示了 kubectl
作为代理或作为获取凭据的方式的用法。
如果我已经拥有 .kubeconfig
,没有别的,有什么方法可以直接发送 HTTP 请求(例如使用令牌)而不使用 kubectl
?
首次安装集群时下载的 kubeconfig
文件包含客户端证书和密钥。例如:
clusters:
- cluster:
certificate-authority-data: ...
server: https://api.cluster1.ocp.virt:6443
name: cluster1
contexts:
- context:
cluster: cluster1
user: admin
name: admin
current-context: admin
preferences: {}
users:
- name: admin
user:
client-certificate-data: ...
client-key-data: ...
如果将 client-certificate-data
和 client-key-data
提取到
文件,您可以使用它们通过 curl 进行身份验证。提取
数据:
$ yq -r '.users[0].user."client-certificate-data"' kubeconfig | base64 -d > cert
$ yq -r '.users[0].user."client-key-data"' kubeconfig | base64 -d >
key
然后使用curl
:
$ curl -k --cert cert --key key \
'https://api.cluster1.ocp.virt:6443/api/v1/namespaces/default/pods?limit=500'
{
"kind": "PodList",
"apiVersion": "v1",
"metadata": {
"resourceVersion": "22022"
},
"items": []
或者,如果您的 .kubeconfig
中有标记,如下所示:
[...]
users:
- name: your_username/api-clustername-domain:6443
user:
token: sha256~...
然后您可以将该令牌用作不记名令牌:
$ curl -k https://api.mycluster.mydomain:6443/ -H 'Authorization: Bearer sha256~...'
...但请注意,这些令牌通常会在一段时间后过期,而证书应该无限期地工作(除非它们以某种方式被撤销)。