你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

虚拟机控制台服务简介

虚拟机(VM)控制台服务提供对操作员 Nexus 实例中托管的 VM 的托管访问权限。 它依赖于Azure 专用链接服务(PLS)在用户的网络与 Azure 操作员 Nexus 群集管理器的专用网络之间建立专用网络连接。

Diagram of VM Console service.

有关支持与操作员 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 扩展

设置变量

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

注意

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

应注意,以下部分中的第一组变量适用于 群集管理器 而不是群集。

    # CM_HOSTED_RESOURCES_RESOURCE_GROUP: Cluster Manager resource group name
    export CM_HOSTED_RESOURCES_RESOURCE_GROUP="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="/subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.ExtendedLocation/customLocations/clusterManagerExtendedLocationName"

    # VIRTUAL_MACHINE_NAME: Virtual Machine name you want to access through VM Console service
    export VIRTUAL_MACHINE_NAME="my-undercloud-vm"
    # 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="xxxx-xxxx-xxxxxx-xxxx"
    # 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"

创建控制台资源

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

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

Diagram of VM Console Resource.

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

    export cluster_manager_resource_id=$(az resource list -g ${CM_HOSTED_RESOURCES_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 "${CM_HOSTED_RESOURCES_RESOURCE_GROUP}" \
        --extended-location name="${CM_EXTENDED_LOCATION}" type="CustomLocation" \
        --enabled True \
        --key-data "${CONSOLE_PUBLIC_KEY}" \
        [--expiration "${CONSOLE_EXPIRATION_TIME}"]
    

    如果省略参数 --expiration ,则创建控制台资源后,过期时间将默认为一天。 另请注意,日期和时间 expiration 格式 必须 符合RFC3339否则创建控制台资源会失败。

    注意

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

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

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

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

注意

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

建立专用网络连接性

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

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

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

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

Diagram of Private Link networking.

  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_id和 。sshmux_ple_ip 此输入是与 VM 建立会话所需的信息。

VM 控制台服务是将 ssh 会话“中继”到指定 VM 的服务器。 间接 sshmux_ple_ip 引用 VM 控制台服务和 virtual_machine_access_id VM 的标识符。

重要

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

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

Diagram of VM Console SSH Session.

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

重要

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

更新控制台资源

可以通过更新到期日期/时间和/或更新与 VM 创建会话时使用的公钥来禁用给定 VM 的会话。

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

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

注意

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

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

更新控制台的公共 SSH 密钥时,VM 控制台服务会关闭控制台资源引用的任何活动会话。 建立新会话时,必须提供匹配的专用 SSH 密钥与新的公钥匹配。

清理(可选)

若要清理 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}-ple \
    --resource-group ${PRIVATE_ENDPOINT_NAME}-rg