posted

0 Comments

VMware 在2020年4月2日发布了vSphere 7.0的正式版。这个版本的vSphere最显著的特性之一是它在hypervisor层内部创建了Kubernetes控制平面。该功能使vSphere大大扩展了它所能运行的工作负载范围,涵盖了更多当前流行的应用程序。我们将此功能之前称为“ Project Pacific”或WCP(工作负载控制平面),现在的正式名称是“vSphere with Kubernetes”。要了解有关vSphere 7的新功能的更多信息,请访问我们的网站:https://www.vmware.com/products/vsphere.html.

 

1.背景介绍

vSphere with Kubernetes中有2层Kubernetes群集,如上图所示。在基础架构层(底层)称为“Supervisor Kubernetes群集”,服务层(上层)称为“ Tanzu Kubernetes群集”。两个集群都有主(Master)节点和工作(Worker)节点。在某些情况下,出于调试或其他配置原因,您可能需要通过SSH协议访问这些节点。本文将通过实战的方式,来一步步展示来如何获取各个层次的不同节点的访问地址和秘钥,主要包含下面两个方面的内容:

  • 如何访问Supervisor Kubernetes集群的节点
  • 如何访问Tanzu Kubernetes集群的节点

下面的实战练习需要几个前提条件:

 

2. 访问Supervisor Kubernetes集群的节点

有两种获取Supervisor群集的节点名称和IP地址的方法。一种是通过vCenter Server Client控制台,另一种是通过“ kubectl”命令。

  1. 通过kubectl命令,以数据中心管理员的身份登录Supervisor 集群。

    $ kubectl vsphere login --server=10.117.233.1 --vsphere-username
    administrator@vsphere.loc
    al
  2. 通过下面的命令来获得Supervisor群集各个节点的访问地址:

    $ kubectl get nodes -o wide
    NAME                        STATUS  ROLES    AGE   VERSION      INTERNAL-IP    ...       
    42164f156d72f36753e2cdfb7d  Ready   master   9d    v1.16.7-2+bf   10.244.0.196      
    4216c813a129bb53c21f21e63   Ready   master   9d    v1.16.7-2+bf   10.244.0.195   
    4216d818db629c2b035276f82   Ready   master   9d    v1.16.7-2+bf   10.244.0.194   
    pek2-hs1-b0207.vmware.com   Ready   agent    9d    v1.16.7-sph-4  10.117.233.218      
    pek2-hs1-b0208.vmware.com   Ready   agent    9d    v1.16.7-sph-4  10.117.233.219      
    pek2-hs1-b0209.vmware.com   Ready   agent    9d    v1.16.7-sph-4  10.117.233.220
  3. 访问Supervisor群集中的Worker节点
    Supervisor群集中的Worker节点是上面输出的最后三行。它们不是虚拟机,而是Esxi主机,这是vSphere with Kubernetes的最大的卖点之一。主机名和IP地址可在管理网络中访问,而数据中心管理员应该知道这些主机的密码。


    $ ssh
    root@10.117.233.218
    Password:
    The time and date of this login have been sent to the system logs.
    WARNING:
      All commands run on the ESXi shell are logged and may be included in
      support bundles. Do not provide passwords directly on the command line.
      Most tools can prompt for secrets or accept them from standard input.
    VMware offers supported, powerful system administration tools.  Please
    see www.vmware.com/go/sysadmintools for details.
    The ESXi Shell can be disabled by an administrative user. See the
    vSphere Security documentation for more information.
  4. Master节点是上述示例输出中的前三行。Master的节点名称是长数字字符串,此处显示的IP地址是私有的IP地址,在管理网络中不可访问。您可以从vCenter Server客户端中获取Master节点的更有意义的名称和可访问的IP地址。如下图所示,在vCenter Server控制台中,Supervisor群集的Master节点称为“ SupervisorControlPlanVM”,我们还可以获得可在管理网络中访问的网络接口。现在的问题是我们不知道访问这些主节点的密码:
  5. 为了获得Supervisor群集中的Master节点的密码,我们先要登录到vCenter Server的虚机中。通常来说,数据中心管理员应该会拥有vCenter Server的root用户的密码。先用root用户通过SSH登录vCenter Server,还需要运行一段脚本,才能获得我们所需要的密码:

    $ ssh root@pek2-skevin-vc01.eng.vmware.com
    # root@pek2-skevin-vc01 [ ~ ]# /usr/lib/vmware-wcp/decryptK8Pwd.py
    Read key from file
    Connected to PSQL
    Cluster: domain-c8:423a5bb7-e6aa-4d9d-8973-af3f2fed71af
    IP: 10.117.233.227
    PWD: uTpeJKiVKp6EtgkD07zWlCjC+voX/i2nwq0wQ6hzl9pycO..... HK2dodiD0RjpGKjQXzeGqkFW7MBEJW0linvkEKkqyVpk7xk0H/S/.... G5VppLxZydbpJRmps0e9KZlfjLw17pyZ39mmUTsjuQoc=
    ------------------------------------------------------------

    通过上面的密码,可以用root用户访问任意的一个Master节点

 

