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

本文介绍了如何在OpenShift4.12环境中通过SSH访问运行的VM。创建VM时,可以通过Cloud-init设置密码或证书登录。然后,从OpenShift外部可以通过手动或自动创建NodePort服务来访问VM,而内部访问则可通过内部IP或服务进行。文章提供了详细的步骤和命令示例。
摘要由CSDN通过智能技术生成

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

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

创建 VM

创建使用密码登陆的 VM

  1. 在 OpenShift 控制台创建 VM 的时候,可在 VM 的 Scripts 配置页面中点击 Cloud-init 处的 Edit。
    在这里插入图片描述
  2. 切换到 Script,添加 “ssh_pwauth: true” 一行,然后保存即可。
    在这里插入图片描述
  3. 当 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

创建使用证书登陆的 VM

  1. 执行命令(全部回车即可),生成公钥-私钥对。
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa):
Created directory '/home/user1/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:YjLzIQx+cbNF59mgLUUBrV5l5OIKMOoGg0FD1dZtF/8 user1@ocp4-bastion.aio.example.com
The key's randomart image is:
+---[RSA 3072]----+
|.+... . ++*+o    |
|. .  o o O.*+    |
|. . = o =.*oo.   |
|.o + = +.o..  .  |
|+ o B *.S..    E |
| + . B +..       |
|  o   . .        |
| .               |
|                 |
+----[SHA256]-----+

$ 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
  1. 在 OpenShift 控制台创建 VM 的时候,可在 VM 的 Scripts 配置页面中点击 Authorized SSH Key 处的 Edit。
    在这里插入图片描述
  2. 然后在 Authorized SSH Key 窗口中提供 public key 的内容。
    在这里插入图片描述
  3. 当 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. 以下两种方式可以任选一种,执行命令创建一个 Service,该 Service 指定绑定节点的端口。注意:不过不指定“–node-port”参数,系统将随机指定一个
$ virtctl expose vm fedora-vm1 --port=22 --name=fedora-vm1-ssh --type=NodePort --node-port 32758
$ 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. 从控制台的 Detail 上查看 VM 运行的节点。
    在这里插入图片描述
  2. 由于本文使用的是基于 OpenShift Local 的单机版 OpenShift 环境,因此 VM
$ NODE_IP=192.168.130.11
  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 ~]$ 

自动创建服务

  1. 在控制台的 Detail 上查看 VM 的详细信息,打开 SSH over NodePort 选项。此时会自动创建访问 VM 的 Service。
    在这里插入图片描述
  2. 复制上图的命令,如需要可加上私钥参数后执行即可登录 VM。
$ ssh fedora@console-openshift-console.apps-crc.testing -p 31837 -i ~/.ssh/id_rsa

在 OCP 内部通过 SSH 访问 VM

通过内部 IP 访问

  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 ~]$ 

通过服务访问

  1. 参照以上过程再创建一个名为 fedora-vm-2 的 VM,并自动创建对应的服务。
  2. 参照以上过程先登陆到名为 fedora-vm-1 的 VM 里。
  3. 在 fedora-vm-1 中创建一个包含可访问 fedora-vm-2 的私钥文件 fedora-vm-2.key,并将私钥复制到其中。
  4. 修改 fedora-vm-2.key 文件属性。
$ chmod 600 fedora-vm-2.key
  1. 在 fedora-vm-1 中远程登陆 fedora-vm-2。
$ ssh -i ./fedora-vm-2.key fedora@fedora-vm-2-nodeport-ssh-service-XXXX -p 22000

参考

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值