Este documento destina-se a proprietários de aplicações que executam o Google Distributed Cloud. Este documento mostra como estabelecer ligação a máquinas virtuais (VMs) que usam o VM Runtime no GDC. Pode ligar-se diretamente às VMs através de um endereço IP ou usar ferramentas incorporadas para acesso SSH ou à consola.
Antes de começar
Para preencher este documento, precisa de ter acesso aos seguintes recursos:
- Uma VM que é executada num dos seus clusters. Se necessário, crie uma VM no Google Distributed Cloud.
- A ferramenta de cliente
virtctl
instalada como um plug-in para okubectl
. Se necessário, instale a ferramenta de cliente virtctl.
Configure o acesso SSH sem palavra-passe a VMs
O acesso SSH direto e sem palavra-passe à sua VM é facilitado por um agente convidado instalado pelo VM Runtime no GDC. Entre outras funções, o agente convidado instala e faz expirar as chaves SSH. Esta capacidade permite um túnel SSH para aceder à sua VM a partir de clientes fora da rede do cluster.
Ative o agente convidado
Para ativar o agente convidado:
Verifique o seu recurso personalizado
VirtualMachine
para confirmar que está configurado para ativar o agente convidado:kubectl get gvm VM_NAME -o yaml --kubeconfig KUBECONFIG
O campo
spec.osType
deve ser definido como o sistema operativo da sua VM,Linux
ouWindows
. A secçãospec.guestEnvironment
não deve ser configurada explicitamente como vazia. Se a secção estiver configurada como vazia (guestEnvironment: {}
), pode removê-la completamente para ativar o agente convidado.O seu recurso personalizado
VirtualMachine
para a VM à qual quer aceder deve ter o seguinte aspeto:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: sample-vm spec: compute: cpu: vcpus: 2 memory: capacity: 4Gi ... osType: Linux ...
Se necessário, use
kubectl edit
para atualizar o recurso personalizadoVirtualMachine
.Para verificar se o agente convidado está a funcionar, verifique o
status
no seu recurso personalizado de VM:kubectl get gvm VM_NAME --kubeconfig KUBECONFIG
Quando o agente convidado está a funcionar, vê
status: "True"
para as condiçõesGuestEnvironmentEnabled
eGuestEnvironmentDataSynced
.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: ... name: vm-sample-01 ... status: conditions: - lastTransitionTime: "2022-10-05T22:40:26Z" message: "" observedGeneration: 1 reason: UserConfiguration status: "True" type: GuestEnvironmentEnabled - lastTransitionTime: "2022-10-06T21:55:57Z" message: "" observedGeneration: 1 reason: GuestEnvironmentDataSynced status: "True" type: GuestEnvironmentSynced ...
Ative o acesso SSH sem palavra-passe
Para ativar o acesso SSH sem palavra-passe para a sua VM:
Crie um
VirtualMachineAccessRequest
ficheiro de manifesto, comovm-access-request.yaml
, no editor à sua escolha:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineAccessRequest metadata: name: VMAR_NAME namespace: VM_NAMESPACE spec: vm: VM_NAME user: USERNAME ssh: key: PUBLIC_SSH_KEY ttl: EXPIRATION_TIME
Substitua o seguinte:
VMAR_NAME
: o nome do recurso de pedido de acesso.VM_NAMESPACE
: o espaço de nomes da VM à qual quer aceder.VM_NAME
: o nome da VM à qual quer aceder.USERNAME
: o nome de utilizador do utilizador que está a aceder à VM.PUBLIC_SSH_KEY
: a chave pública para acesso SSH. Normalmente, trata-se do conteúdo do ficheiroid_rsa.pub
.EXPIRATION_TIME
: o campottl
(tempo de vida) especifica durante quanto tempo a chave SSH é válida.Por exemplo, se especificar
30m
, a chave SSH expira após 30 minutos.Esta flag usa as seguintes unidades:
s
durante segundosm
durante minutosh
durante horasd
durante dias
Use
kubectl apply
para criar oVirtualMachineAccessRequest
a partir do ficheiro de manifesto. Por exemplo, se tiver dado o nomevm-access-request.yaml
ao ficheiro de manifesto,kubectl apply -f MANIFEST --kubeconfig KUBECONFIG
Substitua o seguinte:
MANIFEST
: o nome do ficheiro de manifesto do pedido de acesso. Por exemplo,vm-access-request.yaml
.KUBECONFIG
: o caminho para o ficheiro kubeconfig do cluster que aloja a VM à qual está a aceder.
Para verificar se a configuração do pedido de acesso foi bem-sucedida, verifique o estado do
VirtualMachineAccessRequest
:kubectl get vmar VMAR_NAME -o yaml --kubeconfig KUBECONFIG
Quando a configuração for bem-sucedida, a secção
status
incluistate: configured
:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineAccessRequest metadata: ... annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"vm.cluster.gke.io/v1","kind":"VirtualMachineAccessRequest", "metadata":{"annotations":{},"name":"vmar-sample","namespace":"default"}, "spec":{"ssh":{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ...jMLHFc= sample-user@sample-host","ttl":"5h"},"user":"sample-user","vm":"vm-sample-01"}} creationTimestamp: "2022-10-06T21:55:57Z" finalizers: - vm.cluster.gke.io/vmar-finalizer generation: 2 name: vmar-sample namespace: default resourceVersion: "13033921" uid: 282d72ad-f48d-4e89-af22-336940ac9f58 spec: ssh: key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ...jMLHFc= sample-user@sample-host ttl: 5m0s user: sample-user vm: vm-sample-01 status: processedAt: "2022-10-06T21:55:57Z" state: configured
Desative o agente convidado
Quando cria uma nova VM e define o campo osType
, o agente convidado é ativado.
Enquanto esta funcionalidade estiver em pré-visualização, pode desativá-la editando o recurso personalizado VirtualMachine
. A desativação do agente convidado desativa o acesso SSH sem palavra-passe à sua VM.
Para desativar o agente convidado:
Use
kubectl
para parar a VM antes de fazer alterações à configuração:kubectl virt stop VM_NAME --kubeconfig KUBECONFIG
Edite o recurso de VM:
kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
Atualize a configuração
VirtualMachine
para adicionar umspec.guestEnvironment
vazio explicitamente:apiVersion: vm.cluster.gke.io/v1alpha1 kind: VirtualMachine metadata: name: vm-example namespace: default spec: compute: ... osType: Linux guestEnvironment: {}
Guarde e feche o manifesto de VMs atualizado no editor.
Use
kubectl
para iniciar a VM:kubectl virt start VM_NAME --kubeconfig KUBECONFIG
Estabeleça ligação através de um endereço IP
Se a sua VM tiver um endereço IP acessível e já tiver as credenciais para aceder à VM, pode estabelecer ligação através de um protocolo como SSH, VNC ou RDP.
Ligue-se através do endereço IP
Se conseguir estabelecer ligação diretamente ao endereço IP da VM, use um dos seguintes métodos:
SSH
Obtenha os detalhes da sua VM para ver o respetivo endereço IP:
kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
Substitua os seguintes valores:
VM_NAME
: nome da VM.VM_NAMESPACE
: o espaço de nomes para a sua VM.
O exemplo de saída seguinte mostra as informações da VM e o endereço IP:
NAME STATUS AGE IP vm1 Running 7m 10.200.0.21
Estabeleça ligação à sua VM através de um cliente SSH:
ssh USERNAME@IP_ADDRESS -i PATH_TO_KEY
Substitua os seguintes valores:
USERNAME
: o nome de utilizador de uma conta na sua VM.IP_ADDRESS
: o endereço IP da sua VM obtido no passo anterior.PATH_TO_KEY
: o caminho para a chave SSH privada.
VNC ou RDP
O Virtual Network Computing (VNC) e o Remote Desktop Protocol (RDP) permitem-lhe usar a consola gráfica para aceder à sua VM. Quando usa um endereço IP, tem de ativar o VNC ou o RDP no SO convidado antes de poder usar qualquer um deles para estabelecer ligação à VM. Para obter informações sobre como ativar e usar o VNC ou o RDP, consulte a documentação do SO convidado.
Também precisa de credenciais existentes para iniciar sessão na VM, como as que define para criar credenciais de utilizador iniciais quando cria uma VM.
Obtenha os detalhes da sua VM para ver o respetivo endereço IP:
kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
Substitua os seguintes valores:
VM_NAME
: nome da VM.VM_NAMESPACE
: o espaço de nomes para a sua VM.
O exemplo de saída seguinte mostra as informações da VM e o endereço IP:
NAME STATUS AGE IP vm1 Running 7m 10.200.0.21
Estabeleça ligação ao endereço IP da VM obtido no passo anterior através de uma ferramenta de cliente e da porta adequada, como a porta VNC
5900
ou a porta RDP3389
.
Ligue-se através de um serviço
Se a sua VM se ligar à porta pod-network
predefinida e não conseguir comunicar diretamente com o endereço IP da VM, exponha a VM atrás de um equilibrador de carga Service
.
Crie um manifesto
Service
, comomy-service-load-balancer.yaml
, no editor à sua escolha:nano my-service-load-balancer.yaml
Copie e cole o seguinte manifesto YAML:
apiVersion: v1 kind: Service metadata: name: VM_NAME-service spec: selector: kubevirt/vm: VM_NAME ports: - name: PORT_NAME protocol: PROTOCOL_TYPE port: EXTERNAL_PORT targetPort: TARGET_PORT type: LoadBalancer
Neste
Service
tipo de manifesto, substitua os seguintes valores:VM_NAME
: o nome da VM a expor para acesso remoto.PORT_NAME
: o nome do seu protocolo, comossh
,vnc
ourdp
.PROTOCOL_TYPE
: o tipo de protocolo, comoTCP
para SSH e RDP, ouUDP
para VNC.EXTERNAL_PORT
: o número da porta externa a expor e que usa para se ligar.TARGET_PORT
: a porta de destino, como22
para SSH.
Guarde e feche o manifesto
Service
no editor.Crie o
Service
com okubectl
:kubectl apply -f my-service-load-balancer.yaml --kubeconfig KUBECONFIG
Obtenha a morada
EXTERNAL-IP
do serviço de balanceador de carga:kubectl get service VM_NAME-service --kubeconfig KUBECONFIG
O endereço IP do equilibrador de carga é apresentado, conforme mostrado no seguinte exemplo de resultado:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vm1-service LoadBalancer 172.26.232.167 10.200.0.51 22:31141/TCP 6d20h
Estabeleça ligação ao endereço
EXTERNAL-IP
do balanceador de carga com um protocolo padrão, como usar um cliente SSH:ssh USERNAME@LOAD_BALANCER_IP_ADDRESS -i PATH_TO_KEY
Substitua os seguintes valores:
USERNAME
: o nome de utilizador de uma conta na sua VM.LOAD_BALANCER_IP_ADDRESS
: o endereço IP do seu equilibrador de carga.PATH_TO_KEY
: o caminho para a chave SSH privada.
Ligue-se diretamente através de SSH
Se o seu cliente estiver ligado à mesma rede física que os nós do cluster bare metal e não precisar de usar túneis SSH para se ligar ao cluster, pode estabelecer ligação através de kubectl virt ssh
.
Para usar o SSH para ligar uma VM do Linux a partir da consola com o suplemento
virtctl
:kubectl virt ssh USERNAME@VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
Substitua os seguintes valores:
USERNAME
: o nome de utilizador para aceder à sua VM. Esta conta é criada se não existir na VM.VM_NAME
: o nome da sua VM.
Depois de estabelecer ligação com êxito através do SSH à VM e já não precisar da ligação, saia da sessão SSH:
exit
Associe diretamente através da consola
Se não tiver conetividade de rede direta à sua VM Linux para acesso SSH, ligue-se à consola da VM através do tempo de execução da VM na consola do GDC. Este método abre uma consola de série. Após a ligação, é apresentado um comando em vez de uma consola gráfica.
Para aceder a uma VM do Linux a partir da consola, use o suplemento
virtctl
:kubectl virt console VM_NAME --kubeconfig KUBECONFIG
Substitua
VM_NAME
pelo nome da sua VM.Quando lhe for pedido, introduza as credenciais do utilizador da sua VM. Estas credenciais têm de existir na VM ou ser aplicadas quando a VM é criada. Se necessário, consulte a secção seguinte para criar credenciais de utilizador iniciais quando cria uma VM.
Depois de estabelecer ligação com êxito à consola da VM e já não precisar da ligação, saia da sessão da VM e da consola:
Ctrl + ]
Estabeleça ligação diretamente através do VNC
Pode usar o comando kubectl virt vnc
para abrir a consola gráfica Virtual Network Computing (VNC) para aceder às suas VMs. Este método funciona para VMs que executam um SO convidado do Windows ou do Linux. Quando usa o comando kubectl virt vnc
, o tempo de execução da VM no GDC abre o VNC para si, pelo que não tem de
ativar o VNC no SO convidado.
Precisa de credenciais existentes para iniciar sessão na VM, como as que define para criar credenciais de utilizador iniciais quando cria uma VM.
Para aceder a uma VM através do VNC, use o suplemento
virtctl
:kubectl virt vnc VM_NAME --kubeconfig KUBECONFIG
Substitua
VM_NAME
pelo nome da sua VM.Quando lhe for pedido, introduza as credenciais do utilizador da sua VM.
Depois de estabelecer ligação com êxito à sessão VNC da VM e não precisar mais da ligação, termine sessão na VM para fechar a ligação VNC.
Crie credenciais de utilizador iniciais
Quando se liga à VM através da consola, tem de especificar as credenciais do utilizador. O processo de criação das credenciais de utilizador iniciais difere para os sistemas operativos convidados Linux e Windows.
SO convidado Linux
Para VMs Linux, as credenciais do utilizador podem ser incorporadas nas suas imagens personalizadas ou podem ser especificadas quando cria uma VM.
Use o parâmetro
--configure-initial-password
com okubectl virt create
comando:kubectl virt create vm VM_NAME \ --image ubuntu20.04 \ --os-type Linux \ --configure-initial-password USERNAME:PASSWORD \ --kubeconfig KUBECONFIG
Substitua os seguintes valores:
VM_NAME
: nome da VM.USERNAME
: nome de utilizador da conta a criar na VM.PASSWORD
: palavra-passe da conta de utilizador.
Este comando de exemplo cria uma VM Linux que executa o Ubuntu 20.04. Recomendamos que altere as credenciais iniciais depois de iniciar sessão na VM pela primeira vez.
SO Windows convidado
Use os passos seguintes para repor a palavra-passe de um utilizador existente ou criar a palavra-passe inicial de um novo utilizador:
Ative o agente convidado na sua VM do Windows:
Configure a VM para ativar o agente convidado.
Use o VNC ou o RDP para estabelecer ligação à VM.
Na VM, navegue para a unidade
guest agent
. Na maioria dos casos, é o driveE:
.Use o PowerShell para executar
install.ps1
.Isto instala e inicia o agente convidado. O agente convidado é iniciado automaticamente para os reinícios de VMs subsequentes.
Feche a sessão remota.
Na estação de trabalho de administração, use o seguinte comando para repor (ou definir, se usar um novo nome de utilizador) a palavra-passe da VM do Windows:
kubectl virt reset-windows-password VM_NAME \ --user=USERNAME \ --namespace=VM_NAMESPACE
Substitua o seguinte:
VM_NAME
: o nome da VM.USERNAME
: o nome de utilizador para o qual quer repor (ou definir) a palavra-passe. Se o nome de utilizador for novo, o comando cria uma nova conta do Windows e define a palavra-passe inicial.VM_NAMESPACE
: (Opcional) o espaço de nomes da VM. Esta flag é opcional. Se não for especificado, é usado o espaço de nomes predefinido,default
.
Para repor (ou definir) a palavra-passe sem um pedido de confirmação, use a flag
--force
opcional. Quando usa a flag--force
, o comando avisa-o das consequências da reposição da palavra-passe de uma conta existente. Sem a flag--force
, o comando pede-lhe que confirme a reposição da palavra-passe com o seguinte texto:This command creates an account and sets an initial password for the user USERNAME if the account does not already exist. If the account already exists, resetting the password can cause the LOSS OF ENCRYPTED DATA secured with the current password, including files and stored passwords. Would you like to set or reset the password for USERNAME (Y/n)?
Depois de confirmar (ou forçar) a reposição da palavra-passe, o comando devolve a nova palavra-passe para a VM e o nome de utilizador especificados:
Resetting and retrieving password for USERNAME on VM_NAME vm_name: VM_NAME username: USERNAME password: PASSWORD
O que se segue?
- Faça a gestão do estado de energia de uma VM no Google Distributed Cloud.
- Edite uma VM no Google Distributed Cloud.
- Veja os registos da consola da VM no Google Distributed Cloud.