3. 访问Tanzu Kubernetes集群的节点

  1. 通过kubectl命令,以数据中心管理员或者Namespace管理员的身份登录Supervisor 集群。

    $ kubectl vsphere login --server=10.117.233.1 --vsphere-username
    administrator@vsphere.local
  2. 在Tanzu集群所在的命名空间里查看秘钥的信息,可以通过以下命令获得有关Tanzu集群跟SSH登录相关的秘钥信息,记住这个secret的名字,在下面的例子输出中是“my-tanzu-cluster-ssh”。

    kubectl get secret -n wangyu | grep ssh-auth
    my-tanzu-cluster-ssh     kubernetes.io/ssh-auth        1      18d
  3. 查看Tanzu集群的节点信息和IP地址

    $ kubectl get virtualmachines -n wangyu
    NAME                                              AGE
    my-tanzu-cluster-control-plane-kffsj              18d
    my-tanzu-cluster-workers-c5jwz-86b575c4bb-5lbst   18d
    my-tanzu-cluster-workers-c5jwz-86b575c4bb-9hwqg   18d
    my-tanzu-cluster-workers-c5jwz-86b575c4bb-lvth9   18d
    $ kubectl get virtualmachines -o yaml | grep vmIp
       vmIp: 10.244.1.2
       vmIp: 10.244.1.3
       vmIp: 10.244.1.5
        vmIp: 10.244.1.4
  4. 上面输出的IP地址是内网的私有地址,我们从管理网络段是无法访问的,因此我们需要一个跳板机。事实上在上节中,Supervisor集群的Master节点可以作为跳板机。但这样做比较麻烦,需要较多的步骤。下面的方法可以通过kubectl创建一个跳板机,并且将访问Tanzu集群节点的私钥也一起放在跳板机里,就可以方便的访问Tanzu集群中的各个节点:

    $ more jumpbox.yaml
    apiVersion: v1
    kind: Pod
    metadata:
    name: jumpbox
    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
    volumes:
       - name: ssh-key
         secret:
            secretName: my-tanzu-cluster-ssh
  5. 部署这个跳板机,并且通过系统用户”vmware-system-user”和预制的SSH私钥去连接Tanzu集群的各个节点:

    $ kubectl apply -f jumpbox.yaml -n wangyu
    pod/jumpbox created
    $ kubectl exec -it jumpbox /usr/bin/ssh vmware-system-user@10.244.1.2
    Welcome to Photon 3.0 (\m) - Kernel \r (\l)
    Last login: Thu Apr 30 06:08:15 2020 from 10.117.233.77
    09:08:09 up 18 days,  6:07,  0 users,  load average: 1.04, 0.91, 0.50
    14 Security notice(s)
    Run 'tdnf updateinfo info' to see the details.
    vmware-system-user@my-tanzu-cluster-control-plane-kffsj [ ~ ]$

 

4. 总结

在各种开发部署的环境下,总有一些场景需要登录到Master或Worker节点中,去查看日志信息,服务状态,甚至需要修改配置文件。本文通过一步步操作来说明如何来完成这些任务。