Como usar encaminhamento de protocolo

Com o encaminhamento de protocolo do Google Compute Engine, é possível criar objetos de regra de encaminhamento que possibilitam o envio de pacotes para uma instância de destino sem a conversão de endereços de rede (NAT, na sigla em inglês). Cada instância de destino contém uma única instância de máquina virtual onde o tráfego é recebido e processado de acordo com as regras de encaminhamento correspondentes.

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

  • hospedagem virtual por IPs

    Defina múltiplas regras de encaminhamento que apontem para uma única instância de destino, o que permite usar vários endereços IP externos com uma instância de máquina virtual. Use esse recurso em cenários onde você queira veicular dados de uma única instância de máquina virtual por meio de diferentes endereços IP externos. Isso é especialmente útil na configuração de hospedagem virtual SSL.

  • redes privadas virtuais (VPN, na sigla em inglês)

    Consulte VPN para usar regras de encaminhamento com VPN.

  • **VIPs particulares**

    É possível usar o encaminhamento de protocolo para regras de encaminhamento regionais particulares com endereços particulares (RFC 1918). 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. Você também pode alternar as regras de encaminhamento regionais particulares usando instâncias de destino para serviços de back-end e vice-versa.

  • Balanceamento de carga

    Consulte Balanceamento de carga para informações sobre como encaminhar o tráfego para um balanceador de carga.

Para hospedagem virtual por IPs, redes privadas virtuais (VPN, na sigla em inglês) e balanceamento de carga, o Google Compute Engine oferece suporte ao encaminhamento de protocolo para os seguintes protocolos:

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

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

Guia de início rápido

Neste 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:

  1. Crie uma instância de destino.

    Essa instância de destino contém uma única instância de máquina virtual, que já pode existir no momento da criação da instância 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 correspondem ao protocolo IP e, se aplicável, ao intervalo de portas definidos para a regra de encaminhamento, o tráfego é direcionado para essa instância.

Nas instruções a seguir, as etapas acima serão demonstradas com detalhes:

  1. Configurar um servidor Apache em uma instância de máquina virtual.
  2. Criar uma instância de destino e as regras de encaminhamento correspondentes.
  3. Enviar tráfego para uma única instância de destino.

Quando terminar esse guia de início rápido, você terá condições de configurar o encaminhamento de protocolo de múltiplas regras de encaminhamento para uma única instância de destino.

Configurar uma instância de máquina virtual e instalar o Apache

Para começar, vamos criar uma única instância de máquina virtual com o Apache instalado.

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

    Dependendo do sistema operacional, o script de inicialização pode ser diferente:

    • Se quer 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 quer 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 a futura máquina virtual, para que possamos aplicar um firewall nela posteriormente:

    me@local:~$ TAG="www-tag"
    
  3. Crie uma nova instância de máquina virtual para processar o tráfego para as 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 que permita tráfego externo para essa instância de máquina virtual:

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

Você acabou de configurar uma instância de máquina virtual. Agora comece a configurar o encaminhamento de protocolo.

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

  1. Crie uma instância de destino.

    As instâncias de destino contêm uma única instância de máquina virtual 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 usando protocolos IPsec diretamente.

    Crie uma instância de destino antes de um objeto de regra de encaminhamento. É necessário que essas regras façam referência 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 detalhes, revise a documentação de regras de encaminhamento.

    Neste exemplo, três regras de encaminhamento serão criadas com os comandos a seguir, cada uma delas contendo um endereço IP temporário que encaminha o tráfego TCP para a instância de destino. Se você tiver alguns endereços IP externos estáticos, é possível usá-los 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
    

É isso aí! 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 receber os endereços IP externos das regras de encaminhamento. Por exemplo, a tabela a seguir lista os endereços IP temporários alocados para as regras de encaminhamento criadas anteriormente.

    Caso você tenha optado por usar endereços IP reservados, eles serão listados 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 do Apache na instância de máquina virtual para veicular diferentes informações com base no URL de destino.

    Primeiro, conecte-se à sua instância com SSH:

    gcloud compute ssh pf-instance
    

    Em seguida, edite o arquivo /etc/apache2/sites-enabled/000-default.conf e adicione as linhas a seguir. Nas linhas VirtualHostcd .., use os endereços IP que você viu ao executar 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, enviaremos uma solicitação para os endereços IP externos veiculados pelas regras de encaminhamento que criamos.

    Use o curl para enviar o tráfego para os endereços IP. A resposta retornada será 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
    

    É isso aí! Você fez sua primeira configuração de encaminhamento de protocolo!

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 a considerar ao trabalhar com regras de encaminhamento:

  • O nome da regra de encaminhamento deve ser único no projeto, ter entre 1 e 63 caracteres e corresponder à 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 outros podem ser um travessão, uma letra minúscula ou um dígito, exceto o último caractere, que não pode ser um travessão.

  • 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 pool 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 porta somente podem ser especificados por 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 a coleção Regras de encaminhamento. Este é 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 você escolha uma zona caso você não tenha configurado a propriedade compute/zone com gcloud config set compute/zone. Para mais informações, leia Como configurar uma zona ou região padrão.

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

Aqui está um exemplo de criação de 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 você escolha uma região caso você não tenha configurado a propriedade compute/region com gcloud config set compute/region. Para mais informações, leia Como configurar uma zona ou região padrão.

Para ver uma descrição completa das sinalizações permitidas, consulte o comando create das regras de encaminhamento ou digite gcloud compute forwarding-rules create --help.

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

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

O corpo da solicitação deve conter 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"
}

Listar regras de encaminhamento

Para receber uma lista de regras de encaminhamento usando a ferramenta de linha de comando gcloud, execute o comando list:

gcloud compute forwarding-rules list

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

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

Receber informações sobre regras de encaminhamento

Para receber informações sobre uma única regra de encaminhamento com a ferramenta de linha de comando gcloud, use o comando describe:

gcloud compute forwarding-rules describe [FORWARDING_RULE] [--region [REGION] | --global]

Se você omitir a sinalização --region ou --global, a ferramenta de linha de comando gcloud presumirá que você está operando com uma regra de encaminhamento regional e solicitará que você escolha uma região caso você não tenha configurado a propriedade compute/region com gcloud config set compute/region. Para mais informações, leia Como configurar uma zona ou região padrão.

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

https://www.googleapis.com/compute/v1/project/myproject/regions/us-central1/forwardingRules/example-forwarding-rule

Atualizar o destino da regra de encaminhamento

Se você já tiver criado uma regra de encaminhamento, mas quiser alterar o pool de destino utilizado por ela, faça isso com a ferramenta de linha de comando gcloud por meio do comando set-target:

gcloud compute forwarding-rules set-target [FORWARDING_RULE] --target-pool [TARGET_POOL] \
    [--region [REGION] | --global]

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

https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/forwardingRules/example-forwarding-rule/setTarget

O corpo da solicitação precisa conter o URL para o recurso da instância ou pool de destino que quer configurar. Por exemplo, no caso de pools de destino, o formato do URI deve ser:

{
  "target": "https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/targetPools/example-target-pool"
}

Excluir regras de encaminhamento

Para excluir uma regra de encaminhamento com a ferramenta de linha de comando gcloud, use o comando delete:

gcloud compute forwarding-rules delete [FORWARDING_RULE] [--region [REGION] | --global]

Para excluir uma regra de encaminhamento usando a API, faça uma solicitação HTTP DELETE com o corpo da solicitação vazio para o seguinte URI:

https://www.googleapis.com/compute/v1/project/myproject/regions/us-central1/forwardingRules/example-forwarding-rule

Instâncias de destino

Um recurso de instância de destino contém uma instância de máquina virtual que processa o tráfego de uma ou mais regras de encaminhamento. Ele é ideal para encaminhar determinados tipos de tráfego de protocolo que precisam ser gerenciados por uma única origem como ESP e AH. Porém, ele também pode ser usado para os protocolos TCP e UDP. As instâncias de destino não têm uma política de NAT aplicada, por isso podem ser usadas quando o tráfego IPsec sem NAT é necessário nas 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. As instâncias de destino também precisam estar na mesma zona que a instância da máquina virtual. Por exemplo, se a regra de encaminhamento está na us-central1 e a instância que você quer usar está na us-central1-a, a instância de destino precisa estar na us-central1-a. Se a instância está na us-central1-b, a instância de destino também precisa estar na 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 a coleção targetInstances. Não é possível criar recursos de instâncias de destino por meio do Console do GCP. Este é um exemplo de 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 caso não tenha configurado a propriedade compute/zone com gcloud config set compute/zone. Para mais informações, leia Como configurar uma zona ou região padrão.

Para ver uma descrição completa das sinalizações permitidas, use o comando create ou digite gcloud compute target-instances create --help.

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

https://www.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"
}

Listar instâncias de destino

Para listar as instâncias de destino com a ferramenta de linha de comando gcloud, use o comando list:

gcloud compute target-instances list

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

https://www.googleapis.com/compute/v1/projects/myproject/aggregatedList/targetInstances

Receber uma instância de destino

Para receber informações sobre uma única instância de destino com a ferramenta de linha de comando gcloud, use o comando describe:

gcloud compute target-instances describe [TARGET_INSTANCE]

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

https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/targetInstances/<target-instance>

Excluir uma instância de destino

Para excluir uma instância de destino, primeiro verifique se não há nenhuma regra de encaminhamento que faça referência a ela. Caso alguma regra faça referência à instância que você quer excluir, exclua essa regra para remover a referência.

Depois de remover todas as referências à instância de destino das regras de encaminhamento, será possível excluir essa instância usando a ferramenta de linha de comando gcloud, por meio do comando delete:

gcloud compute target-instances delete [TARGET_INSTANCE]

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

https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/targetInstances/<target-instance>

Encaminhamento de protocolo para VIPs particulares

O encaminhamento de protocolo pode ser usado para regras de encaminhamento regionais particulares com endereços particulares (RFC 1918). 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. Você também pode 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 lida com o tráfego de uma ou mais regras de encaminhamento. Você só pode configurar uma regra de encaminhamento particular para apontar para cada instância de destino.

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

Use o encaminhamento de protocolo com regras de encaminhamento particular nas circunstâncias a seguir.

  • Você quer implantar uma única instância de back-end para o 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, tendo a 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 particular.

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

Você pode 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 particular é atualizada dessa maneira, o endereço IP é preservado. As conexões existentes podem ser interrompidas durante essa transição, porque a alteração ativa ou desativa o balanceamento de carga de 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)

Você pode fazer a transição entre uma instância de destino e um serviço de back-end somente com regras de encaminhamento particular. Não é possível fazer isso no caso do encaminhamento de protocolo com regras de encaminhamento externo.

Como atualizar o destino de uma regra de encaminhamento particular

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

Você pode 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 a mensagem de erro An internal target instance can only be the target of one forwarding rule for exibida, talvez você esteja tentando configurar duas regras de encaminhamento apontando 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 particular, os únicos protocolos compatíveis são TCP e UDP.

Limites

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

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

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

Enviar comentários sobre…

Documentação do Compute Engine