3

我们的用户只能从管理站访问 Kubernetes 集群,无法直接从他们的笔记本电脑/工作站访问 API。

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

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

4

3 回答 3

3

您可以使用 bash 进程替换将整个传递kubeconfigkubectl而不将其保存到文件系统。

这样的东西适用于 CI 系统:

  1. Base64 编码kubeconfig并安全存储
export KUBECONFIG_DATA=$(cat kubeconfig | base64 -w0)
  1. 使用进程替换到 Base64-decode 并将其直接传递给kubectl
kubectl --kubeconfig <(echo $KUBECONFIG_DATA | base64 --decode) ...
于 2021-02-08T20:52:47.173 回答
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
于 2019-06-04T14:50:36.027 回答
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 -
于 2019-06-03T15:42:06.670 回答