kubectl:它如何发现集群配置?

kubectl: how does it discover the incluster config?

当我在 pod 中 运行 kubectl 时,它默认为 "in-cluster config"(由 /var/run/secrets/kubernetes.io/serviceaccount 中的文件定义)。如果我想用 shell=Falsekubectl 包装在对 Python 子进程的调用中,我该如何告诉 kubectl 在哪里可以找到集群内配置?

自从我 运行 shell=False none 的环境使它成为子进程。看来我需要明确地将一些环境变量或其他系统状态传递给 kubectl 的子进程调用以发现集群内配置。

kubectl如何发现这个配置?有几个简单的变量可以传递吗?

您将必须根据这些值手动构建 KUBECONFIG,因为这或多或少正是 python client does anyway 的内容。简而言之,在 python 中或通过以下命令:

kubectl config set-cluster the-cluster --server="https://${KUBERNETES_SERVICE_HOST}:${KUBERNETES_SERVICE_PORT}" --certificate-authority=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
kubectl config set-credentials pod-token --token="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)"
kubectl config set-context pod-context --cluster=the-cluster --user=pod-token
kubectl config use-context pod-context

然后你就可以开始比赛了