×

您可以使用以下方法配置对虚拟机 (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 预配虚拟机。

  • 不建议用于高流量应用程序(如 Rsync 或远程桌面协议),因为这会给 API 服务器带来负担。

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

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

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

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

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

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

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

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

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

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

  • 允许灵活的网络拓扑方法。

  • 访客操作系统必须配置适当的安全性,因为虚拟机直接暴露于辅助网络。如果虚拟机受到攻击,入侵者可能会访问辅助网络。

使用 virtctl ssh

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

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

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

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

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

静态 SSH 密钥管理

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

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

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

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

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

动态 SSH 密钥管理

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

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

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

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

  • Ansible 配置

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

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

  • 密钥轮换

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

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

静态密钥管理

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

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

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

从模板创建 VM 时添加密钥

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

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

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

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

  2. 单击模板磁贴。

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

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

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

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

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

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

    • 添加新的:

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

      2. 输入密钥名称。

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

  7. 单击**保存**。

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

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

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

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

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

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

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

    默认情况下打开**实例类型**选项卡。

  2. 选择以下选项之一:

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

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

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

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

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

      此外,还有一个指向**创建 Windows 启动源**快速入门指南的链接。如果您将指针悬停在“从以下卷启动”行的问号图标上,则会出现相同的链接。

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

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

      2. 选择以下选项之一:

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

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

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

          2. 输入密钥名称。

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

      3. 单击**保存**。

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

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

    2. 在**虚拟机详细信息**页面上,单击**存储**。

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

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

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

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

使用命令行创建 VM 时添加密钥

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

密钥作为 cloud-init 数据源添加到虚拟机 (VM)。此方法将访问凭据与 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
    # ...

动态密钥管理

您可以使用 Red Hat OpenShift Service on AWS Web 控制台或命令行,为虚拟机 (VM) 启用动态密钥注入。然后,您可以随时更新密钥。

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

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

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

您可以使用 Red Hat OpenShift Service on AWS Web 控制台,在从模板创建虚拟机 (VM) 时启用动态公钥 SSH 密钥注入。然后,您可以随时更新密钥。

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

密钥由安装了 RHEL 9 的 QEMU 访客代理添加到虚拟机。

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

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

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

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

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

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

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

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

    • 添加新的:

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

      2. 输入密钥名称。

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

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

  8. 单击**保存**。

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

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

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

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

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

您可以使用 Red Hat OpenShift Service on AWS Web 控制台,在从实例类型创建虚拟机 (VM) 时启用动态 SSH 密钥注入。然后,您可以随时添加或撤销密钥。

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

密钥由安装了 RHEL 9 的 QEMU 访客代理添加到虚拟机。

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

    默认情况下打开**实例类型**选项卡。

  2. 选择以下选项之一:

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

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

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

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

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

      此外,还有一个指向**创建 Windows 启动源**快速入门指南的链接。如果您将指针悬停在“从以下卷启动”行的问号图标上,则会出现相同的链接。

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

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

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

    2. 选择以下选项之一:

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

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

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

        2. 输入密钥名称。

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

    3. 单击**保存**。

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

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

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

    2. 在**虚拟机详细信息**页面上,单击**存储**。

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

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

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

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

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

您可以使用 Red Hat OpenShift Service on AWS Web 控制台,为虚拟机 (VM) 启用动态密钥注入。然后,您可以随时更新公钥 SSH 密钥。

密钥由安装了 Red Hat Enterprise Linux (RHEL) 9 的 QEMU 访客代理添加到虚拟机。

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

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

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

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

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

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

    • 添加新的:

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

      2. 输入密钥名称。

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

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

  6. 单击**保存**。

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

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

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

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

先决条件
  • 您通过运行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

您可以通过在 Web 控制台中选择虚拟机旁边的**虚拟机**页面上的选项kebab菜单中的**复制 SSH 命令**来复制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 上的应用程序的网络访问。服务提供抽象、负载平衡,并且在NodePortLoadBalancer类型的情况下,还公开到外部世界。

ClusterIP

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

NodePort

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

LoadBalancer

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

创建服务

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

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

您可以使用 Red Hat OpenShift Service on AWS Web 控制台启用为虚拟机 (VM) 创建负载均衡器服务。

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

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

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

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

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

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

  4. 将**通过负载均衡器服务的 SSH** 设置为开启。

使用 Web 控制台创建服务

您可以使用 AWS 上的 Red Hat OpenShift 服务 Web 控制台为虚拟机 (VM) 创建节点端口或负载均衡器服务。

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

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

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

  2. 在**详情**选项卡上,从**SSH 服务类型**列表中选择**通过负载均衡器的 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 指定ClusterIPNodePortLoadBalancer服务类型。
    示例
    $ 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 指定ClusterIPNodePortLoadBalancer
    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 为集群 IP 服务指定集群 IP,为节点端口服务指定节点 IP,或为负载均衡器服务指定外部 IP 地址。

使用辅助网络进行 SSH 访问

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

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

请参阅MultusSR-IOV文档(位于OpenShift 虚拟化调整和扩展指南)以获取有关网络选项的更多信息。

先决条件

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

您可以使用 AWS 上的 Red Hat OpenShift 服务 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