虚拟机控制台服务简介

虚拟机(VM)控制台服务提供对运维方 Nexus 实例中托管的 VM 的管理访问权限。 它使用 Azure 专用链接服务(PLS)在 Azure 专用网络上提供网络连接。 VM 控制台服务是一种安全且专用的方式,无需将其公开到公共 Internet 即可访问 VM。

VM 控制台服务的示意图。

有关支持与操作员 Nexus 实例建立专用连接的网络资源的详细信息,请参阅 Azure 专用链接简介

本文档提供了有关如何使用 VM 控制台服务在操作员 Nexus 实例中与虚拟机建立会话的引导说明。

本指南可帮助你:

  1. 在网络与群集管理器的专用网络之间建立安全专用网络连接。
  2. 使用 az networkcloud virtualmachine console CLI 命令在工作负荷/租户资源组中创建控制台资源。
  3. 启动 SSH 会话以连接到虚拟机的控制台。

注释

为了避免将 --subscription 参数传递给每个 Azure CLI 命令,请执行以下命令:

  az account set --subscription "your-subscription-ID"

在您开始之前

  1. 安装最新版本的相应 CLI 扩展

设置变量

为了帮助设置环境以访问虚拟机,请在整个本指南中定义各种命令使用的这些环境变量。

注释

这些环境变量值不反映实际部署,因此用户必须更改它们以匹配其环境。

应注意,以下部分中的第一组变量适用于 群集管理器而不是群集 。 可以使用命令 az networkcloud virtualmachine show --name <virtual machine name> --resource-group <virtual machine's resource group> --query "consoleExtendedLocation" | jq -r '.consoleExtendedLocation.name'找到CM_EXTENDED_LOCATION值。

    # CLUSTER_MANAGER_RESOURCE_GROUP: Cluster Manager resource group name
    export CLUSTER_MANAGER_RESOURCE_GROUP="my-contoso-console-rg"

    # VIRTUAL_MACHINE_NAME: Virtual Machine name you want to access through VM Console service
    export VIRTUAL_MACHINE_NAME="my-undercloud-vm"
    # VIRTUAL_MACHINE_RG: Resource group name where the Virtual Machine is located
    export VIRTUAL_MACHINE_RG="my-contoso-console-rg"
    # CM_EXTENDED_LOCATION: Cluster Manager Extended Location, can be retrieved but you will need access rights to execute certain Azure CLI commands
    export CM_EXTENDED_LOCATION=$(az networkcloud virtualmachine show --name ${VIRTUAL_MACHINE_NAME} --resource-group ${VIRTUAL_MACHINE_RG} --query "consoleExtendedLocation.name" -o tsv)

    # CONSOLE_PUBLIC_KEY: Public Key matching Private Key to be used when establish `ssh` session, e.g., `ssh -i $HOME/.ssh/id-rsa`
    export CONSOLE_PUBLIC_KEY="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD... user@hostname"
    # CONSOLE_EXPIRATION_TIME: Expiration date and time (RFC3339 format) for any `ssh` session with a virtual machine. 
    export CONSOLE_EXPIRATION_TIME="2023-06-01T01:27:03.008Z"

    # PRIVATE_ENDPOINT_RG: Resource group name that Private Endpoint will be created on
    export PRIVATE_ENDPOINT_RG="my-work-env-rg"
    # PRIVATE_ENDPOINT_NAME: Private Endpoint's name you choose
    export PRIVATE_ENDPOINT_NAME="my-work-env-ple"
    # PRIVATE_ENDPOINT_CONNECTION_NAME: PLE/PLS connection name you choose
    export PRIVATE_ENDPOINT_CONNECTION_NAME="my-contoso-ple-pls-connection"
    # PRIVATE_ENDPOINT_REGION: Location where Private Endpoint will be created
    export PRIVATE_ENDPOINT_REGION="eastus"
    # PRIVATE_ENDPOINT_VNET: Virtual Network to be used by the Private Endpoint
    export PRIVATE_ENDPOINT_VNET="my-work-env-ple-vnet"
    # PRIVATE_ENDPOINT_SUBNET: Subnetwork to be used by the Private Endpoint
    export PRIVATE_ENDPOINT_SUBNET="my-work-env-ple-subnet"

