当使用Amazon的K8s产品EKS服务时,有时候需要将Kubernetes API和配置连接到AWS中建立的基础设施。特别是我们需要一个具有适当凭据和URL的 kubeconfig 来连接到EKS提供的k8s控制平面。
Amazon命令行工具aws
为此任务提供了一个例程
aws eks update-kubeconfig --kubeconfig /path/to/kubecfg.yaml --name <EKS-cluster-name>
问题:通过Python/boto 3执行相同操作
在查看Boto API documentation时,我似乎找不到上面提到的aws
例程的等价物,也许我看错了地方。
- boto 中是否有现成的函数来实现这一点?
- 否则,如何在python中直接处理这个问题(而不是在子进程中调用
aws
)?
4条答案
按热度按时间svmlkihl1#
没有方法函数可以完成这一操作,但您可以自己构建配置文件,如下所示:
eqqqjvef2#
这在https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html的 Create kubeconfig manually 一节中有解释,实际上是从boto 3 EKS文档中引用的。这里的manual方法与@jaxxstorm的答案非常相似,除了它没有显示你需要的python代码,但是它也没有假设heptio验证器(它显示了令牌和IAM验证器的方法)。
u5i3ibmn3#
我遇到了同样的问题,决定将其实现为Python包,可以通过
然后简单地
更多详情和示例here
ffdz8vbo4#
Amazon的
aws
工具包含在python包awscli中,所以一个选择是将awscli
添加为python依赖项,然后从python调用它,下面的代码假设kubectl
已经安装(但是如果你愿意,你可以删除测试)。kubeconfig取决于
~/.aws/credentials
这里的一个挑战是
aws
生成的kubeconfig文件有一个用户部分,如下所示:因此,如果你把它挂载到一个容器或移动到不同的机器,你会得到这个错误,当你尝试使用它:
根据该用户部分,
kubectl
正在运行aws eks get-token
,并且由于~/.aws
目录不具有生成kubeconfig文件时所具有的凭据而失败。您可以通过也在您想要使用kubeconfig文件的任何地方暂存
~/.aws
目录来解决这个问题,但是我有一个自动化程序,它将一个单独的kubeconfig文件作为参数,所以我将修改用户部分,以包括必要的秘密作为env变量。要知道,这使得任何人都有可能得到kubeconfig文件,使用我们包含的秘密做其他事情,这是否是一个问题将取决于你的aws用户有多大的权力。
承担角色
如果集群使用RBAC,则可能需要为kubeconfig文件指定所需的角色。下面的代码首先生成一组单独的cred,然后使用它们来生成kubeconfig文件。
角色假设有一个超时(我在下面使用12小时),所以如果您不能在令牌超时之前管理您的恶作剧,您将需要再次调用脚本。
代码
您可以生成如下文件:
...如果将以下内容放入
mkkube.py