【问题标题】:Get kubeconfig by ssh into cluster通过 ssh 获取 kubeconfig 进入集群
【发布时间】:2018-01-05 08:17:00
【问题描述】:

如果我能够通过 SSH 连接到集群中的主节点或任何节点,我是否可以获得 1) kubeconfig 文件或 2) 编写我自己的 kubeconfig 文件所需的所有信息?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您可以在 /etc/kubernetes/admin.conf 下的主节点上找到配置(在 v1.8+ 上)。

    在某些版本的 Kubernetes 上,这可以在 ~/.kube 下找到

    【讨论】:

    • 在 Azure (ACS/AKS/acs-engine) 上,它位于 ~/.kube 下,假设您位于创建集群的用户的主目录中。如果您不知道如何访问集群,您可以通过 IAM 获得 Owner 权限,上传您的 SSH 公钥(通过重置密码),然后登录该框并找到配置文件。您可能需要使用 sudo 将其 scp 回本地计算机或更改文件的所有权。
    【解决方案2】:

    我也有兴趣听到这个问题的答案。但我认为这取决于身份验证的设置方式。例如,

    • Minikube 使用“客户端证书”身份验证。如果它也将 client.key 存储在集群上,您可以通过将其与集群的 CA 公钥组合来构造一个 kubeconfig 文件。
    • GKE (Google Kubernetes Engine) 在独立于 Kubernetes 集群的前端使用身份验证(主服务器单独托管)。您无法通过 ssh 连接到主服务器,但如果可能的话,您仍然可能无法构造适用于 API 服务器的令牌。

    但是,默认情况下,Pod 有一个服务帐户令牌,可用于向 Kubernetes API 进行身份验证。因此,如果您通过 SSH 连接到一个节点并将 docker exec 运行到由 Kubernetes 管理的容器中,您将看到:

    / # ls run/secrets/kubernetes.io/serviceaccount
    ca.crt     namespace  token
    

    您可以组合 ca.crttoken 来构造一个 kubeconfig 文件,该文件将向 Kubernetes 主服务器进行身份验证。

    所以你的问题的答案是是的,如果你通过 SSH 连接到一个节点,你可以跳转到一个 Pod 并收集信息来编写你自己的kubeconfig 文件。 (有关如何禁用此功能,请参阅this question。我认为默认情况下也可以通过强制 RBAC 和禁用 ABAC 来禁用它,但我可能错了。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 2014-05-14
      • 1970-01-01
      • 2021-11-06
      • 2020-06-18
      • 1970-01-01
      • 2019-08-10
      相关资源
      最近更新 更多