首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Kubernetes python客户端:身份验证问题

Kubernetes python客户端:身份验证问题
EN

Stack Overflow用户
提问于 2018-01-08 21:32:29
回答 2查看 9.1K关注 0票数 10

我们使用kubernetes python client (4.0.0)结合google的kubernetes引擎(master +nodepool运行k8s 1.8.4)来定期调度kubernetes上的工作负载。我们用来创建pod、附加到日志并报告pod结束状态的脚本的简化版本如下所示:

代码语言:javascript
复制
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身份验证提供程序进行,我通过在调度程序上手动运行kubectl container cluster get-credentials获得了该提供程序的初始访问令牌。在某些随机时间段,某些API调用会导致来自API服务器的401响应。我的猜测是,每当访问令牌过期,脚本尝试获取新的访问令牌时,就会发生这种情况。然而,多个脚本在调度程序上并发运行,导致多次获取新的API密钥,其中只有一个仍然有效。我尝试了多种方法来解决这个问题(使用persist_config=True,在重新加载配置后重试401,...)百无所成。由于我不完全了解gcp身份验证和kubernetes python客户端配置是如何工作的(而且这两种方式的文档都相当缺乏),我对此有点一无所知。

我们应该使用另一种身份验证方法而不是gcp身份验证提供程序吗?这是kubernetes python客户端的一个bug吗?我们应该使用多个配置文件吗?

EN

回答 2

Stack Overflow用户

发布于 2020-09-14 01:47:52

我有一个使用Kubernetes客户端的python容器,并且正在寻找一种方法,让它在集群中执行时使用服务帐户,但在本地执行时加载挂载的kube配置。我花了一段时间才找到load_incluster_config(),它会在集群中执行时自动根据容器的服务账户进行配置。我现在在本地运行时打开一个env var。这可能会对您有所帮助:

https://github.com/kubernetes-client/python/blob/master/examples/in_cluster_config.py

票数 8
EN

Stack Overflow用户

发布于 2018-01-18 00:38:05

为了向API服务器进行身份验证,您可以使用基于角色的访问控制(RBAC),它可以定义一系列角色来管理对API的身份验证和访问。

这是基于通过使用绑定将角色和集群角色授予不同的用户或服务帐户。这些角色包括代表一组权限的一些规则,并且可以定义为作用于名称空间(角色)或整个集群(集群角色)。

启用RBAC的第一步是使用以下选项启动API服务器:

代码语言:javascript
复制
--authorization-mode=RBAC

您可以使用kubectl命令定义特定的角色。例如,如果要向命名空间(例如acme)上的用户(例如Bob)授予管理员群集角色,可以使用以下命令:

代码语言:javascript
复制
kubectl create rolebinding bob-admin-binding --clusterrole=admin --user=bob --namespace=acme

您还可以为用户(例如root用户)定义一个群集角色,使其具有整个群集的管理员权限:

代码语言:javascript
复制
kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root

如果要改用服务帐户,可以使用如下命令将角色授予服务帐户:

代码语言:javascript
复制
kubectl create rolebinding my-sa-view  --clusterrole=view --serviceaccount=my-namespace:my-sa --namespace=my-namespace

您可以查看here,了解有关RBAC的更多信息,包括您可以授予用户或服务帐户的所有可能的角色和群集角色。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48151388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档