OpenShift 4 - 通过 SSH 远程访问 OpenShift Virtualization 的虚拟机

《OpenShift / RHEL / DevSecOps 汇总目录》
说明:本文已经在支持 OpenShift 4.12 的 OpenShift 环境中验证

在《OpenShift 4 - 用 OpenShift Virtualization 运行容器化虚拟机 (视频)》一文中使用了 OpenShift 控制台直接访问运行在 OpenShift 上的 VM。本文将介绍如何通过 SSH 方式从外部访问运行在 OpenShift 上的 VM。

文章目录

  • 生成 SSH Key
  • 使用 Public Key 创建 VM
  • 在 OCP 内部通过 SSH 访问 VM
  • 从 OCP 外部通过 SSH 访问 VM
  • 参考

生成 SSH Key

执行命令,生成公钥-私钥对。

$ ssh-keygen

$ ll ~/.ssh
-rw-------. 1 dawnsky dawnsky 1679 321 12:16 id_rsa
-rw-r--r--. 1 dawnsky dawnsky  393 321 12:16 id_rsa.pub

使用 Public Key 创建 VM

在 OpenShift 控制台创建 VM 的时候,可在 VM 的 Scripts 配置页面中点击 Authorized SSH Key 处的 Edit。
OpenShift 4 - 通过 SSH 远程访问 OpenShift Virtualization 的虚拟机_第1张图片
然后在 Authorized SSH Key 窗口中提供 public key 的内容。
OpenShift 4 - 通过 SSH 远程访问 OpenShift Virtualization 的虚拟机_第2张图片
当 VM 创建好后,可以执行以下命令查看 VM 使用的内部 IP 地址。

$ oc get vmi fedora-vm1
NAME         AGE   PHASE     IP             NODENAME             READY
fedora-vm1   15h   Running   10.217.1.118   crc-rwwzd-master-0   True

$ VM_IP=10.217.1.118

在 OCP 内部通过 SSH 访问 VM

  1. 执行以下命令运行一个 pod。
$ cat << EOF | oc apply -f 
apiVersion: v1
kind: Pod
metadata:
  name: ubi
spec:
  containers:
    - name: shell
      image: registry.access.redhat.com/ubi8/ubi:8.2
      stdin: true
      tty: true
EOF
  1. 将 Private Key 复制到 pod 中。
$ oc get pod ubi
NAME   READY   STATUS    RESTARTS   AGE
ubi    1/1     Running   0          5h48m
 
$ oc cp ~/.ssh/id_rsa ubi:/tmp/id_rsa
 
$ oc exec pod/ubi -- ls -al /tmp/id_rsa
-rw-rw-r--. 1 1000 1000 1679 Mar 21 09:59 /tmp/id_rsa
  1. 执行以下命令。该命令先进入 pod,然后再使用 Private Key 和 VM 的内部 IP 登录 VM。
$ oc rsh pod/ubi ssh -i /tmp/id_rsa fedora@${VM_IP}
Last login: Wed Mar 22 03:35:58 2023 from 10.217.0.139
[fedora@fedora-vm1 ~]$ 

从 OCP 外部通过 SSH 访问 VM

  1. 从控制台上查看 VM 运行的节点。
    OpenShift 4 - 通过 SSH 远程访问 OpenShift Virtualization 的虚拟机_第3张图片
  2. 由于本文使用的是基于 OpenShift Local 的单机版 OpenShift 环境,因此 VM
NODE_IP=192.168.130.11
  1. 执行命令创建一个 Service,该 Service 指定绑定节点的端口。
$ cat << EOF | oc apply -f 
apiVersion: v1
kind: Service
metadata:
  name: fedora-vm1-ssh
spec:
  externalTrafficPolicy: Cluster
  ports:
    - protocol: TCP
      port: 22
      nodePort: 32758
  selector:
     kubevirt.io/domain: fedora-vm1
  type: NodePort
EOF
  1. 执行命令,使用 Private Key 并通过 NodePort 端口访问运行 VM 的节点。
$ ssh -i ~/.ssh/id_rsa -p 32758 fedora@${NODE_IP}
The authenticity of host '[192.168.130.11]:32758 ([192.168.130.11]:32758)' can't be established.
ECDSA key fingerprint is SHA256:W1V9wkvwSbQm0cNe2ENxkuhKhswqRXN5b69TjUfhxNA.
ECDSA key fingerprint is MD5:4a:b0:ad:90:50:c0:65:8a:a4:61:29:3f:69:ba:1c:8a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.130.11]:32758' (ECDSA) to the list of known hosts.
Last login: Tue Mar 21 07:40:06 2023 from 10.217.0.139
[fedora@fedora-vm1 ~]$ 

参考

https://kubevirt.io/user-guide/virtual_machines/service_objects/
https://cloud.redhat.com/blog/accessing-your-vm-using-ssh-and-the-web-console
https://github.com/flozanorht/ocp4-virt-samples/blob/main/ubi-pod.yaml

你可能感兴趣的:(openshift,linux,虚拟化,VM,kubernetes)