7.5. 配置对虚拟机的 SSH 访问
您可以使用以下方法配置对虚拟机的 SSH 访问:
您可以创建一个 SSH 密钥对,将公钥添加到虚拟机,并使用私钥运行
virtctl ssh
命令连接到虚拟机。您可以在运行时将公共 SSH 密钥添加到 Red Hat Enterprise Linux (RHEL) 9 虚拟机,或第一次引导到使用 cloud-init 数据源配置的客户机操作系统的虚拟机。
您可以将
virtctl port-foward
命令添加到.ssh/config
文件中,并使用 OpenSSH 连接到虚拟机。您可以创建一个服务,将服务与虚拟机关联,并连接到该服务公开的 IP 地址和端口。
您可以配置二级网络,将虚拟机(VM)附加到二级网络接口,并连接到 DHCP 分配的 IP 地址。
7.5.1. 访问配置注意事项
根据流量负载和客户端要求,配置对虚拟机(VM)的访问的每个方法都有优点和限制。
服务为从集群外部访问的应用程序提供出色的性能,并推荐使用。
如果内部集群网络无法处理流量负载,您可以配置二级网络。
virtctl ssh
和virtctl port-forwarding
命令- 易于配置。
- 建议对虚拟机进行故障排除。
-
推荐使用 Ansible 自动配置虚拟机的
virtctl port-forwarding
。 - 动态公共 SSH 密钥可用于使用 Ansible 调配虚拟机。
- 因为 API 服务器的负担,不建议用于 Rsync 或 Remote Desktop Protocol 等高流量应用程序。
- API 服务器必须能够处理流量负载。
- 客户端必须能够访问 API 服务器。
- 客户端必须具有集群的访问凭证。
- 集群 IP 服务
- 内部集群网络必须能够处理流量负载。
- 客户端必须能够访问内部集群 IP 地址。
- 节点端口服务
- 内部集群网络必须能够处理流量负载。
- 客户端必须能够访问至少一个节点。
- 负载均衡器服务
- 必须配置负载均衡器。
- 每个节点必须能够处理一个或多个负载均衡器服务的流量负载。
- 二级网络
- 卓越的性能,因为流量不会通过内部集群网络。
- 允许灵活的网络拓扑方法。
- 客户机操作系统必须配置适当的安全性,因为虚拟机直接公开给二级网络。如果虚拟机被破坏,入侵者可能会获得对二级网络的访问权限。
7.5.2. 使用 virtctl ssh
您可以将公共 SSH 密钥添加到虚拟机 (VM),并通过运行 virtctl ssh
命令连接到虚拟机。
这个方法易于配置。但是,不建议在有高流量负载的环境中使用,因为它会对 API 服务器造成负担。
7.5.2.1. 关于静态和动态 SSH 密钥管理
您可以在首次引导时或在运行时动态向虚拟机 (VM) 静态添加公共 SSH 密钥。
只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。
静态 SSH 密钥管理
您可以使用 cloud-init 数据源支持配置的客户机操作系统向虚拟机添加静态管理的 SSH 密钥。密钥会在第一次引导时添加到虚拟机 (VM) 中。
您可以使用以下方法之一添加密钥:
- 在使用 Web 控制台或命令行创建时,向单个虚拟机添加密钥。
- 使用 Web 控制台向项目添加密钥。之后,密钥会自动添加到您在这个项目中创建的虚拟机。
使用案例
- 作为虚拟机所有者,您可以使用单个密钥置备所有新创建的虚拟机。
动态 SSH 密钥管理
您可以为安装了 Red Hat Enterprise Linux (RHEL) 9 的虚拟机启用动态 SSH 密钥管理。之后,您可以在运行时更新密钥。密钥由 QEMU 客户机代理添加,该代理使用 Red Hat 引导源安装。
出于安全原因,您可以禁用动态密钥管理。然后,虚拟机会继承创建它的镜像的密钥管理设置。
使用案例
-
授予或撤销对虚拟机的访问权限:作为集群管理员,您可以通过从应用到命名空间中的所有虚拟机的
Secret
对象添加或删除单个用户的密钥来授予或撤销远程虚拟机访问。 - 用户访问:您可以将访问凭证添加到您创建和管理的所有虚拟机。
Ansible 置备:
- 作为操作团队成员,您可以创建一个单一 secret,其中包含用于 Ansible 置备的所有密钥。
- 作为虚拟机所有者,您可以创建虚拟机并附加用于 Ansible 置备的密钥。
密钥轮转:
- 作为集群管理员,您可以轮转命名空间中虚拟机使用的 Ansible 置备程序密钥。
- 作为工作负载所有者,您可以轮转您管理的虚拟机的密钥。
7.5.2.2. 静态密钥管理
当使用 OpenShift Container Platform web 控制台或命令行创建虚拟机 (VM) 时,您可以添加静态管理的公共 SSH 密钥。当虚拟机第一次引导时,密钥会添加为 cloud-init 数据源。
在使用 Web 控制台创建虚拟机时,您还可以将公共 SSH 密钥添加到项目中。密钥保存为 secret,并自动添加到您创建的所有虚拟机中。
如果您在项目中添加 secret,然后删除虚拟机,则 secret 会被保留,因为它是一个命名空间资源。您必须手动删除 secret。
7.5.2.2.1. 从模板创建虚拟机时添加密钥
在使用 OpenShift Container Platform web 控制台创建虚拟机时,您可以添加静态管理的公共 SSH 密钥。密钥会在第一次引导时作为 cloud-init 数据源添加到虚拟机。这个方法不会影响 cloud-init 用户数据。
可选:您可以在项目中添加密钥。之后,此密钥会自动添加到您在项目中创建的虚拟机。
先决条件
-
您可以通过运行
ssh-keygen
命令生成 SSH 密钥对。
流程
-
在 web 控制台中进入到 Virtualization
Catalog。 点模板标题。
客户机操作系统必须支持 cloud-init 数据源的配置。
- 点 Customize VirtualMachine。
- 点击 Next。
- 点 Scripts 选项卡。
如果您还没有在项目中添加公共 SSH 密钥,点 Authorized SSH key 旁边的编辑图标,然后选择以下选项之一:
- 使用现有 :从 secrets 列表中选择一个 secret。
添加新 :
- 浏览到 SSH 密钥文件或在 key 字段中粘贴文件。
- 输入 secret 名称。
- 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project。
- 点击 Save。
点 Create VirtualMachine。
VirtualMachine 详情页显示创建虚拟机的进度。
验证
点 Configuration 选项卡上的 Scripts 选项卡。
secret 名称显示在 Authorized SSH key 部分中。
7.5.2.2.2. 使用 Web 控制台从实例类型创建虚拟机时添加密钥
您可以使用 OpenShift Container Platform web 控制台从实例类型创建虚拟机 (VM)。您还可以通过复制现有快照或克隆虚拟机,来使用 Web 控制台创建虚拟机。
您可以从可用可引导卷列表创建虚拟机。您可以在列表中添加基于 Linux 或 Windows 的卷。
在使用 OpenShift Container Platform web 控制台从实例类型创建虚拟机(VM)时,您可以添加静态管理的 SSH 密钥。密钥会在第一次引导时作为 cloud-init 数据源添加到虚拟机。这个方法不会影响 cloud-init 用户数据。
流程
在 Web 控制台中,进入到 Virtualization
Catalog。 InstanceTypes 选项卡默认为打开。
选择以下选项之一:
从列表中选择合适的可引导卷。如果列表已被截断,请点 Show all 按钮来显示整个列表。
注意可引导的卷表仅列出
openshift-virtualization-os-images
命名空间中具有instancetype.kubevirt.io/default-preference
标签的卷。- 可选:点星号图标将可引导卷指定为热门卷。不足的可引导卷首先出现在卷列表中。
点 Add volume 上传新卷,或使用现有的持久性卷声明(PVC)、卷快照或
containerDisk
卷。点击 Save。集群中不可用的操作系统的徽标显示在列表的底部。您可以点 Add volume 链接为所需的操作系统添加卷。
另外,还有 创建 Windows 引导源快速启动的链接。如果您将鼠标悬停在 Select volume to boot from 行旁边的问号图标上,则同一链接会出现在弹出窗口中。
安装环境或环境断开连接后,从中引导的卷列表为空。在这种情况下,会显示三个操作系统徽标:Windows、RHEL 和 Linux。您可以点 Add volume 按钮添加新卷来满足您的要求。
- 点实例类型标题,然后选择适合您的工作负载的资源大小。
可选:选择虚拟机详情,包括虚拟机的名称,适用于您要从其引导的卷:
对于基于 Linux 的卷,请按照以下步骤配置 SSH:
- 如果您还没有在项目中添加公共 SSH 密钥,点 VirtualMachine details 部分中的 Authorized SSH key 旁边的编辑图标。
选择以下选项之一:
- 使用现有 :从 secrets 列表中选择一个 secret。
Add new: 遵循以下步骤:
- 浏览到公共 SSH 密钥文件,或在 key 字段中粘贴文件。
- 输入 secret 名称。
- 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project。
- 点击 Save。
对于 Windows 卷,请按照以下步骤配置 sysprep 选项:
如果您还没有为 Windows 卷添加 sysprep 选项,请按照以下步骤执行:
- 点 VirtualMachine 详情 部分中的 Sysprep 的编辑图标。
- 添加 Autoattend.xml 回答文件。
- 添加 Unattend.xml 回答文件。
- 点击 Save。
如果要将现有的 sysprep 选项用于 Windows 卷,请按照以下步骤执行:
- 点 Attach existing sysprep。
- 输入现有 sysprep Unattend.xml 回答文件的名称。
- 点击 Save。
可选: 如果要创建 Windows 虚拟机,您可以挂载 Windows 驱动程序磁盘:
- 点 Customize VirtualMachine 按钮。
- 在 VirtualMachine 详情页中,点 Storage。
- 选择 Mount Windows 驱动程序磁盘复选框。
- 可选:点 View YAML & CLI 查看 YAML 文件。点 CLI 查看 CLI 命令。您还可以下载或复制 YAML 文件内容或 CLI 命令。
- 点 Create VirtualMachine。
创建虚拟机后,您可以在 VirtualMachine 详情页中监控状态。
7.5.2.2.3. 使用命令行在创建虚拟机时添加密钥
当使用命令行创建虚拟机(VM)时,您可以添加静态管理的公共 SSH 密钥。密钥会在第一次引导时添加到虚拟机。
密钥作为 cloud-init 数据源添加到虚拟机中。此方法将访问凭据与 cloud-init 用户数据中的应用数据分隔开。这个方法不会影响 cloud-init 用户数据。
先决条件
-
您可以通过运行
ssh-keygen
命令生成 SSH 密钥对。
流程
为
VirtualMachine
对象和Secret
对象创建清单文件:清单示例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm namespace: example-namespace spec: dataVolumeTemplates: - metadata: name: example-vm-volume spec: sourceRef: kind: DataSource name: rhel9 namespace: openshift-virtualization-os-images storage: resources: {} instancetype: name: u1.medium preference: name: rhel.9 running: true template: spec: domain: devices: {} volumes: - dataVolume: name: example-vm-volume name: rootdisk - cloudInitNoCloud: 1 userData: |- #cloud-config user: cloud-user name: cloudinitdisk accessCredentials: - sshPublicKey: propagationMethod: noCloud: {} source: secret: secretName: authorized-keys 2 --- apiVersion: v1 kind: Secret metadata: name: authorized-keys data: key: c3NoLXJzYSB... 3
运行以下命令来创建
VirtualMachine
和Secret
对象:$ oc create -f <manifest_file>.yaml
运行以下命令来启动虚拟机:
$ virtctl start vm example-vm -n example-namespace
验证
获取虚拟机配置:
$ oc describe vm example-vm -n example-namespace
输出示例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm namespace: example-namespace spec: template: spec: accessCredentials: - sshPublicKey: propagationMethod: noCloud: {} source: secret: secretName: authorized-keys # ...
7.5.2.3. 动态密钥管理
您可以使用 OpenShift Container Platform Web 控制台或命令行为虚拟机(VM)启用动态密钥注入。然后,您可以在运行时更新密钥。
只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。
如果您禁用动态密钥注入,则虚拟机会继承创建它的镜像的密钥管理方法。
7.5.2.3.1. 从模板创建虚拟机时启用动态密钥注入
在使用 OpenShift Container Platform web 控制台从模板创建虚拟机时,您可以启用动态公共 SSH 密钥注入。然后,您可以在运行时更新密钥。
只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。
密钥由 QEMU 客户机代理添加到虚拟机,该代理使用 RHEL 9 安装。
先决条件
-
您可以通过运行
ssh-keygen
命令生成 SSH 密钥对。
流程
-
在 web 控制台中进入到 Virtualization
Catalog。 - 点 Red Hat Enterprise Linux 9 虚拟机 标题。
- 点 Customize VirtualMachine。
- 点击 Next。
- 点 Scripts 选项卡。
如果您还没有在项目中添加公共 SSH 密钥,点 Authorized SSH key 旁边的编辑图标,然后选择以下选项之一:
- 使用现有 :从 secrets 列表中选择一个 secret。
添加新 :
- 浏览到 SSH 密钥文件或在 key 字段中粘贴文件。
- 输入 secret 名称。
- 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project。
- 将 Dynamic SSH 密钥注入 设置为 on。
- 点击 Save。
点 Create VirtualMachine。
VirtualMachine 详情页显示创建虚拟机的进度。
验证
点 Configuration 选项卡上的 Scripts 选项卡。
secret 名称显示在 Authorized SSH key 部分中。
7.5.2.3.2. 使用 Web 控制台在从实例类型创建虚拟机时启用动态密钥注入
您可以使用 OpenShift Container Platform web 控制台从实例类型创建虚拟机 (VM)。您还可以通过复制现有快照或克隆虚拟机,来使用 Web 控制台创建虚拟机。
您可以从可用可引导卷列表创建虚拟机。您可以在列表中添加基于 Linux 或 Windows 的卷。
在使用 OpenShift Container Platform web 控制台从实例类型创建虚拟机(VM)时,您可以启用动态 SSH 密钥注入。然后,您可以在运行时添加或撤销密钥。
只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。
密钥由 QEMU 客户机代理添加到虚拟机,该代理使用 RHEL 9 安装。
流程
在 Web 控制台中,进入到 Virtualization
Catalog。 InstanceTypes 选项卡默认为打开。
选择以下选项之一:
从列表中选择合适的可引导卷。如果列表已被截断,请点 Show all 按钮来显示整个列表。
注意可引导的卷表仅列出
openshift-virtualization-os-images
命名空间中具有instancetype.kubevirt.io/default-preference
标签的卷。- 可选:点星号图标将可引导卷指定为热门卷。不足的可引导卷首先出现在卷列表中。
点 Add volume 上传新卷,或使用现有的持久性卷声明(PVC)、卷快照或
containerDisk
卷。点击 Save。集群中不可用的操作系统的徽标显示在列表的底部。您可以点 Add volume 链接为所需的操作系统添加卷。
另外,还有 创建 Windows 引导源快速启动的链接。如果您将鼠标悬停在 Select volume to boot from 行旁边的问号图标上,则同一链接会出现在弹出窗口中。
安装环境或环境断开连接后,从中引导的卷列表为空。在这种情况下,会显示三个操作系统徽标:Windows、RHEL 和 Linux。您可以点 Add volume 按钮添加新卷来满足您的要求。
- 点实例类型标题,然后选择适合您的工作负载的资源大小。
- 点 Red Hat Enterprise Linux 9 虚拟机 标题。
可选:选择虚拟机详情,包括虚拟机的名称,适用于您要从其引导的卷:
对于基于 Linux 的卷,请按照以下步骤配置 SSH:
- 如果您还没有在项目中添加公共 SSH 密钥,点 VirtualMachine details 部分中的 Authorized SSH key 旁边的编辑图标。
选择以下选项之一:
- 使用现有 :从 secrets 列表中选择一个 secret。
Add new: 遵循以下步骤:
- 浏览到公共 SSH 密钥文件,或在 key 字段中粘贴文件。
- 输入 secret 名称。
- 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project。
- 点击 Save。
对于 Windows 卷,请按照以下步骤配置 sysprep 选项:
如果您还没有为 Windows 卷添加 sysprep 选项,请按照以下步骤执行:
- 点 VirtualMachine 详情 部分中的 Sysprep 的编辑图标。
- 添加 Autoattend.xml 回答文件。
- 添加 Unattend.xml 回答文件。
- 点击 Save。
如果要将现有的 sysprep 选项用于 Windows 卷,请按照以下步骤执行:
- 点 Attach existing sysprep。
- 输入现有 sysprep Unattend.xml 回答文件的名称。
- 点击 Save。
- 在 VirtualMachine 详情 部分中将 Dynamic SSH 密钥注入 设置为 on。
可选: 如果要创建 Windows 虚拟机,您可以挂载 Windows 驱动程序磁盘:
- 点 Customize VirtualMachine 按钮。
- 在 VirtualMachine 详情页中,点 Storage。
- 选择 Mount Windows 驱动程序磁盘复选框。
- 可选:点 View YAML & CLI 查看 YAML 文件。点 CLI 查看 CLI 命令。您还可以下载或复制 YAML 文件内容或 CLI 命令。
- 点 Create VirtualMachine。
创建虚拟机后,您可以在 VirtualMachine 详情页中监控状态。
7.5.2.3.3. 使用 Web 控制台启用动态 SSH 密钥注入
您可以使用 OpenShift Container Platform Web 控制台为虚拟机 (VM) 启用动态密钥注入。然后,您可以在运行时更新公共 SSH 密钥。
该密钥由 QEMU 客户机代理添加到虚拟机,该代理与 Red Hat Enterprise Linux (RHEL) 9 一起安装。
先决条件
- 客户机操作系统是 RHEL 9。
流程
-
在 web 控制台中进入到 Virtualization
VirtualMachines。 - 选择一个虚拟机以打开 VirtualMachine 详情页。
- 在 Configuration 选项卡上,点 Scripts。
如果您还没有在项目中添加公共 SSH 密钥,点 Authorized SSH key 旁边的编辑图标,然后选择以下选项之一:
- 使用现有 :从 secrets 列表中选择一个 secret。
添加新 :
- 浏览到 SSH 密钥文件或在 key 字段中粘贴文件。
- 输入 secret 名称。
- 可选: 选择 Automatically apply this key to any new VirtualMachine you create in this project。
- 将 Dynamic SSH 密钥注入 设置为 on。
- 点击 Save。
7.5.2.3.4. 使用命令行启用动态密钥注入
您可以使用命令行为虚拟机启用动态密钥注入。然后,您可以在运行时更新公共 SSH 密钥。
只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。
密钥由 QEMU 客户机代理添加到虚拟机,该代理使用 RHEL 9 自动安装安装。
先决条件
-
您可以通过运行
ssh-keygen
命令生成 SSH 密钥对。
流程
为
VirtualMachine
对象和Secret
对象创建清单文件:清单示例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm namespace: example-namespace spec: dataVolumeTemplates: - metadata: name: example-vm-volume spec: sourceRef: kind: DataSource name: rhel9 namespace: openshift-virtualization-os-images storage: resources: {} instancetype: name: u1.medium preference: name: rhel.9 running: true template: spec: domain: devices: {} volumes: - dataVolume: name: example-vm-volume name: rootdisk - cloudInitNoCloud: 1 userData: |- #cloud-config runcmd: - [ setsebool, -P, virt_qemu_ga_manage_ssh, on ] name: cloudinitdisk accessCredentials: - sshPublicKey: propagationMethod: qemuGuestAgent: users: ["cloud-user"] source: secret: secretName: authorized-keys 2 --- apiVersion: v1 kind: Secret metadata: name: authorized-keys data: key: c3NoLXJzYSB... 3
运行以下命令来创建
VirtualMachine
和Secret
对象:$ oc create -f <manifest_file>.yaml
运行以下命令来启动虚拟机:
$ virtctl start vm example-vm -n example-namespace
验证
获取虚拟机配置:
$ oc describe vm example-vm -n example-namespace
输出示例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm namespace: example-namespace spec: template: spec: accessCredentials: - sshPublicKey: propagationMethod: qemuGuestAgent: users: ["cloud-user"] source: secret: secretName: authorized-keys # ...
7.5.2.4. 使用 virtctl ssh 命令
您可以使用 virtcl ssh
命令访问正在运行的虚拟机(VM)。
先决条件
-
已安装
virtctl
命令行工具。 - 您已向虚拟机添加了一个公共 SSH 密钥。
- 已安装 SSH 客户端。
-
安装
virtctl
工具的环境具有访问虚拟机所需的集群权限。例如,运行oc login
或设置了KUBECONFIG
环境变量。
流程
运行
virtctl ssh
命令:$ virtctl -n <namespace> ssh <username>@example-vm -i <ssh_key> 1
- 1
- 指定命名空间、用户名和 SSH 私钥。默认的 SSH 密钥位置为
/home/user/.ssh
。如果密钥保存在不同的位置,您必须指定路径。
Example
$ virtctl -n my-namespace ssh cloud-user@example-vm -i my-key
您可以在 web 控制台中复制 virtctl ssh
命令,方法是从 VirtualMachines 页中的虚拟机旁的选项
菜单中选择 Copy SSH 命令。
7.5.3. 使用 virtctl port-forward 命令
您可以使用本地 OpenSSH 客户端和 virtctl port-forward
命令连接到正在运行的虚拟机 (VM)。您可以将此方法与 Ansible 配合使用,以自动配置虚拟机。
对于低流量应用程序,建议使用这个方法,因为端口转发流量通过 control plane 发送。对于 Rsync 或 Remote Desktop 协议等高流量应用程序(如 Rsync 或 Remote Desktop 协议)使用这个方法,因为它对 API 服务器造成大量负担。
先决条件
-
已安装
virtctl
客户端。 - 您要访问的虚拟机正在运行。
-
安装
virtctl
工具的环境具有访问虚拟机所需的集群权限。例如,运行oc login
或设置了KUBECONFIG
环境变量。
流程
在客户端机器上的
~/.ssh/config
文件中添加以下文本:Host vm/* ProxyCommand virtctl port-forward --stdio=true %h %p
运行以下命令来连接到虚拟机:
$ ssh <user>@vm/<vm_name>.<namespace>
7.5.4. 使用服务进行 SSH 访问
您可以为虚拟机(VM)创建服务,并连接到该服务公开的 IP 地址和端口。
服务为从集群外部或集群外部访问的应用程序提供出色的性能,并推荐使用。入口流量受防火墙保护。
如果集群网络无法处理流量负载,请考虑使用二级网络进行虚拟机访问。
7.5.4.1. 关于服务
Kubernetes 服务将客户端的网络访问权限公开给一组容器集上运行的应用。服务在 NodePort
和 LoadBalancer
类型方面提供抽象、负载均衡以及暴露于外部世界。
- ClusterIP
-
在内部 IP 地址上公开服务,并将 DNS 名称公开给集群中的其他应用程序。单个服务可映射到多个虚拟机。当客户端尝试连接到服务时,客户端请求会在可用后端之间平衡负载。
ClusterIP
是默认的服务类型。 - NodePort
-
在集群中每个所选节点的同一端口上公开该服务。
NodePort
使端口可从集群外部访问,只要节点本身可以被客户端外部访问。 - LoadBalancer
- 在当前云中创建外部负载均衡器(如果支持),并为该服务分配固定的外部 IP 地址。
对于内部集群,您可以通过部署 MetalLB Operator 来配置负载均衡服务。
7.5.4.2. 创建服务
您可以使用 OpenShift Container Platform web 控制台、virtctl
命令行工具或 YAML 文件创建服务来公开虚拟机(VM)。
7.5.4.2.1. 使用 Web 控制台启用负载均衡器服务创建
您可以使用 OpenShift Container Platform web 控制台为虚拟机(VM)创建负载均衡器服务。
先决条件
- 已为集群配置负载均衡器。
-
以具有
cluster-admin
角色的用户身份登录。
流程
-
进入到 Virtualization
Overview。 - 在 Settings 选项卡中,点 Cluster。
- 展开 General settings 和 SSH 配置。
- 将 SSH over LoadBalancer 服务 设置为 on。
7.5.4.2.2. 使用 Web 控制台创建服务
您可以使用 OpenShift Container Platform web 控制台为虚拟机(VM)创建节点端口或负载均衡器服务。
先决条件
- 已将集群网络配置为支持负载均衡器或节点端口。
- 要创建负载均衡器服务,您需要已启用了创建负载均衡器服务。
流程
- 进入 VirtualMachines 并选择虚拟机来查看 VirtualMachine 详情页。
- 在 Details 选项卡中,从 SSH service type 列表中选择 SSH over LoadBalancer。
-
可选:点复制图标将
SSH
命令复制到您的剪贴板。
验证
- 检查 Details 标签页中的 Services 窗格,以查看新服务。
7.5.4.2.3. 使用 virtctl 创建服务
您可以使用 virtctl
命令行工具为虚拟机 (VM) 创建服务。
先决条件
-
已安装
virtctl
命令行工具。 - 您已将集群网络配置为支持该服务。
-
安装
virtctl
的环境具有访问虚拟机所需的集群权限。例如,运行oc login
或设置了KUBECONFIG
环境变量。
流程
运行以下命令来创建服务:
$ virtctl expose vm <vm_name> --name <service_name> --type <service_type> --port <port> 1
- 1
- 指定
ClusterIP
、NodePort
或LoadBalancer
服务类型。
Example
$ virtctl expose vm example-vm --name example-service --type NodePort --port 22
验证
运行以下命令验证服务:
$ oc get service
后续步骤
使用 virtctl
创建服务后,您必须将 special: key
添加到 VirtualMachine
清单的 spec.template.metadata.labels
小节中。请参阅使用命令行创建服务。
7.5.4.2.4. 使用命令行创建服务
您可以使用命令行创建服务并将其与虚拟机 (VM) 关联。
先决条件
- 您已将集群网络配置为支持该服务。
流程
编辑
VirtualMachine
清单,为创建服务添加标签:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm namespace: example-namespace spec: running: false template: metadata: labels: special: key 1 # ...
- 1
- 在
spec.template.metadata.labels
小节中添加special: key
。
注意虚拟机上的标签会传递到 pod。
special: key
标签必须与Service
清单的spec.selector
属性中的标签匹配。-
保存
VirtualMachine
清单文件以应用更改。 创建
Service
清单以公开虚拟机:apiVersion: v1 kind: Service metadata: name: example-service namespace: example-namespace spec: # ... selector: special: key 1 type: NodePort 2 ports: 3 protocol: TCP port: 80 targetPort: 9376 nodePort: 30000
-
保存
Service
清单文件。 运行以下命令来创建服务:
$ oc create -f example-service.yaml
- 重启虚拟机以应用更改。
验证
查询
Service
对象以验证它是否可用:$ oc get service -n example-namespace
7.5.4.3. 使用 SSH 连接到服务公开的虚拟机
您可以使用 SSH 连接到服务公开的虚拟机 (VM)。
先决条件
- 您创建了服务来公开虚拟机。
- 已安装 SSH 客户端。
- 已登陆到集群。
流程
运行以下命令来访问虚拟机:
$ ssh <user_name>@<ip_address> -p <port> 1
- 1
- 指定集群 IP 服务的集群 IP、节点端口服务的节点 IP 或负载均衡器服务的外部 IP 地址。
7.5.5. 使用二级网络进行 SSH 访问
您可以配置二级网络,将虚拟机 (VM) 附加到二级网络接口,并使用 SSH 连接到 DHCP 分配的 IP 地址。
辅助网络提供卓越的性能,因为流量不是由集群网络堆栈处理。但是,虚拟机直接公开给二级网络,不受防火墙保护。如果虚拟机被破坏,入侵者可能会获得对二级网络的访问权限。如果使用此方法,您必须在虚拟机操作系统中配置适当的安全性。
有关网络选项的更多信息,请参阅 OpenShift Virtualization 调优和扩展指南中的 Multus 和 SR-IOV 文档。
先决条件
- 已配置了一个二级网络,如 Linux 网桥或 SR-IOV。
-
为 Linux 网桥网络 或 SR-IOV Network Operator 创建网络附加定义,在创建
SriovNetwork
对象时创建了网络附加定义。
7.5.5.1. 使用 Web 控制台配置虚拟机网络接口
您可以使用 OpenShift Container Platform Web 控制台为虚拟机配置网络接口。
先决条件
- 为网络创建了网络附加定义。
流程
-
进入到 Virtualization
VirtualMachines。 - 点虚拟机查看 VirtualMachine 详情页。
- 在 Configuration 选项卡上,点 Network interfaces 选项卡。
- 点 Add network interface。
- 输入接口名称,然后从 Network 列表中选择网络附加定义。
- 点击 Save。
- 重启虚拟机以应用更改。
7.5.5.2. 使用 SSH 连接到附加到二级网络的虚拟机
您可以使用 SSH 连接到二级网络的虚拟机 (VM)。
先决条件
- 将虚拟机附加到使用 DHCP 服务器的二级网络。
- 已安装 SSH 客户端。
流程
运行以下命令来获取虚拟机的 IP 地址:
$ oc describe vm <vm_name> -n <namespace>
输出示例
# ... Interfaces: Interface Name: eth0 Ip Address: 10.244.0.37/24 Ip Addresses: 10.244.0.37/24 fe80::858:aff:fef4:25/64 Mac: 0a:58:0a:f4:00:25 Name: default # ...
运行以下命令来连接到虚拟机:
$ ssh <user_name>@<ip_address> -i <ssh_key>
Example
$ ssh cloud-user@10.244.0.37 -i ~/.ssh/id_rsa_cloud-user
您还可以使用 集群 FQDN 访问附加到二级网络接口的虚拟机。