Como usar o encaminhamento de protocolos

Com o encaminhamento de protocolos do Compute Engine, é possível criar objetos de regra de encaminhamento que possibilitam o envio de pacotes para uma instância de destino sem NAT. Cada instância de destino contém uma única instância de máquina virtual (VM, na sigla em inglês) que recebe e processa o tráfego das regras de encaminhamento correspondentes.

O encaminhamento de protocolos pode ser usado em vários cenários, inclusive:

Para hospedagem virtual por IPs, redes privadas virtuais (VPN) e balanceamento de carga, o Compute Engine permite o encaminhamento dos seguintes protocolos:

Para VIPs privados, apenas TCP e UDP são aceitos:

A taxa cobrada pelo encaminhamento de protocolos é a mesma do serviço de balanceamento de carga. Para mais informações, leia a página de preços.

Guia de início rápido

Neste guia de início rápido, consideramos que você esteja familiarizado com o bash.

Para criar uma regra de encaminhamento que envie tráfego para uma única instância, faça o seguinte:

  1. Crie uma instância de destino.

    Ela é uma instância de VM única, mas pode existir no momento em que você a cria ou pode ser criada posteriormente.

  2. Crie uma regra de encaminhamento.

    A instância de destino já precisa existir antes da criação de uma regra de encaminhamento. Se os pacotes de entrada corresponderem ao IP, ao protocolo e, se aplicável, ao intervalo de portas exibido pela regra de encaminhamento, essa regra direcionará o tráfego para a instância de destino.

No restante deste guia de início rápido, as etapas acima serão demonstradas em detalhes:

  1. Como configurar um servidor Apache em uma instância de VM.
  2. Como criar uma instância de destino e as regras de encaminhamento correspondentes.
  3. Enviar tráfego para uma única instância de destino.

Ao concluir este guia de início rápido, você terá condições de configurar o encaminhamento de protocolos de várias regras de encaminhamento para uma única instância de destino.

Configurar uma instância de VM e instalar o Apache

Para criar uma única instância de VM com o Apache instalado:

  1. Crie alguns scripts de inicialização para a nova instância.

    Dependendo do sistema operacional, o conteúdo do script de inicialização pode ser diferente.

    • Se você pretende usar uma imagem do Debian na instância, execute o seguinte comando:

      me@local:~$ echo "sudo apt-get update && sudo apt-get -y install apache2 && mkdir -p /var/www1 &&
      mkdir -p /var/www2 && mkdir -p /var/www3 && hostname > /var/www/html/index.html &&
      echo w1 > /var/www1/index.html && echo w2 > /var/www2/index.html && echo w3 > /var/www3/index.html" > 
      $HOME/pf_startup.sh

    • Se você pretende usar uma imagem do CentOS na instância, execute o seguinte comando:

      me@local:~$ echo "sudo yum -y install httpd && sudo service httpd restart && mkdir -p /var/www1 &&
      mkdir -p /var/www2 && mkdir /var/www3 && hostname > /var/www/html/index.html &&
      echo w1 > /var/www1/index.html && echo w2 > /var/www2/index.html && echo w3 > /var/www3/index.html" > 
      $HOME/pf_startup.sh

  2. Crie uma tag para sua futura VM, a fim de ajudar a aplicar um firewall a ela posteriormente:

    me@local:~$ TAG="www-tag"
    
  3. Crie uma instância de VM para processar o tráfego das regras de encaminhamento:

    gcloud compute instances create pf-instance \
        --image-project debian-cloud --image-family debian-9 --tags $TAG \
        --metadata-from-file startup-script=$HOME/pf_startup.sh
    
  4. Crie uma regra de firewall a fim de permitir o tráfego externo para essa instância de VM:

    gcloud compute firewall-rules create www-firewall --target-tags $TAG --allow tcp
    

Você configurou uma instância de VM. Agora comece a configurar o encaminhamento de protocolos.

