如何安全地向kubectl提供kubeconfig

时间:2019-06-03 12:26:51

标签: kubernetes kubectl kubeconfig

我们的用户只能从Management Station访问Kubernetes集群,不能直接从其笔记本电脑/工作站访问API。

每个用户都向kubeconfig拥有属于该特定用户的相关机密。由于kubeconfig还包含用于根据Kubernetes API进行身份验证的令牌,因此无法将kubeconfig“按原样”存储在Management Station文件系统上。

有什么方法可以将令牌/ kubeconfig提供给kubectl例如通过STDIN,而不将其公开给文件系统上的其他用户(例如Management Station的管理员)?

3 个答案:

答案 0 :(得分:2)

到目前为止,我已经使用以下解决方案:

  • 用户在kubeconfig文件中指定一个空令牌
apiVersion: v1
kind: Config
preferences: {}
users:
 - name: foo.bar
  user:
    token:
  • 用户设置TOKEN变量而不回显
read -s TOKEN
  • 用户将令牌指定为kubectl的参数
kubectl --kubeconfig /home/foo.bar/kubeconfig --token $TOKEN get nodes

答案 1 :(得分:0)

激活帐户并使用服务帐户下载凭据。

 gcloud auth activate-service-account --key-file=${PULL_KEYFILE} --project PROJECT_NAME
 gcloud container clusters get-credentials CLUSTER_NAME --zone ZONE
 //use kubectl as you would do
 kubectl create namespace ${NAMESPACE} --dry-run -o yaml | kubectl apply -f -

答案 2 :(得分:0)

您可以使用 bash 进程替换将整个 kubeconfig 传递给 kubectl,而无需将其保存到文件系统中。

这样的事情适用于 CI 系统:

  1. 对您的 kubeconfig 进行 Base64 编码并安全存储
export KUBECONFIG_DATA=$(cat kubeconfig | base64 -w0)
  1. 使用进程替换对 Base64 解码并将其直接传递给 kubectl
kubectl --kubeconfig <(echo $KUBECONFIG_DATA | base64 --decode) ...