繁体   English   中英

使用 Python 客户端调用任意 k8s api

[英]Calling arbitrary k8s apis using the Python client

我想调用 openshift 机器 api ( /apis/machine.openshift.io/v1beta1/machines )。 有没有办法使用kubernetes Python 模块来做到这一点? 我可以像这样创建一个 api 对象:

>>> from kubernetes import client, config
>>> config.load_incluster_config()
>>> api = client.CoreV1API()

当然,这是一个核心 API 客户端,它不包括对machine api 的本机支持。 但是该对象具有所有端点和身份验证信息。 有一个看起来很可能的api.api_client.call_api方法,但它似乎没有利用嵌入在 api_client 对象中的身份验证信息:

>>> api.api_client.call_api('/apis/machine.openshift.io/v1beta1/machines', 'GET')
[...]
kubernetes.client.rest.ApiException: (403)
Reason: Forbidden

我可以明确地传递身份验证信息,但它似乎没有返回任何内容:

>>> >>> api.api_client.call_api('/apis/machine.openshift.io/v1beta1/machines', 'GET', auth_settings=api.api_client.configuration.auth_settings())
(None, 200, HTTPHeaderDict({'Audit-Id': '6f6965b5-1ad7-4c5e-ab61-343e38718ff8', 'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'X-Kubernetes-Pf-Flowschema-Uid': '9
5848e47-b51c-46eb-aa4f-e25130d61e09', 'X-Kubernetes-Pf-Prioritylevel-Uid': '39391d77-7b32-4aa2-93c3-9915a302d361', 'Date': 'Fri, 04 Sep 2020 19:43:59 GMT', 'Transfer-Encoding': 'chunked'}))

我当然可以只使用requests

>>> requests.get(f'{api.api_client.configuration.host}/apis/machine.openshift.io/v1beta1/machines', verify=False, headers=api.api_client.configuration.api_key)
<Response [200]>

这很好用,但它闻起来就像我在以错误的方式做事。 使用 Python kubernetes模块发出任意 API 请求的正确方法是什么?

此处引用您可以使用api_client.call_api如下所示,通过传递一个有效的BearerToken (可能是服务帐户令牌)来调用任意 API。

api_client.call_api('/apis/machine.openshift.io/v1beta1/machines', 'GET', auth_settings = ['BearerToken'], response_type='json', _preload_content=False)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM