虚拟机(VM)控制台服务提供对运维方 Nexus 实例中托管的 VM 的管理访问权限。 它使用 Azure 专用链接服务(PLS)在 Azure 专用网络上提供网络连接。 VM 控制台服务是一种安全且专用的方式,无需将其公开到公共 Internet 即可访问 VM。
有关支持与操作员 Nexus 实例建立专用连接的网络资源的详细信息,请参阅 Azure 专用链接简介。
本文档提供了有关如何使用 VM 控制台服务在操作员 Nexus 实例中与虚拟机建立会话的引导说明。
本指南可帮助你:
- 在网络与群集管理器的专用网络之间建立安全专用网络连接。
- 使用 az networkcloud virtualmachine consoleCLI 命令在工作负荷/租户资源组中创建控制台资源。
- 启动 SSH 会话以连接到虚拟机的控制台。
注释
为了避免将 --subscription 参数传递给每个 Azure CLI 命令,请执行以下命令:
  az account set --subscription "your-subscription-ID"
在您开始之前
- 安装最新版本的相应 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 命令创建控制台资源。
- 若要在群集管理器中创建 控制台 资源,需要收集一些信息,例如资源组(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 '"')
- 在与 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。
- 成功创建控制台资源后,检索创建专用链接终结点所需的 专用链接服务 标识符(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)
- 此外,检索 VM 访问 ID。 您必须使用此唯一标识符作为 - user在- ssh会话中的标识。- 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,以便可以在网络与群集管理器的专用网络之间建立专用网络连接。
本部分提供了一个分步指南,可帮助你建立专用网络连接。
- 创建 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
注释
每个群集管理器只需要一个专用终结点。
- 检索分配给 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 会话“中继”到 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 控制台服务旨在 仅 允许每个虚拟机一个会话。 成功与 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 控制台环境设置,需要删除控制台资源和专用链接终结点。
- 删除控制台资源 - az networkcloud virtualmachine console delete \ --virtual-machine-name "${VIRTUAL_MACHINE_NAME}" \ --resource-group "${VM_RESOURCE_GROUP}"
- 删除私有链接终结点 - az network private-endpoint delete \ --name "${PRIVATE_ENDPOINT_NAME}" \ --resource-group "${PRIVATE_ENDPOINT_RG}"
 
              
               
              
               
              
              