Introdução ao serviço de console da Máquina Virtual
O serviço de console da Máquina Virtual (VM) fornece acesso gerenciado a uma VM hospedada em uma Instância do Nexus do Operador. Ele usa o Azure Private Link Service (PLS) para fornecer conectividade de rede na rede privada do Azure. O serviço Console da VM é uma maneira segura e privada de acessar uma VM sem expô-la à Internet pública.
Para obter mais informações sobre recursos de rede que habilitam a conectividade privada para uma instância do Nexus do operador, consulte Introdução ao link privado do Azure.
Este documento fornece instruções guiadas de como usar o serviço VM Console para estabelecer uma sessão com uma máquina virtual em uma instância do Operator Nexus.
Este guia ajuda-o a:
- Estabeleça uma conectividade de rede privada segura entre a sua rede e a rede privada do Gestor de Clusters.
- Crie um recurso de console em seu grupo de recursos de carga de trabalho/locatário usando o
az networkcloud virtualmachine console
comando CLI. - Inicie uma sessão SSH para se conectar ao Console da Máquina Virtual.
Nota
Para evitar passar o --subscription
parâmetro para cada comando da CLI do Azure, execute o seguinte comando:
az account set --subscription "your-subscription-ID"
Antes de começar
- Instale a versão mais recente das extensões CLI apropriadas.
Definição de variáveis
Para ajudar a configurar o ambiente para acesso a Máquinas Virtuais, defina essas variáveis de ambiente usadas pelos vários comandos ao longo deste guia.
Nota
Esses valores de variáveis de ambiente não refletem uma implantação real e os usuários DEVEM alterá-los para corresponder aos seus ambientes.
Deve-se notar que o primeiro conjunto de variáveis na seção abaixo é para o Gerenciador de Cluster e não para o Cluster.
O valor CM_EXTENDED_LOCATION pode ser encontrado com o comando az networkcloud virtualmachine show --name <virtual machine name> --resource-group <virtual machine's resource group> --query "consoleExtendedLocation" | jq -r '.consoleExtendedLocation.name'
.
# 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"
Criando recurso de console
O recurso Console fornece as informações sobre a VM Nexus. Ele fornece o nome da VM, a chave SSH pública, a data de expiração da sessão SSH e assim por diante.
Esta seção fornece um guia passo a passo para ajudá-lo a criar um recurso de Console usando comandos da CLI do Azure.
Para criar um recurso de Console no Gerenciador de Clusters, você precisará coletar algumas informações, por exemplo, grupo de recursos (CM_HOSTED_RESOURCES_RESOURCE_GROUP) e local personalizado (CM_EXTENDED_LOCATION). Você precisa fornecer o grupo de recursos, mas pode recuperar o local personalizado se tiver direitos de acesso para executar os seguintes comandos:
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 '"')
A primeira coisa antes de estabelecer uma sessão SSH com uma VM é criar um recurso de Console no Gerenciador de Cluster.
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}"]
Se você omitir o
--expiration
parâmetro, a expiração será padronizada para um dia após a criação do recurso Console. Observe também que oexpiration
formato de data e hora deve seguir RFC3339 (por exemplo, 2024-10-04T14:48:00Z), caso contrário, a criação do recurso Console falhará.Nota
Para obter uma sinopse completa para este comando, invoque
az networkcloud console create --help
.Após a criação bem-sucedida do recurso Console, recupere o identificador do Serviço de Link Privado necessário para criar o Ponto de Extremidade de Link Privado (PLE)
export pls_resourceid=$(az networkcloud virtualmachine console show \ --virtual-machine-name "${VIRTUAL_MACHINE_NAME}" \ --resource-group "${CM_HOSTED_RESOURCES_RESOURCE_GROUP}" \ --query "privateLinkServiceId")
Além disso, recupere a ID de acesso da VM. Você deve usar esse identificador exclusivo a
ssh
partiruser
da sessão.virtual_machine_access_id=$(az networkcloud virtualmachine console show \ --virtual-machine-name "${VIRTUAL_MACHINE_NAME}" \ --resource-group "${CM_HOSTED_RESOURCES_RESOURCE_GROUP}" \ --query "virtualMachineAccessId")
Nota
Para obter uma sinopse completa para este comando, invoque az networkcloud virtualmachine console show --help
.
Estabelecendo conectividade de rede privada
Para estabelecer uma sessão segura com uma Máquina Virtual, você precisa estabelecer conectividade de rede privada entre sua rede e a rede privada do Gerenciador de Cluster.
Essa rede privada depende do Ponto de Extremidade de Link Privado do Azure (PLE) e do Serviço de Link Privado do Azure (PLS).
O Gestor de Cluster cria automaticamente um PLS para que possa estabelecer uma ligação de rede privada entre a sua rede e a rede privada do Gestor de Clusters.
Esta seção fornece um guia passo a passo para ajudá-lo a estabelecer uma conectividade de rede privada.
Crie o PLE para estabelecer uma ligação privada e segura entre a sua rede e a rede privada do Gestor de Clusters. Você precisa do ID do recurso PLS obtido em Criando recurso de console.
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
Nota
Você precisará de apenas um Ponto de Extremidade Privado por Gerenciador de Cluster.
Recupere o endereço IP privado alocado para o PLE, que você precisa ao estabelecer a
ssh
sessão.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}"
Estabelecendo uma sessão SSH com a máquina virtual
Neste ponto, você tem o virtual_machine_access_id
e o sshmux_ple_ip
. Essa entrada é a informação necessária para estabelecer uma sessão com a VM.
O serviço VM Console é um ssh
servidor que "retransmite" a sessão para uma VM Nexus. O sshmux_ple_ip
indiretamente faz referência ao serviço de Console da VM e ao virtual_machine_access_id
identificador da VM.
Importante
O serviço Console da VM escuta a porta 2222
, portanto, você deve especificar esse número de ssh
porta no comando.
SSH [-i path-to-private-SSH-key] -p 2222 $virtual_machine_access_id@$sshmux_ple_ip
O serviço VM Console foi projetado para permitir apenas uma sessão por máquina virtual. Qualquer pessoa que estabeleça outra sessão bem-sucedida para uma VM fecha uma sessão existente.
Importante
A chave SSH privada usada para autenticar a sessão (padrão: $HOME/.ssh/id_rsa
) DEVE corresponder à chave SSH pública passada como parâmetro ao criar o recurso Console.
Atualizando o recurso do console
Você pode desabilitar a sessão para uma VM atualizando a data/hora de expiração e a chave SSH pública usada ao criar a sessão com uma 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}"]
Se quiser desabilitar o acesso a uma VM, será necessário atualizar o recurso Console com o parâmetro enabled False
. Esta atualização fecha qualquer sessão existente e restringe quaisquer sessões posteriores.
Nota
Antes de criar uma sessão para uma VM, o recurso Console correspondente deve ser definido como --enabled True
.
Quando um tempo de console --expiration
expira, ele fecha qualquer sessão correspondente ao recurso de console. Você precisará atualizar o tempo de expiração com um valor futuro para que possa estabelecer uma nova sessão.
Quando você atualiza a chave SSH pública do Console, o serviço Console da VM fecha todas as sessões ativas. Você apresenta uma nova chave SSH privada para criar uma nova sessão.
Limpeza (opcional)
Para limpar a configuração do ambiente do Console VM, você precisa excluir o recurso Console e o Ponto de Extremidade de Link Privado.
Excluindo o recurso do Console
az networkcloud virtualmachine console delete \ --virtual-machine-name "${VIRTUAL_MACHINE_NAME}" \ --resource-group "${VM_RESOURCE_GROUP}"
Excluindo o ponto de extremidade de link privado
az network private-endpoint delete \ --name ${PRIVATE_ENDPOINT_NAME}-ple \ --resource-group ${PRIVATE_ENDPOINT_NAME}-rg