重要

设置 CONSOLE_PUBLIC_KEY 环境变量时,请确保正确引用 SSH 公钥值,因为它包含空格。 例如:

export CONSOLE_PUBLIC_KEY="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... user@hostname"

SSH 公钥应该是完整的密钥字符串,包括密钥类型(ssh-rsa、ssh-ed25519 等)、密钥数据以及注释(可选)。

创建控制台资源

控制台资源提供有关 Nexus VM 的信息。 它提供 VM 名称、公钥 SSH 密钥、SSH 会话的到期日期等。

本部分提供分步指南,帮助你使用 Azure CLI 命令创建控制台资源。

VM 控制台资源示意图。

  1. 若要在群集管理器中创建 控制台 资源,需要收集一些信息,例如资源组(CLUSTER_MANAGER_RESOURCE_GROUP)和自定义位置(CM_EXTENDED_LOCATION)。 您需要提供资源组,但如果拥有权限执行以下命令,则可以检索自定义位置:

    export cluster_manager_resource_id=$(az resource list -g ${CLUSTER_MANAGER_RESOURCE_GROUP} --query "[?type=='Microsoft.NetworkCloud/clusterManagers'].id" --output tsv)
    export CM_EXTENDED_LOCATION=$(az resource show --ids $cluster_manager_resource_id --query "properties.managerExtendedLocation.name" | tr -d '"')
    
  2. 在与 VM 建立 SSH 会话之前,首先要在群集管理器中创建 控制台 资源。

    az networkcloud virtualmachine console create \
        --virtual-machine-name "${VIRTUAL_MACHINE_NAME}" \
        --resource-group "${CLUSTER_MANAGER_RESOURCE_GROUP}" \
        --extended-location name="${CM_EXTENDED_LOCATION}" type="CustomLocation" \
        --enabled True \
        --ssh-public-key key-data="${CONSOLE_PUBLIC_KEY}" \
        [--expiration "${CONSOLE_EXPIRATION_TIME}"]
    

    如果省略参数 --expiration ,则创建控制台资源后,过期时间将默认为一天。 另请注意, expiration 日期和时间格式 必须 遵循RFC3339(例如 2024-10-04T14:48:00Z),否则控制台资源的创建将失败。

    注释

    有关此命令的完整概要,请调用 az networkcloud console create --help

  3. 成功创建控制台资源后,检索创建专用链接终结点所需的 专用链接服务 标识符(PLE)

    export pls_resourceid=$(az networkcloud virtualmachine console show \
        --virtual-machine-name "${VIRTUAL_MACHINE_NAME}" \
        --resource-group "${CLUSTER_MANAGER_RESOURCE_GROUP}" \
        --query "privateLinkServiceId" -o tsv)
    
  4. 此外,检索 VM 访问 ID。 您必须使用此唯一标识符作为userssh会话中的标识。

    virtual_machine_access_id=$(az networkcloud virtualmachine console show \
        --virtual-machine-name "${VIRTUAL_MACHINE_NAME}" \
        --resource-group "${CLUSTER_MANAGER_RESOURCE_GROUP}" \
        --query "virtualMachineAccessId" -o tsv)
    

注释

有关此命令的完整概要,请调用 az networkcloud virtualmachine console show --help

建立专用网络连接

若要与虚拟机建立安全会话,需要在网络与群集管理器的专用网络之间建立专用网络连接。

此专用网络依赖于 Azure 专用链接终结点(PLE)和 Azure 专用链接服务(PLS)。

群集管理器会自动创建 PLS,以便可以在网络与群集管理器的专用网络之间建立专用网络连接。

