回答问题中的一些疑虑:
我尝试删除 load_kube_config 命令,但这只会引发连接被拒绝错误,可能是因为它现在不知道任何集群,尽管它驻留在一个集群中......
要在集群内运行您的代码(来自Pod),您需要切换:
-
来自:
config.load_kube_config()
-
收件人:
config.load_incluster_config()
请阅读下文,因为我解决了在集群内运行 Kubernetes Python API 库代码所需的其余设置。
如何让气流使用它所在集群的 kubeconfig?或者有没有我想念的替代品......
事实上,您缺少一个解决方案:
您需要使用ServiceAccount 和正确的Roles 和RoleBindings。
让我再解释一下并添加一个示例:
说明:
要运行上述设置,您需要参考以下 Kubernetes 文档:
如官方文档所述:
当您(人类)访问集群时(例如,使用kubectl),您将被 apiserver 验证为特定的用户帐户。 pod 内容器中的进程也可以联系 apiserver。 当他们这样做时,他们被认证为特定的服务帐户(例如,默认)。
您需要使用Roles 和RoleBidings 为您的ServiceAccount 添加权限,以允许它查询Kubernetes API 服务器。例如,您需要添加权限以列出Pods。
示例:
我已经在 Serverfault 上回答了一个类似的案例。我鼓励您检查一下:
我允许自己复制和更改此答案的某些部分:
创建一个ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
name: python-job-sa
ServiceAccount 将与托管 Python 代码的 Deployment/Pod 一起使用。
为您的ServiceAccount 分配特定权限
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: python-job-role
rules:
# This will give you access to pods
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
# This will give you access to pods logs
- apiGroups: [""]
resources: ["pods/log"]
verbs: ["get", "list", "watch"]
这是一个Role,允许查询 Kubernetes API 以获取资源,例如 > Pods。
将您的Role 绑定到ServiceAccount
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: python-job-rolebinding
namespace: default
subjects:
- kind: ServiceAccount
name: python-job-sa
namespace: default
roleRef:
kind: Role
name: python-job-role
apiGroup: rbac.authorization.k8s.io
应用这些规则后,您可以在 Deployment 清单中使用 serviceAccount: python-job-sa(在 .spec.template.spec 中)并查询 Kubernetes API,如下所示:
from kubernetes import client, config
config.load_incluster_config() # <-- IMPORTANT
v1 = client.CoreV1Api()
print("Listing pods with their IPs:")
ret = v1.list_namespaced_pod("default")
for i in ret.items:
print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))
输出:
Listing pods with their IPs:
10.88.0.12 default nginx-deployment-d6bcfb88d-q8s8s
10.88.0.13 default nginx-deployment-d6bcfb88d-zbdm6
10.88.0.11 default cloud-sdk
其他资源: