Ativar endereços IP

Este documento explica como configurar endereços IP em uma instância de máquina virtual (VM) no Google Distributed Cloud (GDC) com isolamento físico.

É possível ativar qualquer instância de máquina virtual (VM) para que ela possa ser acessada pela rede externa ou por outra organização, conhecida como entrada de VM. Uma carga de trabalho de VM em um projeto de organização pode alcançar a rede externa ou a VM atual exposta a serviços em outras organizações, conhecida como saída de VM.

É possível usar o VirtualMachineExternalAccess (VMEA) para controlar a entrada e a saída de VMs juntas. Você pode encontrar os endereços IP de entrada e saída ativados para uma instância de VM na API VMM do Distributed Cloud ou no console do GDC.

Este documento é destinado a desenvolvedores em grupos de administradores de plataforma ou operadores de aplicativos que configuram endereços IP para VMs em um ambiente do Distributed Cloud. Para mais informações, consulte Públicos-alvo da documentação do GDC com isolamento físico.

Antes de começar

Para usar comandos da interface de linha de comando (CLI) gdcloud, faça o download, a instalação, e a configuração da gdcloud CLI. Todos os comandos do Distributed Cloud usam a CLI gdcloud ou kubectl e exigem um ambiente de sistema operacional (SO).

Acessar o caminho do arquivo kubeconfig

Para executar comandos no servidor da API Management, verifique se você tem os seguintes recursos:

  1. Faça login e gere o arquivo kubeconfig para o servidor da API Management, se você não tiver um.

  2. Use o caminho para o arquivo kubeconfig do servidor da API Management para substituir MANAGEMENT_API_SERVER nestas instruções.

Solicitar papéis do IAM

Entre em contato com o administrador do IAM do projeto para solicitar os seguintes papéis no projeto:

  • Administrador do projeto de máquina virtual (project-vm-admin): cria, modifica, lista e exclui VMs no namespace do projeto.

  • Leitor do projeto(project-viewer): visualiza todos os recursos nos namespaces do projeto.

Todos os papéis de VM precisam ser vinculados ao namespace do projeto em que a VM reside. Siga as etapas para verificar seu acesso.

Configurar o acesso externo da VM

VirtualMachineExternalAccess (VMEA) controla a entrada e a saída de VMs. O VMEA não pode controlar a entrada e a saída de VMs separadamente. A entrada e a saída de uma VM precisam ser ativadas ou desativadas juntas ao mesmo tempo.

É possível configurar e controlar o VMEA na UI ou na API VMM do Distributed Cloud. Uma VM só pode ter um único VMEA. Se uma VM não tiver um VMEA, a entrada e a saída serão desativadas por padrão.

Ativar o acesso externo

Para ativar uma VM com acesso externo para transferência de dados de entrada e saída, configure o VMEA no console do GDC ou na API Virtual Machine Manager do Distributed Cloud.

Por padrão, o tráfego de rede intraprojeto é permitido, e você pode acessar diretamente sua VM dentro do projeto. Uma política de rede bloqueia todo o tráfego de entrada para a VM de fora do projeto. É necessário criar manualmente uma nova política de rede para permitir que o endereço IP de origem acesse a VM por meio da transferência de dados. Essa política de rede pode ser uma política de rede de tráfego entre projetos ou uma política de rede de tráfego entre organizações. O local depende de onde você quer acessar a VM.

É possível ativar e desativar o acesso externo de uma VM especificando true ou false no campo enabled da especificação VMEA. Para a entrada de VM, é possível configurar a transferência de dados nas portas especificando o nome, o protocolo e o número da porta para cada porta que você quer adicionar no campo ports da especificação VMEA.

Para ativar o acesso externo de uma VM criando um novo VMEA, faça o seguinte:

Console

  1. Durante o processo de criação da VM usando o console, navegue até a página Detalhes da rede na página Criar instância de VM.
  2. Localize Rede no menu de navegação vertical da página.
  3. Selecione Permitir acesso externo para ativar o acesso externo na VM.

Ativar o acesso externo na criação da VM

API

Execute este comando:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  apply -n PROJECT -f - <<EOF
apiVersion: virtualmachine.gdc.goog/v1
kind: VirtualMachineExternalAccess
metadata:
  name: VM_NAME
spec:
  enabled: true
  ports:
  - name: PORT_NAME
    protocol: PROTOCOL
    port: PORT_NUMBER
EOF

Substitua as seguintes variáveis:

  • MANAGEMENT_API_SERVER: o arquivo kubeconfig para o servidor da API Management
  • VM_NAME: o nome da VM
  • PORT_NAME: o nome da porta
  • PROTOCOL: o protocolo que você quer que o serviço de entrada use. O nome do protocolo precisa estar em maiúsculas e ser um protocolo compatível com o Kubernetes, como TCP, UDP ou SCTP
  • PORT_NUMBER: o número da porta

Para ativar o acesso externo de uma VM editando um VMEA atual pela API VMM, execute o seguinte:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  edit virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME

gdcloud

Use o comando gdcloud compute com a flag --enable-external-access para ativar o acesso externo em uma instância de VM:

gdcloud compute instances create VM_NAME \
  --project PROJECT \
  --machine-type MACHINE_TYPE \
  --image IMAGE \
  --image-project IMAGE_PROJECT \
  --enable-external-access

Substitua as seguintes variáveis:

  • VM_NAME: o nome da VM
  • PROJECT: o projeto na nuvem do Distributed Cloud em que a VM reside
  • MACHINE_TYPE: o nome do tipo de máquina predefinido para a instância de máquina virtual
  • IMAGE: o nome da imagem de inicialização da instância
  • IMAGE_PROJECT: o projeto da imagem de inicialização da instância

Desativar o acesso externo

Se uma VM não tiver um VMEA correspondente, a entrada e a saída serão desativadas. Se uma VM tiver um VMEA correspondente, será possível desativar o VMEA definindo o campo enabled como false ou excluindo o VMEA diretamente. É possível realizar essas operações pela API VMM do Distributed Cloud.

Para desativar o acesso externo, siga estas etapas:

API

Desative o acesso externo excluindo um VMEA:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  delete virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME

Substitua:

  • MANAGEMENT_API_SERVER: o arquivo kubeconfig para o servidor da API Management
  • VM_NAME: o nome da VM
  • PROJECT: o projeto na nuvem do Distributed Cloud em que a VM reside

Desative o acesso externo editando um VMEA:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  edit virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME

Atualize o campo enabled para false.

Entrada

Conferir endereços IP de entrada

Se uma VM estiver ativada com a entrada, um endereço IP de entrada será mostrado no console do GDC após a criação. Também é possível encontrar esse endereço IP de entrada na página Detalhes da VM no console do GDC.

Para buscar o endereço IP, use a API VMM do Distributed Cloud. Faça o seguinte:

API

Buscar o endereço IP:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  get virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME \
  -ojsonpath='{.status.ingressIP}'

Para uma VM com um sistema operacional (SO) diferente, use o comando ssh para inserir a VM com o endereço IP de entrada com a porta ativada com TCP.

Editar entrada

Depois de ativar o VMEA para uma VM, é possível personalizar a entrada editando o VMEA. É possível editar diretamente a especificação da entrada da VM no console do GDC. Também é possível usar a CLI kubectl para editar a entrada da VM na especificação do VMEA.

Para editar o VMEA e personalizar a entrada, faça o seguinte:

Por exemplo, use os comandos a seguir para adicionar a porta PORT_NUMBER a uma entrada de VM atual usando o protocolo TCP:

Console

Edite diretamente as portas no serviço de entrada da VM no console do GDC:

  1. No menu de navegação vertical, clique em Instâncias.
  2. Na página, role até Detalhes da rede.
  3. Clique no ícone de edição em Portas de entrada para editar a porta de entrada.

    Interface do console mostrando a lista de detalhes da rede com o ícone de edição nas portas do Ingress

API

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  patch virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME \
  --type "json" -p '[{"op":"add","path":"/spec/ports/-","value": {"name":"PORT_NAME","port":PORT_NUMBER, "Protocol":"TCP"}}]'

Substitua:

  • MANAGEMENT_API_SERVER: o arquivo kubeconfig para o servidor da API Management
  • VM_NAME: o nome da VM
  • PROJECT: o projeto na nuvem do Distributed Cloud em que a VM reside
  • PORT_NAME: o nome da porta a ser adicionada
  • PORT_NUMBER: o número da porta

Ativar a entrada com protocolo não TCP

O Distributed Cloud permite ativar a entrada de VM com diferentes protocolos. Por padrão, um serviço de entrada de VM usa o protocolo TCP. É possível adicionar sua própria entrada de protocolo não TCP para a VM. O Distributed Cloud oferece suporte aos seguintes protocolos:

  • Protocolo de controle de transmissão (TCP).
  • Protocolo de datagramas do usuário (UDP).
  • Protocolo de transmissão de controle de fluxo (SCTP).

É possível ativar a transferência de dados com protocolo não TCP especificando nomes de protocolo diferentes ao criar o VMEA.

Saída

Uma carga de trabalho de VM em um projeto de organização pode alcançar a rede externa ou ser exposta a serviços em outras organizações. Se você ativar a transferência de dados para a VM, um endereço IP de saída será gerado. A VM se conecta aos serviços externos com esse endereço IP.

Para que esse endereço IP transfira dados da rede externa, talvez seja necessário aplicar políticas de rede do projeto. Para mais informações, consulte Política de rede de tráfego entre organizações de saída.

Se uma VM estiver configurada para tráfego de saída usando um gateway do Cloud NAT, a seguinte anotação precisará ser adicionada ao objeto de acesso externo da máquina virtual para preservar a conectividade de saída: egress.networking.gke.io/use-cloud-nat:"true"

Conferir o endereço IP de saída

Se uma VM estiver ativada com a saída, um endereço IP de saída será mostrado no console do GDC após a criação. Também é possível encontrar esse endereço IP de saída na página Detalhes da VM.

Para conferir o endereço IP de saída, faça o seguinte:

API

Buscar o endereço IP:

kubectl --kubeconfig MANAGEMENT_API_SERVER \
  -n PROJECT \
  get virtualmachineexternalaccesses.virtualmachine.gdc.goog VM_NAME \
  -ojsonpath='{.status.egressIP}'

Substitua:

  • MANAGEMENT_API_SERVER: o arquivo kubeconfig para o servidor da API Management
  • VM_NAME: o nome da VM
  • PROJECT: o projeto na nuvem do Distributed Cloud em que a VM reside

A saída de VM é baseada em um projeto. As VMs no mesmo projeto contêm o mesmo endereço IP de saída.

Controlar a saída

Em versões anteriores do Distributed Cloud, era necessário reiniciar a VM para refletir as mudanças de saída em uma VM em execução. Na versão 1.11, é possível ativar e desativar a saída da VM sem reiniciar a VM. Essa mudança entra em vigor imediatamente após a atualização do VMEA.