gpt4 book ai didi

python - AWS EKS - 从 pod 内部验证 Kubernetes python lib

转载 作者:行者123 更新时间:2023-12-01 08:59:12 26 4
gpt4 key购买 nike

目标

我想从正在运行的 Pod 内部连接并调用 Kubernetes REST API,相关 Kubernetes 是使用 IAM 身份验证的 AWS EKS 集群。所有这些都使用 Kubernetes Python 库。

我尝试过的

来 self 的python 文件:

from kubernetes import client, config

config.load_incluster_config()
v1 = client.CoreV1Api()
ret = v1.list_pod_for_all_namespaces(watch=False)

上述命令抛出 403 错误,我认为这是由于 AWS EKS 使用不同的身份验证机制造成的。

我已经知道的东西

ApiToken = 'eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.xxx.yyy'
configuration = client.Configuration()
configuration.host = 'https://abc.sk1.us-east-1.eks.amazonaws.com'
configuration.verify_ssl = False
configuration.debug = True
configuration.api_key = {"authorization": "Bearer " + ApiToken}
client.Configuration.set_default(configuration)

虽然上述方法有效,但我必须对通过 kubectl 在本地生成的 token 进行硬编码,并将其 checkin 代码中,这是存在安全风险的。

是否有更合适的方法来使用 AWS EKS 验证 Kubernetes python 库?

最佳答案

您可以使用以下方法获取token。这假设您已成功安装并配置 aws-iam-authenticator在您的 Pod/服务器/笔记本电脑上。

def get_token(cluster_name):
args = ("/usr/local/bin/aws-iam-authenticator", "token", "-i", cluster_name, "--token-only")
popen = subprocess.Popen(args, stdout=subprocess.PIPE)
popen.wait()
return popen.stdout.read().rstrip()

api_token = get_token("<cluster_name>")
configuration = client.Configuration()
configuration.host = '<api_endpoint>'
configuration.verify_ssl = False
configuration.debug = True
configuration.api_key['authorization'] = "Bearer " + api_token
configuration.assert_hostname = True
configuration.verify_ssl = False
client.Configuration.set_default(configuration)

v1 = client.CoreV1Api()
ret = v1.list_pod_for_all_namespaces(watch=False)
print ret

kubernetes-client/python-base 有一个 PR,增加了对 exec 插件的支持,Attempt to implement exec-plugins support in kubeconfig

关于python - AWS EKS - 从 pod 内部验证 Kubernetes python lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52586181/

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