【问题标题】:SSH into kubernetes nodes created through KOPSSSH 到通过 KOPS 创建的 kubernetes 节点
【发布时间】:2019-07-28 11:57:21
【问题描述】:

我通过 Kops 创建了一个 Kubernetes 集群。配置和 ssh 密钥位于我无法再访问的机器中。即使我丢失了密钥,是否可以通过 kops ssh 到节点?我看到有一个命令 -

kops 得到秘密

这给了我所有的秘密。我可以使用它来获得对节点的 ssh 访问权限以及如何操作?

我看到集群状态存储在 S3 中。它是否也存储密钥?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 kubernetes kops


    【解决方案1】:

    这给了我所有的秘密。我可以使用它来获得对节点的 ssh 访问权限以及如何操作?

    不是真的。这些是访问集群中 kube-apiserver 的秘密。例如,让您能够运行kubectl 命令。

    我看到集群状态存储在 S3 中。它是否也存储密钥?

    它存储在 S3 中,但不是用于访问服务器的 ssh 密钥。这些存储在 AWS 中的“密钥对”下。

    不幸的是,您只能获取只能用于登录一次的私钥(当您创建密钥对时)。所以我认为如果你没有私钥,你就不走运了。如果您有权访问 AWS 控制台,则可以对实例的根驱动器进行快照,并使用您拥有私钥的不同 AWS 密钥对一一重新创建节点(或控制平面)。

    【讨论】:

    • 我在 s3 文件夹中看到了私钥。公钥对应于用于创建 kops 集群的公钥。那不是对应的私钥吗?
    • 我认为这是 k8s 的私钥。您可以尝试,但不要认为这是您服务器的 ssh 密钥。
    • 有什么办法可以更改 kops 中的密钥对吗?我看到我们可以更改公钥,但它是否也会更改私钥,或者我们是否需要明确指定私钥。链接在这里。 github.com/kubernetes/kops/blob/master/docs/security.md
    • 并非如此,因此在 AWS 中,当您创建服务器时,您无法更改 SSH 密钥对。唯一的方法是使用不同的密钥对从快照创建新服务器
    【解决方案2】:

    就我而言,当我使用 Kops 安装集群时,我必须运行 ssh-keygen,如下所示创建 id_rsa.pub/pvt 密钥。这让我可以简单地做一个 ssh 或

    ssh-keygen
    kops create secret --name ${KOPS_CLUSTER_NAME} sshpublickey admin -i ~/.ssh/id_rsa.pub
    

    然后用

    创建集群
    kops update cluster --name ${KOPS_CLUSTER_NAME} --yes
    ssh admin@ec2-13-59-4-99.us-east-2.compute.amazonaws.com
    

    【讨论】:

      【解决方案3】:

      您无法恢复私钥,但您应该可以按照以下步骤安装新的公钥:

      kops delete secret --name <clustername> sshpublickey admin
      kops create secret --name <clustername> sshpublickey admin -i ~/.ssh/newkey.pub
      kops update cluster --yes to reconfigure the auto-scaling groups
      kops rolling-update cluster --name <clustername> --yes to immediately roll all the machines so they have the new key (optional)
      

      摘自本文档:

      https://github.com/kubernetes/kops/blob/master/docs/security.md#ssh-access

      【讨论】:

        【解决方案4】:

        您可以使用gcr.io/google-containers/startup-script 容器运行新的守护程序集,以更新所有节点上的公钥,这将在您启动新节点时为您提供帮助,并将替换所有现有节点中的公钥。

        kind: DaemonSet
        apiVersion: extensions/v1beta1
        metadata:
          name: startup-script
          labels:
            app: startup-script
        spec:
          template:
            metadata:
              labels:
                app: startup-script
            spec:
              hostPID: true
              containers:
                - name: startup-script
                  image: gcr.io/google-containers/startup-script:v1
                  imagePullPolicy: Always
                  securityContext:
                    privileged: true
                  env:
                  - name: STARTUP_SCRIPT
                    value: |
                      #! /bin/bash
                      touch /tmp/foo
                      #echo "MYPUBLICKEY" > /home/admin/.ssh/authorized_keys
                      echo done
        

        MYPUBLICKEY 替换为您的公钥和home 之后的用户名,这里admin 将根据您使用的操作系统被替换。这将帮助您通过 ssh 访问节点,而无需更改/替换现有节点

        您还可以在执行kops edit ig nodes 的同时在ig 中添加用户数据,并添加小一行来附加您的公钥。

        【讨论】:

          猜你喜欢
          • 2017-12-10
          • 2018-07-09
          • 1970-01-01
          • 2018-11-15
          • 2021-05-01
          • 2019-03-15
          • 1970-01-01
          • 2018-06-18
          • 2021-05-14
          相关资源
          最近更新 更多