【问题标题】:How to safely provide kubeconfig to kubectl如何安全地将 kubeconfig 提供给 kubectl
【发布时间】:2019-06-03 12:26:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: kubernetes kubectl kubeconfig


    【解决方案1】:

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

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

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

    【讨论】:

    • 对于一次性外壳,可以执行以下技巧alias kubectl='kubectl --kubeconfig &lt;(echo $KUBECONFIG_DATA | base64 --decode)',然后照常使用kubectl
    【解决方案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
    

    【讨论】:

      【解决方案3】:

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

       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 -
      

      【讨论】:

      • 我们正在运行自己的 Kubernetes 集群,因此没有可用的“gcloud”。无论如何,我看不出这如何解决磁盘上 kubeconfig 的存储问题。
      • gcloud 容器凭证写入 kubeconfig 文件并进行配置
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多