×

您可以使用以下方法配置对虚拟机 (VM) 的 SSH 访问

  • virtctl ssh 命令

    您可以创建一个 SSH 密钥对,将公钥添加到虚拟机,然后使用私钥运行 virtctl ssh 命令连接到虚拟机。

    您可以将公钥 SSH 密钥添加到 Red Hat Enterprise Linux (RHEL) 9 虚拟机在运行时,或者在第一次引导时添加到使用 cloud-init 数据源可以配置的访客操作系统的虚拟机。

  • virtctl port-forward 命令

    您可以将 virtctl port-foward 命令添加到您的 .ssh/config 文件中,并使用 OpenSSH 连接到虚拟机。

  • 服务

    您可以创建一个服务,将服务与虚拟机关联,然后连接到服务公开的 IP 地址和端口。

  • 辅助网络

    您可以配置一个辅助网络,将虚拟机 (VM) 附加到辅助网络接口,然后连接到 DHCP 分配的 IP 地址。

访问配置注意事项

每种配置对虚拟机 (VM) 的访问方法都有其优点和局限性,具体取决于流量负载和客户端要求。

服务提供卓越的性能,建议用于从集群外部访问的应用程序。

如果内部集群网络无法处理流量负载,您可以配置辅助网络。

virtctl sshvirtctl port-forwarding 命令
  • 易于配置。

  • 推荐用于排除虚拟机故障。

  • virtctl port-forwarding 建议用于使用 Ansible 自动配置虚拟机。

  • 动态公钥 SSH 密钥可用于使用 Ansible 预配虚拟机。

  • 由于 API 服务器的负担,不建议用于高流量应用程序(如 Rsync 或远程桌面协议)。

  • API 服务器必须能够处理流量负载。

  • 客户端必须能够访问 API 服务器。

  • 客户端必须具有集群的访问凭据。

集群 IP 服务
  • 内部集群网络必须能够处理流量负载。

  • 客户端必须能够访问内部集群 IP 地址。

节点端口服务
  • 内部集群网络必须能够处理流量负载。

  • 客户端必须能够访问至少一个节点。

负载均衡器服务
  • 必须配置负载均衡器。

  • 每个节点必须能够处理一个或多个负载均衡服务的流量负载。

辅助网络
  • 性能卓越,因为流量不会经过内部集群网络。

  • 允许采用灵活的网络拓扑结构。

  • 由于虚拟机直接暴露于辅助网络,因此必须使用适当的安全配置来配置客户操作系统。如果虚拟机遭到入侵,入侵者可能会访问辅助网络。

使用 virtctl ssh

您可以将公钥添加到虚拟机 (VM),并通过运行virtctl ssh命令连接到虚拟机。

此方法配置简单。但是,不建议在高流量负载下使用,因为它会给 API 服务器带来负担。

关于静态和动态 SSH 密钥管理

您可以在首次启动时静态地或在运行时动态地将公钥添加到虚拟机 (VM)。

只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。

静态 SSH 密钥管理

您可以使用支持通过 cloud-init 数据源进行配置的客户操作系统的虚拟机 (VM) 添加静态管理的 SSH 密钥。密钥在首次启动时添加到虚拟机 (VM)。

您可以使用以下方法之一添加密钥:

  • 使用 Web 控制台或命令行在创建虚拟机时向单个虚拟机添加密钥。

  • 使用 Web 控制台向项目添加密钥。之后,该密钥将自动添加到您在此项目中创建的虚拟机。

用例
  • 作为虚拟机所有者,您可以为所有新创建的虚拟机配置单个密钥。

动态 SSH 密钥管理

您可以为安装了 Red Hat Enterprise Linux (RHEL) 9 的虚拟机启用动态 SSH 密钥管理。之后,您可以在运行时更新密钥。密钥由 QEMU 客户机代理添加,该代理与 Red Hat 启动源一起安装。

您可以出于安全原因禁用动态密钥管理。然后,虚拟机将继承其创建来源映像的密钥管理设置。

用例
  • 授予或撤销对虚拟机的访问权限:作为集群管理员,您可以通过向应用于命名空间中所有虚拟机的Secret对象添加或删除各个用户的密钥来授予或撤销远程虚拟机访问权限。

  • 用户访问:您可以将您的访问凭据添加到您创建和管理的所有虚拟机。

  • Ansible 配置

    • 作为运维团队成员,您可以创建一个包含所有用于 Ansible 配置的密钥的单个密钥。

    • 作为虚拟机所有者,您可以创建一个虚拟机并附加用于 Ansible 配置的密钥。

  • 密钥轮换

    • 作为集群管理员,您可以轮换命名空间中虚拟机使用的 Ansible 配置程序密钥。

    • 作为工作负载所有者,您可以轮换您管理的虚拟机的密钥。

静态密钥管理

使用 OpenShift Container Platform Web 控制台或命令行创建虚拟机 (VM) 时,您可以添加静态管理的公钥。密钥在虚拟机首次启动时作为 cloud-init 数据源添加。

您也可以在使用 Web 控制台创建虚拟机时向项目添加公钥。该密钥将保存为密钥,并自动添加到您创建的所有虚拟机。

如果您向项目添加密钥然后删除虚拟机,则密钥将保留,因为它是一个命名空间资源。您必须手动删除密钥。

从模板创建虚拟机时添加密钥

使用 OpenShift Container Platform Web 控制台创建虚拟机 (VM) 时,您可以添加静态管理的公钥。密钥在首次启动时作为 cloud-init 数据源添加到虚拟机。此方法不会影响 cloud-init 用户数据。

可选:您可以向项目添加密钥。之后,此密钥将自动添加到您在此项目中创建的虚拟机。

先决条件
  • 您通过运行ssh-keygen命令生成了 SSH 密钥对。

步骤
  1. 在 Web 控制台中导航到**虚拟化** → **目录**。

  2. 单击模板图块。

    客户操作系统必须支持来自 cloud-init 数据源的配置。

  3. 单击**自定义虚拟机**。

  4. 单击**下一步**。

  5. 单击**脚本**选项卡。

  6. 如果您尚未向您的项目添加公钥,请单击**授权的 SSH 密钥**旁边的编辑图标,然后选择以下选项之一:

    • **使用现有密钥**:从密钥列表中选择密钥。

    • 添加新密钥:

      1. 浏览到 SSH 密钥文件或将文件粘贴到密钥字段。

      2. 输入密钥名称。

      3. 可选:选择**自动将此密钥应用于您在此项目中创建的任何新的虚拟机**。

  7. 单击**保存**。

  8. 单击**创建虚拟机**。

    **虚拟机详细信息**页面显示虚拟机创建的进度。

验证
  • 单击**配置**选项卡上的**脚本**选项卡。

    密钥名称显示在**授权的 SSH 密钥**部分。

使用 Web 控制台从实例类型创建虚拟机时添加密钥

使用 OpenShift Container Platform Web 控制台从实例类型创建虚拟机 (VM) 时,您可以添加静态管理的 SSH 密钥。密钥在首次启动时作为 cloud-init 数据源添加到虚拟机。此方法不会影响 cloud-init 用户数据。

步骤
  1. 在 Web 控制台中,导航到**虚拟化** → **目录**。

    默认情况下打开**InstanceTypes**选项卡。

  2. 选择以下选项之一:

    • 从列表中选择合适的可引导卷。如果列表被截断,请单击**显示全部**按钮以显示整个列表。

      可引导卷表仅列出openshift-virtualization-os-images命名空间中具有instancetype.kubevirt.io/default-preference标签的卷。

      • 可选:单击星形图标将可引导卷指定为收藏夹。加星标的可引导卷将首先出现在卷列表中。

    • 单击**添加卷**以上传新卷或使用现有持久卷声明 (PVC)、卷快照或containerDisk卷。单击**保存**。

      集群中不可用的操作系统的徽标显示在列表底部。您可以点击添加卷链接添加所需操作系统的卷。

      此外,还有一个指向创建 Windows 启动源快速入门指南的链接。如果您将指针悬停在选择要从中启动的卷行旁边的问号图标上,则会在弹出窗口中显示相同的链接。

      安装环境后或环境断开连接后,要从中启动的卷列表为空。在这种情况下,将显示三个操作系统徽标:Windows、RHEL 和 Linux。您可以点击添加卷按钮添加符合您要求的新卷。

      1. 如果您尚未将公钥添加到您的项目中,请点击虚拟机详细信息部分中授权的 SSH 密钥旁边的编辑图标。

      2. 选择以下选项之一

        • **使用现有密钥**:从密钥列表中选择密钥。

        • 添加新的:请按照以下步骤操作

          1. 浏览到公钥文件或将文件粘贴到密钥字段中。

          2. 输入密钥名称。

          3. 可选:选择**自动将此密钥应用于您在此项目中创建的任何新的虚拟机**。

      3. 单击**保存**。

  3. 可选:如果您正在创建 Windows 虚拟机,您可以挂载 Windows 驱动器磁盘

    1. 点击自定义虚拟机按钮。

    2. 虚拟机详细信息页面上,点击存储

    3. 选中挂载 Windows 驱动器磁盘复选框。

  4. 可选:点击查看 YAML & CLI 查看 YAML 文件。点击CLI 查看 CLI 命令。您还可以下载或复制 YAML 文件内容或 CLI 命令。

  5. 单击**创建虚拟机**。

虚拟机创建后,您可以在虚拟机详细信息页面上监控其状态。

使用命令行创建虚拟机时添加密钥

使用命令行创建虚拟机 (VM) 时,您可以添加静态管理的公钥 SSH 密钥。密钥在第一次启动时添加到虚拟机。

密钥作为 cloud-init 数据源添加到虚拟机。此方法将访问凭据与 cloud-init 用户数据中的应用程序数据分开。此方法不会影响 cloud-init 用户数据。

先决条件
  • 您通过运行ssh-keygen命令生成了 SSH 密钥对。

步骤
  1. 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)
    1 指定cloudInitNoCloud数据源。
    2 指定Secret对象名称。
    3 粘贴公钥 SSH 密钥。
  2. 通过运行以下命令创建VirtualMachineSecret对象

    $ oc create -f <manifest_file>.yaml
  3. 运行以下命令启动虚拟机

    $ 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
    # ...

动态密钥管理

您可以使用 OpenShift Container Platform Web 控制台或命令行启用虚拟机 (VM) 的动态密钥注入。然后,您可以运行时更新密钥。

只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。

如果您禁用动态密钥注入,则虚拟机将继承创建它的镜像的密钥管理方法。

从模板创建虚拟机时启用动态密钥注入

您可以使用 OpenShift Container Platform Web 控制台从模板创建虚拟机 (VM) 时启用动态公钥 SSH 密钥注入。然后,您可以运行时更新密钥。

只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。

密钥由 QEMU 访客代理添加到虚拟机,该代理已安装在 RHEL 9 中。

先决条件
  • 您通过运行ssh-keygen命令生成了 SSH 密钥对。

步骤
  1. 在 Web 控制台中导航到**虚拟化** → **目录**。

  2. 点击Red Hat Enterprise Linux 9 虚拟机磁贴。

  3. 单击**自定义虚拟机**。

  4. 单击**下一步**。

  5. 单击**脚本**选项卡。

  6. 如果您尚未向您的项目添加公钥,请单击**授权的 SSH 密钥**旁边的编辑图标,然后选择以下选项之一:

    • **使用现有密钥**:从密钥列表中选择密钥。

    • 添加新密钥:

      1. 浏览到 SSH 密钥文件或将文件粘贴到密钥字段。

      2. 输入密钥名称。

      3. 可选:选择**自动将此密钥应用于您在此项目中创建的任何新的虚拟机**。

  7. 动态 SSH 密钥注入设置为开启。

  8. 单击**保存**。

  9. 单击**创建虚拟机**。

    **虚拟机详细信息**页面显示虚拟机创建的进度。

验证
  • 单击**配置**选项卡上的**脚本**选项卡。

    密钥名称显示在**授权的 SSH 密钥**部分。

使用 Web 控制台从实例类型创建虚拟机时启用动态密钥注入

您可以使用 OpenShift Container Platform Web 控制台从实例类型创建虚拟机 (VM) 时启用动态 SSH 密钥注入。然后,您可以运行时添加或撤销密钥。

只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。

密钥由 QEMU 访客代理添加到虚拟机,该代理已安装在 RHEL 9 中。

步骤
  1. 在 Web 控制台中,导航到**虚拟化** → **目录**。

    默认情况下打开**InstanceTypes**选项卡。

  2. 选择以下选项之一:

    • 从列表中选择合适的可引导卷。如果列表被截断,请单击**显示全部**按钮以显示整个列表。

      可引导卷表仅列出openshift-virtualization-os-images命名空间中具有instancetype.kubevirt.io/default-preference标签的卷。

      • 可选:单击星形图标将可引导卷指定为收藏夹。加星标的可引导卷将首先出现在卷列表中。

    • 单击**添加卷**以上传新卷或使用现有持久卷声明 (PVC)、卷快照或containerDisk卷。单击**保存**。

      集群中不可用的操作系统的徽标显示在列表底部。您可以点击添加卷链接添加所需操作系统的卷。

      此外,还有一个指向创建 Windows 启动源快速入门指南的链接。如果您将指针悬停在选择要从中启动的卷行旁边的问号图标上,则会在弹出窗口中显示相同的链接。

      安装环境后或环境断开连接后,要从中启动的卷列表为空。在这种情况下,将显示三个操作系统徽标:Windows、RHEL 和 Linux。您可以点击添加卷按钮添加符合您要求的新卷。

  3. 点击Red Hat Enterprise Linux 9 虚拟机磁贴。

    1. 如果您尚未将公钥添加到您的项目中,请点击虚拟机详细信息部分中授权的 SSH 密钥旁边的编辑图标。

    2. 选择以下选项之一

      • **使用现有密钥**:从密钥列表中选择密钥。

      • 添加新的:请按照以下步骤操作

        1. 浏览到公钥文件或将文件粘贴到密钥字段中。

        2. 输入密钥名称。

        3. 可选:选择**自动将此密钥应用于您在此项目中创建的任何新的虚拟机**。

    3. 单击**保存**。

  4. 虚拟机详细信息部分中将动态 SSH 密钥注入设置为开启。

  5. 可选:如果您正在创建 Windows 虚拟机,您可以挂载 Windows 驱动器磁盘

    1. 点击自定义虚拟机按钮。

    2. 虚拟机详细信息页面上,点击存储

    3. 选中挂载 Windows 驱动器磁盘复选框。

  6. 可选:点击查看 YAML & CLI 查看 YAML 文件。点击CLI 查看 CLI 命令。您还可以下载或复制 YAML 文件内容或 CLI 命令。

  7. 单击**创建虚拟机**。

虚拟机创建后,您可以在虚拟机详细信息页面上监控其状态。

使用 Web 控制台启用动态 SSH 密钥注入

您可以使用 OpenShift Container Platform Web 控制台启用虚拟机 (VM) 的动态密钥注入。然后,您可以运行时更新公钥 SSH 密钥。

密钥由 QEMU 访客代理添加到虚拟机,该代理已安装在 Red Hat Enterprise Linux (RHEL) 9 中。

先决条件
  • 访客操作系统为 RHEL 9。

步骤
  1. 在 Web 控制台中导航到虚拟化虚拟机

  2. 选择一个虚拟机以打开虚拟机详细信息页面。

  3. 配置选项卡上,点击脚本

  4. 如果您尚未向您的项目添加公钥,请单击**授权的 SSH 密钥**旁边的编辑图标,然后选择以下选项之一:

    • **使用现有密钥**:从密钥列表中选择密钥。

    • 添加新密钥:

      1. 浏览到 SSH 密钥文件或将文件粘贴到密钥字段。

      2. 输入密钥名称。

      3. 可选:选择**自动将此密钥应用于您在此项目中创建的任何新的虚拟机**。

  5. 动态 SSH 密钥注入设置为开启。

  6. 单击**保存**。

使用命令行启用动态密钥注入

您可以使用命令行启用虚拟机 (VM) 的动态密钥注入。然后,您可以运行时更新公钥 SSH 密钥。

只有 Red Hat Enterprise Linux (RHEL) 9 支持动态密钥注入。

密钥由 QEMU 访客代理添加到虚拟机,该代理会随 RHEL 9 自动安装。

先决条件
  • 您通过运行ssh-keygen命令生成了 SSH 密钥对。

步骤
  1. 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)
    1 指定cloudInitNoCloud数据源。
    2 指定Secret对象名称。
    3 粘贴公钥 SSH 密钥。
  2. 通过运行以下命令创建VirtualMachineSecret对象

    $ oc create -f <manifest_file>.yaml
  3. 运行以下命令启动虚拟机

    $ 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
    # ...

使用 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。如果您将密钥保存在其他位置,则必须指定路径。
    示例
    $ virtctl -n my-namespace ssh cloud-user@example-vm -i my-key

您可以通过从虚拟机页面上的虚拟机旁边的选项kebab菜单中选择复制 SSH 命令来复制 Web 控制台中的virtctl ssh命令。

使用 virtctl port-forward 命令

您可以使用本地 OpenSSH 客户端和virtctl port-forward命令连接到正在运行的虚拟机 (VM)。您可以将此方法与 Ansible 一起使用来自动配置虚拟机。

此方法推荐用于低流量应用程序,因为端口转发流量通过控制平面发送。此方法不推荐用于高流量应用程序(如 Rsync 或远程桌面协议),因为它会给 API 服务器带来沉重的负担。

先决条件
  • 您已安装virtctl客户端。

  • 您要访问的虚拟机正在运行。

  • 安装virtctl工具的环境具有访问虚拟机所需的集群权限。例如,您运行了oc login或设置了KUBECONFIG环境变量。

步骤
  1. 将以下文本添加到客户端计算机上的~/.ssh/config文件中

    Host vm/*
      ProxyCommand virtctl port-forward --stdio=true %h %p
  2. 运行以下命令连接到虚拟机

    $ ssh <user>@vm/<vm_name>.<namespace>

使用服务进行 SSH 访问

您可以为虚拟机 (VM) 创建服务并连接到服务公开的 IP 地址和端口。

服务提供卓越的性能,并推荐用于从集群外部或集群内部访问的应用程序。入口流量受防火墙保护。

如果集群网络无法处理流量负载,请考虑使用辅助网络进行虚拟机访问。

关于服务

Kubernetes 服务为运行在一组 Pod 上的应用程序向客户端公开网络访问权限。服务提供抽象、负载均衡,并且在`NodePort`和`LoadBalancer`类型的情况下,还可暴露给外部世界。

ClusterIP

在内部 IP 地址和 DNS 名称上公开集群内其他应用程序的服务。单个服务可以映射到多个虚拟机。当客户端尝试连接到服务时,客户端的请求会在可用的后端之间进行负载均衡。`ClusterIP`是默认的服务类型。

NodePort

在集群中每个选定节点的同一端口上公开服务。`NodePort`使客户端可以从集群外部访问端口,只要节点本身可被客户端外部访问即可。

LoadBalancer

在当前云中创建外部负载均衡器(如果支持)并将固定的外部 IP 地址分配给服务。

对于本地集群,您可以通过部署 MetalLB 运算符来配置负载均衡服务。

创建服务

您可以使用 OpenShift Container Platform Web 控制台、`virtctl` 命令行工具或 YAML 文件来创建服务以公开虚拟机 (VM)。

使用 Web 控制台启用负载均衡器服务创建

您可以使用 OpenShift Container Platform Web 控制台来启用虚拟机 (VM) 的负载均衡器服务的创建。

先决条件
  • 您已为集群配置了负载均衡器。

  • 您已以具有`cluster-admin`角色的用户身份登录。

  • 您已为网络创建了网络附件定义。

步骤
  1. 导航到**虚拟化** → **概述**。

  2. 在**设置**选项卡上,单击**集群**。

  3. 展开**常规设置**和**SSH 配置**。

  4. 将**通过 LoadBalancer 服务使用 SSH** 设置为开启。

使用 Web 控制台创建服务

您可以使用 OpenShift Container Platform Web 控制台为虚拟机 (VM) 创建 NodePort 或 LoadBalancer 服务。

先决条件
  • 您已将集群网络配置为支持负载均衡器或 NodePort。

  • 要创建负载均衡器服务,您已启用负载均衡器服务的创建。

步骤
  1. 导航到**虚拟机**并选择一台虚拟机以查看**虚拟机详细信息**页面。

  2. 在**详细信息**选项卡上,从**SSH 服务类型**列表中选择**通过 LoadBalancer 使用 SSH**。

  3. 可选:单击复制图标将`SSH`命令复制到剪贴板。

验证
  • 检查**详细信息**选项卡上的**服务**窗格以查看新服务。

使用 virtctl 创建服务

您可以使用`virtctl`命令行工具为虚拟机 (VM) 创建服务。

先决条件
  • 您已安装virtctl命令行工具。

  • 您已将集群网络配置为支持该服务。

  • 安装`virtctl`的环境具有访问 VM 所需的集群权限。例如,您运行了`oc login`或设置了`KUBECONFIG`环境变量。

步骤
  • 运行以下命令创建服务

    $ virtctl expose vm <vm_name> --name <service_name> --type <service_type> --port <port> (1)
    1 指定`ClusterIP`、`NodePort`或`LoadBalancer`服务类型。
    示例
    $ virtctl expose vm example-vm --name example-service --type NodePort --port 22
验证
  • 运行以下命令验证服务

    $ oc get service
后续步骤

使用`virtctl`创建服务后,必须将`special: key`添加到`VirtualMachine`清单的`spec.template.metadata.labels`部分中。请参阅使用命令行创建服务

使用命令行创建服务

您可以使用命令行创建服务并将其与虚拟机 (VM) 关联。

先决条件
  • 您已将集群网络配置为支持该服务。

步骤
  1. 编辑`VirtualMachine`清单以添加服务创建的标签

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: example-namespace
    spec:
      running: false
      template:
        metadata:
          labels:
            special: key (1)
    # ...
    1 将`special: key`添加到`spec.template.metadata.labels`部分中。

    虚拟机上的标签会传递到 Pod。`special: key`标签必须与`Service`清单的`spec.selector`属性中的标签匹配。

  2. 保存`VirtualMachine`清单文件以应用您的更改。

  3. 创建一个`Service`清单以公开 VM

    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
    1 指定您添加到`VirtualMachine`清单的`spec.template.metadata.labels`部分中的标签。
    2 指定`ClusterIP`、`NodePort`或`LoadBalancer`。
    3 指定要从虚拟机公开的一组网络端口和协议。
  4. 保存`Service`清单文件。

  5. 运行以下命令创建服务

    $ oc create -f example-service.yaml
  6. 重新启动 VM 以应用更改。

验证
  • 查询`Service`对象以验证其可用性

    $ oc get service -n example-namespace

使用 SSH 连接到由服务公开的 VM

您可以使用 SSH 连接到由服务公开的虚拟机 (VM)。

先决条件
  • 您已创建服务以公开 VM。

  • 您已安装 SSH 客户端。

  • 您已登录到集群。

步骤
  • 运行以下命令以访问 VM

    $ ssh <user_name>@<ip_address> -p <port> (1)
    1 为 ClusterIP 服务指定集群 IP,为 NodePort 服务指定节点 IP,或为 LoadBalancer 服务指定外部 IP 地址。

使用辅助网络进行 SSH 访问

您可以配置辅助网络,将虚拟机 (VM) 附加到辅助网络接口,并使用 SSH 连接到 DHCP 分配的 IP 地址。

辅助网络提供卓越的性能,因为流量不会由集群网络堆栈处理。但是,VM 直接暴露于辅助网络,并且不受防火墙保护。如果 VM 受损,入侵者可能会访问辅助网络。如果您使用此方法,则必须在 VM 的操作系统中配置适当的安全措施。

有关网络选项的更多信息,请参阅MultusSR-IOV文档,这些文档位于OpenShift 虚拟化调整和扩展指南中。

先决条件

使用 Web 控制台配置 VM 网络接口

您可以使用 OpenShift Container Platform Web 控制台配置虚拟机 (VM) 的网络接口。

先决条件
  • 您已为网络创建了网络附件定义。

步骤
  1. 导航到**虚拟化** → **虚拟机**。

  2. 单击 VM 以查看**虚拟机详细信息**页面。

  3. 在**配置**选项卡上,单击**网络接口**选项卡。

  4. 单击**添加网络接口**。

  5. 输入接口名称并从**网络**列表中选择网络附件定义。

  6. 单击**保存**。

  7. 重新启动 VM 以应用更改。

使用 SSH 连接到附加到辅助网络的 VM

您可以使用 SSH 连接到附加到辅助网络的虚拟机 (VM)。

先决条件
  • 您已将 VM 附加到带有 DHCP 服务器的辅助网络。

  • 您已安装 SSH 客户端。

步骤
  1. 运行以下命令获取 VM 的 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
    # ...
  2. 运行以下命令连接到虚拟机

    $ ssh <user_name>@<ip_address> -i <ssh_key>
    示例
    $ ssh [email protected] -i ~/.ssh/id_rsa_cloud-user