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集群的节点
下面的实战练习需要几个前提条件:
- 配置好Supervisor Kubernetes集群。请参考:Config a Supervisor Cluster
- 创建并配置好Supervisor Kubernetes集群的命名空间。请参考:Configure Supervisor Cluster Namespaces.
- 下载并安装好Kubernetes客户端根据kubectl和vSphere的插件。请参考:Download and Install the Kubernetes CLI Tools for vSphere
- 在命名空间里创建一个或多个Tanzu Kubernetes 集群。请参考:How to Create Tanzu Kubernetes Clusters.
2. 访问Supervisor Kubernetes集群的节点
有两种获取Supervisor群集的节点名称和IP地址的方法。一种是通过vCenter Server Client控制台,另一种是通过“ kubectl”命令。
- 通过kubectl命令,以数据中心管理员的身份登录Supervisor 集群。
$ kubectl vsphere login --server=10.117.233.1 --vsphere-username [email protected]al
- 通过下面的命令来获得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
- 访问Supervisor群集中的Worker节点
Supervisor群集中的Worker节点是上面输出的最后三行。它们不是虚拟机,而是Esxi主机,这是vSphere with Kubernetes的最大的卖点之一。主机名和IP地址可在管理网络中访问,而数据中心管理员应该知道这些主机的密码。$ ssh [email protected] 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.
- Master节点是上述示例输出中的前三行。Master的节点名称是长数字字符串,此处显示的IP地址是私有的IP地址,在管理网络中不可访问。您可以从vCenter Server客户端中获取Master节点的更有意义的名称和可访问的IP地址。如下图所示,在vCenter Server控制台中,Supervisor群集的Master节点称为“ SupervisorControlPlanVM”,我们还可以获得可在管理网络中访问的网络接口。现在的问题是我们不知道访问这些主节点的密码:
- 为了获得Supervisor群集中的Master节点的密码,我们先要登录到vCenter Server的虚机中。通常来说,数据中心管理员应该会拥有vCenter Server的root用户的密码。先用root用户通过SSH登录vCenter Server,还需要运行一段脚本,才能获得我们所需要的密码:
$ ssh [email protected] # 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集群的节点
- 通过kubectl命令,以数据中心管理员或者Namespace管理员的身份登录Supervisor 集群。
$ kubectl vsphere login --server=10.117.233.1 --vsphere-username [email protected]
- 在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
- 查看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
- 上面输出的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
- 部署这个跳板机,并且通过系统用户”vmware-system-user”和预制的SSH私钥去连接Tanzu集群的各个节点:
$ kubectl apply -f jumpbox.yaml -n wangyu pod/jumpbox created $ kubectl exec -it jumpbox /usr/bin/ssh [email protected] 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节点中,去查看日志信息,服务状态,甚至需要修改配置文件。本文通过一步步操作来说明如何来完成这些任务。