《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 3月 21 12:16 id_rsa
-rw-r--r--. 1 dawnsky dawnsky 393 3月 21 12:16 id_rsa.pub
使用 Public Key 创建 VM
在 OpenShift 控制台创建 VM 的时候,可在 VM 的 Scripts 配置页面中点击 Authorized SSH Key 处的 Edit。
然后在 Authorized SSH Key 窗口中提供 public key 的内容。
当 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
- 执行以下命令运行一个 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
- 将 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
- 执行以下命令。该命令先进入 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
- 从控制台上查看 VM 运行的节点。
- 由于本文使用的是基于 OpenShift Local 的单机版 OpenShift 环境,因此 VM
NODE_IP=192.168.130.11
- 执行命令创建一个 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
- 执行命令,使用 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