Criar uma instância de destino e as regras de encaminhamento correspondentes

  1. Crie uma instância de destino.

    As instâncias de destino incluem uma única instância de VM que recebe e processa o tráfego de uma regra de encaminhamento. Elas não têm uma política de NAT e, por isso, podem ser usadas para configurar as conexões VPN por meio dos protocolos IPsec (em inglês) diretamente.

    Crie uma instância de destino antes de um objeto de regra de encaminhamento. Esse tipo de regra precisa se referir a um recurso de destino existente. Não crie uma regra que direcione o tráfego para um recurso de destino que não existe. Neste exemplo, crie uma instância de destino da seguinte maneira:

    gcloud compute target-instances create pf-target-instance --instance pf-instance
    
  2. Crie objetos de regra de encaminhamento.

    Em um objeto de regra de encaminhamento, o tráfego que corresponde ao protocolo IP e à porta é direcionado para uma instância de destino especificada. Para mais informações, consulte a documentação sobre regras de encaminhamento.

    Neste exemplo, os comandos a seguir criam três regras de encaminhamento, cada uma com um endereço IP temporário que encaminha o tráfego TCP para sua instância de destino. Se você preferir e tiver alguns endereços IP externos estáticos, use-os com essas regras de encaminhamento especificando a sinalização --address IP-ADDRESS.

    gcloud compute forwarding-rules create pf-rule1 --ip-protocol TCP \
        --ports 80 --target-instance pf-target-instance
    
    gcloud compute forwarding-rules create pf-rule2 --ip-protocol TCP \
        --ports 80 --target-instance pf-target-instance
    
    gcloud compute forwarding-rules create pf-rule3 --ip-protocol TCP \
        --ports 80 --target-instance pf-target-instance
    

Comece a enviar o tráfego para sua instância de destino.

Enviar o tráfego para a instância

  1. Receba os endereços IP externos das novas regras de encaminhamento.

    Execute gcloud compute forwarding-rules list para conseguir os endereços IP externos das suas regras de encaminhamento. Por exemplo, a tabela a seguir lista os endereços IP temporários alocados para as regras de encaminhamento que já foram criadas.

    Se você usar endereços IP reservados, eles serão listados aqui no lugar dos endereços IP temporários.

    gcloud compute forwarding-rules list
    
    NAME     REGION      IP_ADDRESS     IP_PROTOCOL TARGET
    pf-rule1 us-central1 [ADDRESS_1]    TCP         us-central1-a/targetInstances/pf-target-instance
    pf-rule2 us-central1 [ADDRESS_2]    TCP         us-central1-a/targetInstances/pf-target-instance
    pf-rule3 us-central1 [ADDRESS_3]    TCP         us-central1-a/targetInstances/pf-target-instance

    Anote os endereços IP para a próxima etapa.

  2. Configure os hosts virtuais Apache da instância de VM para exibir informações diferentes com base no URL de destino.

    Primeiramente, conecte-se à instância:

    gcloud compute ssh pf-instance
    

    Em seguida, edite o arquivo /etc/apache2/sites-enabled/000-default.conf e adicione as linhas a seguir. Para as linhas VirtualHostcd.., use os endereços IP que você viu quando executou a etapa anterior.

    <VirtualHost [ADDRESS_1]>
     DocumentRoot /var/www1
     <Directory /var/www1>
      Require all granted
     </Directory>
    </VirtualHost>
    <VirtualHost [ADDRESS_2]>
     DocumentRoot /var/www2
     <Directory /var/www2>
      Require all granted
     </Directory>
    </VirtualHost>
    <VirtualHost [ADDRESS_3]>
     DocumentRoot /var/www3
     <Directory /var/www3>
      Require all granted
     </Directory>
    </VirtualHost>
    

    Por fim, reinicie o Apache:

    user@myinst:~$ sudo /etc/init.d/apache2 restart
    
  3. Teste o envio de tráfego para sua instância.

    Na máquina local, faça uma solicitação para os endereços IP externos exibidos pelas regras de encaminhamento criadas.

    Use curl para enviar o tráfego para os endereços IP. A resposta retorna w1, w2 ou w3, dependendo do endereço IP.

    me@local:~$curl [ADDRESS_1]
    w1
    
    me@local:~$ curl [ADDRESS_2]
    w2
    
    me@local:~$ curl [ADDRESS_3]
    w3
    

    A configuração de encaminhamento de protocolos está pronta.

Regras de encaminhamento

As regras de encaminhamento funcionam em conjunto com pools e instâncias de destino para oferecer suporte a recursos de balanceamento de carga e encaminhamento de protocolo. Para usar o balanceamento de carga e o encaminhamento de protocolo, crie uma regra de encaminhamento que direcione o tráfego para pools de destino específicos, no caso do balanceamento de carga, ou instâncias de destino, no caso do encaminhamento de protocolo. Não use esses recursos sem uma regra de encaminhamento.

Os recursos de regra de encaminhamento fazem parte da coleção "Regras de encaminhamento". Cada regra corresponde a um determinado endereço IP, protocolo e, opcionalmente, um intervalo de portas para um único pool ou instância de destino. Quando há envio de tráfego para um endereço IP externo veiculado por uma regra de encaminhamento, esse tráfego é direcionado para as instâncias ou pool de destino. Crie até 50 objetos de regra de encaminhamento por projeto.

