使用 SSH 连接到集群节点

本页面介绍如何将 Secure Shell (SSH) 连接到 GKE On-Prem 集群节点。

概览

要通过 SSH 连接到用户或管理员集群节点,请从集群的控制平面下载 SSH 密钥。然后,使用该密钥获取集群节点的 shell。

下载 SSH 密钥后,请考虑将 SSH 密钥保存在密文/凭据管理系统(例如 HashiCorp Vault)中。 如果您日后想通过 SSH 连接到集群节点,并且 API 服务器关机,则需要使用已保存的 SSH 密钥。

获取集群节点的 IP 地址

用户集群

获取用户集群节点的 IP 地址:

kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] get nodes --output wide

其中,[USER_CLUSTER_KUBECONFIG] 是用户集群的 kubeconfig 文件的路径。

管理员集群

获取管理员集群节点的 IP 地址:

kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get nodes --output wide

其中,[ADMIN_CLUSTER_KUBECONFIG] 是管理员集群的 kubeconfig 文件的路径。

在命令输出中,记下 INTERNAL-IP 字段。这些是节点 IP 地址。

使用 SSH 连接到用户集群节点

  1. 获取用户集群的 SSH 密钥:

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get secrets -n [USER_CLUSTER_NAME] ssh-keys -o yaml \
    | grep ssh.key: | awk '{ print $NF }' | base64 -d > \
    ~/.ssh/[USER_CLUSTER_NAME].key && chmod 600 ~/.ssh/[USER_CLUSTER_NAME].key
    

    其中:

    • [ADMIN_CLUSTER_KUBECONFIG] 是管理员集群的 kubeconfig 文件的路径。

    • [USER_CLUSTER_NAME] 是您的用户集群的名称。

    上述命令会执行以下步骤:

    • 在管理员集群中,获取 [USER_CLUSTER_NAME] 命名空间中名为 ssh-keys 的 Secret 的 ssh.key 字段。

    • 对密钥进行 Base64 解码。

    • 将解码后的密钥存储在文件 ~/.ssh/[USER_CLUSTER_NAME].key 中。

    • 为密钥文件设置适当的访问权限。

  2. 使用密钥通过 SSH 连接到用户集群节点:

    ssh -i ~/.ssh/[USER_CLUSTER_NAME].key ubuntu@[NODE_IP]
    

    其中,[NODE_IP] 是您之前收集的用户集群节点的内部 IP 地址。

使用 SSH 连接到管理员集群节点

  1. 获取管理员集群的 SSH 密钥:

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get secrets -n kube-system sshkeys -o yaml \
    | grep vsphere_tmp: | awk '{ print $NF }' | base64 -d > \
    ~/.ssh/admin-cluster.key && chmod 600 ~/.ssh/admin-cluster.key
    

    其中,[ADMIN_CLUSTER_KUBECONFIG] 是管理员集群的 kubeconfig 文件的路径。

    上述命令会执行以下步骤:

    • 在管理员集群中,获取 kube-system 命名空间中名为 sshkeys 的 Secret 的 vsphere_tmp 字段。

    • vsphere_tmp 字段(密钥)进行 Base64 解码。

    • 将解码后的密钥存储在文件 ~/.ssh/admin-cluster.key 中。

    • 为密钥文件设置适当的访问权限。

  2. 使用密钥通过 SSH 连接到管理员集群节点:

    ssh -i ~/.ssh/admin-cluster.key ubuntu@[NODE_IP]
    

    其中,[NODE_IP] 是您之前收集的管理员集群节点的内部 IP 地址。