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

虚拟机控制台服务简介

虚拟机 (VM) 控制台服务提供对运营商关系实例中托管的 VM 的托管访问权限。 它使用 Azure 专用链接服务 (PLS) 在 Azure 专用网络上提供网络连接。 VM 控制台服务提供了一种安全且私密的 VM 访问方式,让你无需将 VM 公开到公共 Internet 即可进行访问。

VM 控制台服务的示意图。

有关支持与运营商关系实例建立专用连接的网络资源的详细信息,请参阅 Azure 专用链接简介

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

本指南可帮助你:

  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 值。

    # CM_HOSTED_RESOURCES_RESOURCE_GROUP: Cluster Manager resource group name
    export CM_HOSTED_RESOURCES_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"
    # 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" | jq -r '.consoleExtendedLocation.name')

    # 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 密钥、SSH 会话的到期日期等。

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

VM 控制台资源的示意图。

  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(例如 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 "${CM_HOSTED_RESOURCES_RESOURCE_GROUP}" \
        --query "privateLinkServiceId")
    
  4. 此外,还可检索 VM 访问 ID。 必须将此唯一标识符用作 ssh 会话的 user

    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,以便你可以在你的网络与群集管理器的专用网络之间建立专用网络连接。

本部分提供分步指南,旨在帮助你建立专用网络连接。

专用链接网络的示意图。

  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 控制台服务是将会话“中继”到关系 VM 的 ssh 服务器。 sshmux_ple_ip 将间接引用 VM 控制台服务以及 VM 标识符 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 的会话时使用的到期日期/时间和公共 SSH 密钥来禁用与 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