Kubernetes 如何安全地向kubectl提供kubeconfig

Kubernetes 如何安全地向kubectl提供kubeconfig,kubernetes,kubectl,kubeconfig,Kubernetes,Kubectl,Kubeconfig,我们的用户只允许从管理站访问Kubernetes群集,不可能直接从笔记本电脑/工作站访问API 每个用户都拥有属于该特定用户的相关秘密。由于kubeconfig还包含用于根据Kubernetes API进行身份验证的令牌,因此无法将kubeconfig“按原样”存储在管理站文件系统上 有没有办法向kubectl提供令牌/kubeconfig(例如通过STDIN),而不向文件系统上的其他用户(例如管理站的管理员)公开?使用服务帐户激活帐户并下载凭据 gcloud auth activate-se

我们的用户只允许从管理站访问Kubernetes群集,不可能直接从笔记本电脑/工作站访问API

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


有没有办法向kubectl提供令牌/kubeconfig(例如通过STDIN),而不向文件系统上的其他用户(例如管理站的管理员)公开?

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

 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 -

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

  • 用户在kubeconfig文件中指定一个空令牌
  • 用户设置令牌变量而不回显它
  • 用户将令牌指定为kubectl的参数

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

类似的内容适用于CI系统:

  • Base64对您的
    kubeconfig
    进行编码并安全存储
  • 使用进程替换对Base64进行解码,并将其直接传递给
    kubectl

  • kubectl--kubeconfig我们正在运行自己的Kubernetes集群,因此没有可用的“gcloud”。无论如何,我看不出这如何解决kubeconfig在磁盘上的存储。gcloud容器凭据写入kubeconfig文件并进行配置
    
    apiVersion: v1
    kind: Config
    preferences: {}
    users:
     - name: foo.bar
      user:
        token:
    
    read -s TOKEN
    
    kubectl --kubeconfig /home/foo.bar/kubeconfig --token $TOKEN get nodes
    
    export KUBECONFIG_DATA=$(cat kubeconfig | base64 -w0)
    
    kubectl --kubeconfig <(echo $KUBECONFIG_DATA | base64 --decode) ...