本部分提供了一个分步指南,可帮助你建立专用网络连接。

专用链接网络示意图。

  1. 创建 PLE,以便在网络与群集管理器的专用网络之间建立专用和安全连接。 您需要在创建控制台资源中获取的 PLS 资源 ID。

     az network private-endpoint create \
         --connection-name "${PRIVATE_ENDPOINT_CONNECTION_NAME}" \
         --name "${PRIVATE_ENDPOINT_NAME}" \
         --private-connection-resource-id "${pls_resourceid}" \
         --resource-group "${PRIVATE_ENDPOINT_RG}" \
         --vnet-name "${PRIVATE_ENDPOINT_VNET}" \
         --subnet "${PRIVATE_ENDPOINT_SUBNET}" \
         --manual-request false
    

注释

每个群集管理器只需要一个专用终结点。

  1. 检索分配给 PLE 的专用 IP 地址,在建立会话时需要该 ssh 地址。

     export ple_interface_id=$(az network private-endpoint list --resource-group ${PRIVATE_ENDPOINT_RG} --query "[0].networkInterfaces[0].id" -o tsv)
    
     export sshmux_ple_ip=$(az network nic show --ids $ple_interface_id --query 'ipConfigurations[0].privateIPAddress' -o tsv)
    
     echo "sshmux_ple_ip: ${sshmux_ple_ip}"
    

使用虚拟机建立 SSH 会话

此时,你有virtual_machine_access_idsshmux_ple_ip。 此输入是与 VM 建立会话所需的信息。

VM 控制台服务是将 ssh 会话“中继”到 Nexus VM 的服务器。 间接的 sshmux_ple_ip 调用了虚拟机控制台服务,而 virtual_machine_access_id 则是虚拟机的标识符。

重要

VM 控制台服务侦听端口 2222,因此 必须在 命令中 ssh 指定此端口号。

   ssh [-i path-to-private-SSH-key] -p 2222 $virtual_machine_access_id@$sshmux_ple_ip

VM 控制台 SSH 会话示意图。

VM 控制台服务旨在 允许每个虚拟机一个会话。 成功与 VM 建立另一个会话的人将关闭现有会话。

重要

用于对会话进行身份验证的专用 SSH 密钥(默认值: $HOME/.ssh/id_rsa)必须与创建控制台资源时作为参数传递的公钥相匹配。

更新控制台资源

可以通过更新会话过期日期/时间以及创建会话时使用的公用 SSH 密钥来禁用 VM 的会话。

az networkcloud virtualmachine console update \
    --virtual-machine-name "${VIRTUAL_MACHINE_NAME}" \
    --resource-group "${VM_RESOURCE_GROUP}" \
    [--enabled True | False] \
    [--ssh-public-key key-data="${CONSOLE_PUBLIC_KEY}"] \
    [--expiration "${CONSOLE_EXPIRATION_TIME}"]

如果要禁用对 VM 的访问,则需要使用参数 enabled False更新控制台资源。 此更新将关闭任何现有会话并限制任何以后的会话。

注释

在创建与 VM 的会话之前, 必须将 相应的控制台资源设置为 --enabled True

当控制台 --expiration 时间过期时,它会关闭与控制台资源对应的任何会话。 需要使用将来的值更新过期时间,以便可以建立新会话。

更新控制台的公共 SSH 密钥时,VM 控制台服务将关闭所有活动会话。 你提供一个新的私钥来创建新会话。

清理(可选)

若要清理 VM 控制台环境设置,需要删除控制台资源和专用链接终结点。

  1. 删除控制台资源

     az networkcloud virtualmachine console delete \
         --virtual-machine-name "${VIRTUAL_MACHINE_NAME}" \
         --resource-group "${VM_RESOURCE_GROUP}"
    
  2. 删除私有链接终结点

    az network private-endpoint delete \
    --name "${PRIVATE_ENDPOINT_NAME}" \
    --resource-group "${PRIVATE_ENDPOINT_RG}"