Alguns pontos que precisam ser considerados ao trabalhar com regras de encaminhamento:

  • O nome de uma regra precisa ser exclusivo no projeto, ter de um a 63 caracteres e coincidir com a expressão regular [a-z]([-a-z0-9]*[a-z0-9])?. Isso significa que o primeiro caractere precisa ser uma letra minúscula, e todos os caracteres seguintes precisam ser hífen, letra minúscula ou dígito, exceto o último caractere, que não pode ser um hífen.

  • Caso nenhum protocolo de regra de encaminhamento seja especificado, o padrão TCP será usado. Além disso, alguns protocolos só podem ser usados com pools ou instâncias de destino:

    • Se você usar ESP, AH, SCTP ou ICMP, especifique uma instância de destino. Não é possível especificar um pool de destino para esses protocolos.
    • Se você usar TCP ou UDP, especifique um pool de destino ou uma instância de destino.
  • Intervalos de portas somente podem ser especificados nos protocolos TCP, UDP e SCTP.

Adicionar uma regra de encaminhamento

Para adicionar uma nova regra de encaminhamento, use o comando gcloud compute forwarding-rules create ou crie uma solicitação HTTP POST para o conjunto de regras de encaminhamento. Veja a seguir um exemplo de como criar uma regra de encaminhamento para uma instância de destino usando a ferramenta de linha de comando gcloud:

gcloud compute forwarding-rules create [FORWARDING_RULE] \
    --load-balancing-scheme internal | external \
    --region [REGION] \
    [--target-instance-zone [ZONE]] \
    --ip-protocol TCP --ports 80 \
    --target-instance [TARGET_INSTANCE]

Se você omitir a sinalização --target-instance-zone, a ferramenta de linha de comando gcloud solicitará que escolha uma zona se não tiver definido a propriedade compute/zone com gcloud config set compute/zone. Para mais informações, consulte Como definir uma zona ou região padrão.

O comando gcloud compute forwarding-rules create permite a configuração de uma instância de destino como destino quando o esquema de balanceamento de carga é interno.

No exemplo a seguir, mostramos a criação de uma regra de encaminhamento para um pool de destino:

gcloud compute forwarding-rules create [FORWARDING_RULE] \
    --target-pool [TARGET_POOL] \
    [--region [REGION]]

Se você omitir a sinalização --region, a ferramenta de linha de comando gcloud solicitará que escolha uma região se não tiver definido a propriedade compute/region com gcloud config set compute/region. Para mais informações, consulte Como definir uma zona ou região padrão.

Para ver a descrição completa das sinalizações que podem ser usadas, consulte o comando create (em inglês) ou o tipo gcloud compute forwarding-rules create --help das regras de encaminhamento.

Para adicionar uma regra de encaminhamento usando a API, faça uma solicitação HTTP POST para o seguinte URI:

https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-central1/forwardingRules

O corpo da solicitação deve incluir os seguintes campos:

{
 "name": "example-forwarding-rule",
 "IPAddress": "`10.1.1.1",
 "IPProtocol": "TCP",
 "portRange": "80",
 "target": "zones/us-central1-f/targetInstances/example-target-instances"
}

Para informações sobre como listar regras de encaminhamento, acessar detalhes sobre uma regra específica e excluí-las, consulte as páginas de referência da API e do SDK de gcloud:

Instâncias de destino

Um recurso de instância de destino inclui uma instância de VM que processa o tráfego de uma ou mais regras de encaminhamento. Ele é ideal para encaminhar determinados tipos de tráfego de protocolo que devem ser gerenciados por uma única fonte (ex. ESP e AH), mas também é possível usar uma instância de destino para os protocolos TCP e UDP. As instâncias de destino não têm uma política de NAT aplicada a elas. Portanto, elas podem ser usadas para tráfego que exige tráfego IPsec sem NAT em redes privadas virtuais (VPN, na sigla em inglês).

As instâncias de destino precisam estar na mesma região que a regra de encaminhamento. Elas também precisam estar na mesma zona que a instância de VM. Por exemplo, se a regra de encaminhamento estiver em us-central1, e a instância que você quer usar estiver em us-central1-a, a instância de destino precisará estar em us-central1-a. Se a instância estiver em us-central1-b, a instância de destino também precisará estar em us-central1-b.

Adicionar uma instância de destino

Para adicionar uma nova instância de destino, use o comando gcloud compute target-instances ou crie uma solicitação HTTP POST para o conjunto targetInstances. Não é possível criar recursos de instância de destino usando o Console do GCP. No exemplo a seguir, mostramos como criar uma instância de destino usando a ferramenta de linha de comando gcloud:

gcloud compute target-instances create [TARGET_INSTANCE] --instance INSTANCE

Se você omitir a sinalização --zone, a ferramenta de linha de comando gcloud solicitará que escolha uma zona se não tiver definido a propriedade compute/zone com gcloud config set compute/zone. Para mais informações, consulte Como definir uma zona ou região padrão.

Para ver a descrição completa das sinalizações que podem ser usadas, consulte o comando create (em inglês) ou tipo gcloud compute target-instances create --help.

Na API, faça uma solicitação HTTP POST para o seguinte URI:

https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/targetInstances

Use o seguinte corpo de solicitação:

body = {
  "name": "example-target-instance",
  "instance": "zones/us-central1-f/instances/example-instance"
}

Para informações sobre como listar instâncias de destino, acessar detalhes sobre uma instância específica e excluí-las, consulte as páginas de referência da API e do SDK de gcloud:

Encaminhamento de protocolos para VIPs privados

O encaminhamento de protocolos pode ser usado para regras de encaminhamento regionais privadas com endereços privados (RFC 1918) (em inglês). Use esse recurso para configurar regras de encaminhamento particulares que enviem tráfego TCP ou UDP para uma instância de destino na mesma região. Também é possível alternar facilmente as regras de encaminhamento regionais particulares usando instâncias de destino para serviços de back-end e vice-versa.

Uma instância de destino contém uma instância de back-end que processa o tráfego de uma ou mais regras de encaminhamento. Apenas é possível configurar uma regra de encaminhamento privada a fim de apontar para cada instância de destino.

Regra de encaminhamento privada com uma instância de destino (clique para ampliar).
Regra de encaminhamento privada com uma instância de destino (clique para ampliar)

Use o encaminhamento de protocolos com regras de encaminhamento privadas nas situações a seguir.

  • Você quer implantar uma única instância de back-end para seu serviço e gerenciar verificações de integridade e outros aspectos por conta própria.
  • Você quer preservar um endereço de IP particular de regra de encaminhamento e alterar a instância de destino para onde a regra de encaminhamento aponta.
  • Você quer manter sua implantação estável, com capacidade de mudar facilmente para várias instâncias de back-end (serviço de back-end) de uma única instância (instância de destino) sem alterar o endereço IP da regra de encaminhamento privada.

Transição entre uma instância de destino e um serviço de back-end

É possível atualizar uma regra de encaminhamento particular de direcionar o tráfego para uma instância de destino com uma única instância de VM para direcionar o tráfego para um serviço de back-end ou o inverso. Quando a regra de encaminhamento privada é atualizada dessa maneira, o endereço IP dela é preservado. As conexões atuais podem ser interrompidas durante essa transição, porque a alteração ativa ou desativa o balanceamento de carga das instâncias do serviço de back-end.

Transição de um serviço de back-end para uma instância de destino (clique para ampliar).
Transição de um serviço de back-end para uma instância de destino (clique para ampliar)

Apenas é possível fazer a transição entre uma instância de destino e um serviço de back-end com regras de encaminhamento privadas. Não é possível fazer isso com encaminhamento de protocolos que usa regras de encaminhamento externas.

Como atualizar o destino de uma regra de encaminhamento privada

Se a regra de encaminhamento for particular, em vez de apontar para uma instância de destino, é possível apontar para um serviço de back-end:

    gcloud compute forwarding-rules set-target my-forwarding-rule
        --backend-service my-backend-service

É possível então voltar para uma instância de destino:

    gcloud compute forwarding-rules set-target my-forwarding-rule
        --target-instance my-target-instance

Como solucionar problemas de encaminhamento de protocolo para regras de encaminhamento particular

Restrição regional

O encaminhamento de protocolo para regras de encaminhamento particular é um produto regional. Todos os clientes e as VMs de instâncias de destino precisam estar na mesma região.

Mensagem de erro: "Uma instância de destino interna só pode ser o destino de uma regra de encaminhamento"

Se aparecer esta mensagem de erro An internal target instance can only be the target of one forwarding rule, talvez você esteja tentando configurar duas regras de encaminhamento que apontam para a mesma instância de destino. Não é possível apontar várias regras de encaminhamento para a mesma instância de destino.

Restrições

  • Quando você usa instâncias de destino com regras de encaminhamento privadas, os únicos protocolos permitidos são TCP e UDP.

Limites

  • É possível configurar 100 regras de encaminhamento privadas apontando para instâncias de destino por rede.

  • É possível ter cinco portas por regra de encaminhamento privada.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine