可以以 vmware-system-user 用户身份使用私钥通过 SSH 连接 TKG 集群节点。

您可以以 vmware-system-user 用户身份通过 SSH 连接到任何 TKG 集群节点。包含 SSH 私钥的机密被命名为 CLUSTER-NAME-ssh。请参见使用 Kubectl 获取 TKG 集群密钥

要使用私钥通过 SSH 连接 TKG 集群节点,请在 主管 上创建跳转盒 vSphere Pod

前提条件

在此任务中,将置备一个 vSphere Pod,作为 SSH 连接的跳转主机。 vSphere Pod 要求对 主管 使用 NSX 网络连接。如果对 主管 使用 vDS 网络连接,请参见 以系统用户身份使用密码通过 SSH 连接到 TKG 服务 集群节点

过程

  1. 连接到 主管
  2. 创建名为 NAMESPACE 的环境变量,其值是置备了目标 TKG 集群的 vSphere 命名空间 的名称。
    export NAMESPACE=VSPHERE-NAMESPACE
  3. 将上下文切换到置备了 vSphere 命名空间 集群的 Tanzu Kubernetes
    kubectl config use-context $NAMESPACE
  4. 查看 TKG-CLUSTER-NAME-ssh 密钥对象。
    kubectl get secrets
  5. 创建 Docker Hub 注册表凭据密钥。
    默认情况下,将从 Docker Hub 中提取用于创建 vSphere Pod (PhotonOS) 的映像。您可能需要凭据密钥才能成功提取该映像。请参见 创建专用注册表凭据密钥
  6. 使用以下 jumpbox.yaml 创建 vSphere Pod
    namespaceYOUR-NAMESPACE 替换为置备了目标集群的 vSphere 命名空间。将 secretNameYOUR-CLUSTER-NAME-ssh 替换为目标集群的名称。
    apiVersion: v1
    kind: Pod
    metadata:
      name: jumpbox
      namespace: YOUR-NAMESPACE     #REPLACE
    spec:
      containers:
      - image: "photon:3.0"
        name: jumpbox
        command: [ "/bin/bash", "-c", "--" ]
        args: [ "yum install -y openssh-server; mkdir /root/.ssh; cp /root/ssh/ssh-privatekey /root/.ssh/id_rsa; chmod 600 /root/.ssh/id_rsa; while true; do sleep 30; done;" ]
        volumeMounts:
          - mountPath: "/root/ssh"
            name: ssh-key
            readOnly: true
        resources:
          requests:
            memory: 2Gi
      volumes:
        - name: ssh-key
          secret:
            secretName: YOUR-CLUSTER-NAME-ssh     #REPLACE 
      imagePullSecrets:
        - name: regcred
    
  7. 通过应用 jumpbox.yaml 规范部署 pod。
    kubectl apply -f jumpbox.yaml
    pod/jumpbox created
  8. 验证 pod 是否正在运行。
    kubectl get pods
    NAME      READY   STATUS    RESTARTS   AGE
    jumpbox   1/1     Running   0          3h9m
    
    注: 您也应会在 vSphere 命名空间 中看到 vCenter 中的 jumpbox pod。
  9. 通过运行以下一组命令,创建具有目标集群节点的 IP 地址的环境变量。
    1. 获取目标虚拟机的名称。
      kubectl get virtualmachines
    2. 创建环境变量 VMNAME,其值为目标节点的名称。
      export VMNAME=NAME-OF-THE-VIRTUAL-MACHINE
    3. 创建环境变量 VMIP,其值为目标节点虚拟机的 IP 地址。
      export VMIP=$(kubectl -n $NAMESPACE get virtualmachine/$VMNAME -o jsonpath='{.status.vmIp}')
  10. 运行以下命令,使用跳转盒通过 SSH 访问集群节点。
    kubectl exec -it jumpbox  /usr/bin/ssh vmware-system-user@$VMIP
    重要说明: 创建容器并安装软件大约需要 60 秒。如果您收到“error executing command in container: container_linux.go:370: starting container process caused: exec: "/usr/bin/ssh": stat /usr/bin/ssh: no such file or directory”错误,请在几秒钟后重新尝试运行该命令。
  11. 通过输入 yes 来确认主机的真实性。
    The authenticity of host '10.249.0.999 (10.249.0.999)' can't be established.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '10.249.0.999' (ECDSA) to the list of known hosts.
    Welcome to Photon 3.0
     
  12. 确认您已经以 vmware-system-user 身份登录到目标节点。
    例如,以下输出指示您已经以系统用户身份登录到控制平面节点。
    vmware-system-user@tkg-cluster-1-control-plane-66tbr [ ~ ]$
    
  13. 在节点上执行所需的操作。
    注意: 您可能需要使用 sudosudo su 在节点上执行某些操作,例如重新启动 kubelet。
  14. 完成后,键入 exit,注销 vSphere Pod 上的 SSH 会话。
  15. 要删除 pod,请运行命令 kubectl delete pod jumpbox
    小心: 为安全起见,请考虑在完成工作后删除 jumpbox pod。如果需要,可以稍后重新创建。