gpt4 book ai didi

Kubernetes Python客户端: authentication issue

转载 作者:行者123 更新时间:2023-12-04 02:12:32 29 4
gpt4 key购买 nike

我们将kubernetes python客户端(4.0.0)与Google的kubernetes引擎(主+节点池运行k8s 1.8.4)结合使用,以定期调度kubernetes上的工作负载。我们用于创建容器,将其附加到日志并报告容器结束状态的脚本的简化版本如下所示:

config.load_kube_config(persist_config=False)
v1 = client.CoreV1Api()
v1.create_namespaced_pod(body=pod_specs_dict, namespace=args.namespace)
logging_response = v1.read_namespaced_pod_log(
name=pod_name,
namespace=args.namespace,
follow=True,
_preload_content=False
)
for line in logging_response:
line = line.rstrip()
logging.info(line)
status_response = v1.read_namespaced_pod_status(pod_name, namespace=args.namespace)
print("Pod ended in status: {}".format(status_response.status.phase))

一切正常,但是我们遇到了一些身份验证问题。身份验证通过默认的 gcp auth-provider进行,我通过在调度程序上手动运行 kubectl container cluster get-credentials获得了初始访问 token 。在某些随机时间范围内,某些API调用会导致来自API服务器的401响应。我的猜测是,只要访问 token 过期,并且脚本尝试获取新的访问 token ,就会发生这种情况。但是,碰巧在调度程序上同时运行多个脚本,导致多次获得一个新的API key ,而其中只有一个仍然有效。我尝试了多种方法来解决此问题(使用 persist_config=True,重新加载配置后重试401,...),但没有成功。由于我还不完全了解gcp身份验证和kubernetes python客户端配置的工作方式(而且两者的文档都相当稀缺),因此我有点不知所措。

我们是否应该使用其他身份验证方法代替 gcp auth-provider?这是kubernetes python客户端中的错误吗?我们应该使用多个配置文件吗?

最佳答案

最后,我们通过使用承载 token 认证来解决此问题,而不是依靠默认的gcloud认证方法。

这是我为实现此目的而执行的步骤。

首先,通过创建具有以下内容的文件,在所需的 namespace 中创建服务帐户。

apiVersion: v1
kind: ServiceAccount
metadata:
name: <name_of_service_account>

然后使用此文件创建服务帐户
kubectl create -f <path_to_file> --namespace=<namespace_name>

每个服务帐户都有一个链接的承载 token ,可用于身份验证。该承载 token 自 Action 为 secret 安装到命名空间中。要找出此 token 是什么,请首先找到 key 的名称(格式为 <service_account_name>-token-<random_string>),然后使用该名称获取内容。
# To search for out service account's token name
kubectl get secrets --namespace=<namespace_name>

# To find the token name
kubectl describe secret/<secret_name>

之后,您应该找出API服务器的IP地址以及kubernetes集群的 集群CA证书。这可以通过转到Google Cloud Console上的kubernetes引擎详细信息页面来完成。将证书的内容复制到本地文件中。

现在,您可以使用承载 token 通过kubernetes python客户端进行身份验证,如下所示:
from kubernetes import client

configuration = client.Configuration()
configuration.api_key["authorization"] = '<bearer_token>'
configuration.api_key_prefix['authorization'] = 'Bearer'
configuration.host = 'https://<ip_of_api_server>'
configuration.ssl_ca_cert = '<path_to_cluster_ca_certificate>'

v1 = client.CoreV1Api(client.ApiClient(configuration))

关于Kubernetes Python客户端: authentication issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48151388/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com