Saída de VPC direta

A saída de VPC direta oferece uma solução de rede de alta performance para que o serviço do App Engine envie tráfego a uma rede de nuvem privada virtual (VPC). A saída de VPC direta permite que as cargas de trabalho acessem os recursos da rede VPC sem problemas e elimina a necessidade de configurar conectores de acesso VPC sem servidor.

Principais benefícios

  • Gerenciamento simplificado: elimina a sobrecarga operacional de gerenciar instâncias de conector, tipos de máquina e configurações de escalonamento. O App Engine processa as configurações diretamente no arquivo app.yaml do serviço.
  • Eficiência de custos: o uso da saída de VPC direta não tem custo adicional, e você não precisa pagar taxas mensais fixas pelas VMs do conector.
  • Melhor performance e confiabilidade: ao eliminar a necessidade de usar um conector, a saída de VPC direta oferece uma conexão mais rápida e confiável aos recursos da rede VPC. Ela é escalonada tão rapidamente quanto o serviço do App Engine e evita quedas de conexão que podem ocorrer com conectores durante a manutenção.
  • Segurança granular: é possível aplicar tags de rede diretamente às versões do serviço do App Engine, permitindo regras de firewall e políticas de rede precisas e específicas do serviço.

Limitações

  • Consumo de endereço IP: o uso de endereço IP do serviço é escalonado diretamente com o número de instâncias em execução, e a capacidade de escalonamento é limitada pelo número de endereços IP disponíveis na sub-rede escolhida.

  • Eventos de manutenção: o serviço pode sofrer breves interrupções de conexão durante eventos de manutenção da infraestrutura de rede. Recomendamos o uso de bibliotecas de cliente para processar redefinições de conexão ocasionais.

  • Inicializações a frio: os tempos de inicialização a frio iniciais dependem da região e do caso de uso específico. Em casos raros, as inicializações a frio podem durar até um minuto.

  • Entrada de VPC direta: o App Engine não oferece suporte à entrada de VPC direta.

  • Número de instâncias: é possível configurar até 100 instâncias por versão do App Engine para usar a saída de VPC direta.

Alocação de endereço IP

Para colocar o serviço do App Engine em uma rede VPC, especifique uma rede VPC ou uma sub-rede, ou ambas. Se você especificar apenas uma rede, a sub-rede usará o mesmo nome da rede. O App Engine aloca endereços IP da sub-rede.

Os endereços IP são temporários. Portanto, não crie políticas com base em IPs individuais. Se você precisar criar uma política com base em IPs, como em regras de firewall, use o intervalo de endereços IP de toda a sub-rede.

Para alterar a rede ou sub-rede que o serviço usa, implante uma nova versão que use os novos valores de rede e sub-rede.

Escalonar verticalmente e reduzir escala vertical

Para um escalonar verticalmente mais rápido durante um aumento de tráfego, o App Engine reserva endereços IP em blocos de 16 (máscara de sub-rede 28) por vez. Para garantir que você tenha endereços IPv4 suficientes disponíveis para uso no App Engine, o intervalo de endereços IPv4 da sub-rede precisa ser /26 ou maior.

Para aumentar a eficiência da alocação de IP e facilitar o gerenciamento, coloque vários recursos na mesma sub-rede. Se o espaço de endereços IPv4 for limitado, consulte Intervalos de IPv4 compatíveis para mais opções.

Para excluir a sub-rede, é preciso primeiro excluir ou reimplantar o serviço do App Engine para interromper o uso da sub-rede e aguardar de uma a duas horas.

Consumo de endereço IP para serviços

No estado estável, o App Engine usa duas vezes (2X) o número de endereços IP como o número de instâncias. Quando uma versão é reduzida, o App Engine retém os endereços IP por até 20 minutos. No total, reserve pelo menos 2X o número de endereços IP, além de um buffer para contabilizar as atualizações de versão.

Por exemplo, se você fizer upgrade das versões para que version 1 seja escalonada de 100 instâncias para zero, enquanto version 2 escalona de zero para 100, o App Engine mantém os endereços IP version 1 por até 20 minutos após a redução. Durante a janela de retenção de 20 minutos, é preciso reservar pelo menos 400 endereços IP ((100 + 100) * 2).

Intervalos de IPv4 compatíveis

O App Engine oferece suporte aos seguintes intervalos IPv4 para a sub-rede:

  • RFC 1918
    • 10.0.0.0/8
    • 172.16.0.0/12
    • 192.168.0.0/16
  • RFC 6598
    • 100.64.0.0/10
  • Classe E
    • 240.0.0.0/4

Antes de começar

  1. Verifique se você tem uma rede VPC e uma sub-rede no projeto. Se você ainda não tiver uma VPC, siga as instruções para criar uma em Criar uma rede VPC.

  2. Ative a API Compute Engine e a API Cloud Build:

    Ativar APIs

  3. Para usar a saída de VPC direta, verifique se você está executando a versão mais recente da Google Cloud CLI:

    gcloud components update

Funções exigidas

Conceda as seguintes funções à conta de serviço de implantação para garantir que o App Engine tenha acesso à rede VPC:

  • Papel de agente de serviço do App Engine: por padrão, o agente de serviço do App Engine tem o papel de agente de serviço do App Engine (roles/appengine.serviceAgent) que contém as permissões necessárias.

  • Permissões personalizadas: para ter um controle mais granular, conceda ao agente de serviço do App Engine as seguintes permissões extras no projeto:

    • compute.networks.get
    • compute.subnetworks.get
    • compute.subnetworks.use no projeto host ou na sub-rede específica
    • compute.addresses.get
    • compute.addresses.list
    • compute.addresses.create
    • compute.addresses.delete
    • compute.addresses.createInternal
    • compute.addresses.deleteInternal
    • compute.regionOperations.get
  • Papel de usuário da rede do Compute: se você não usar o papel padrão do Agente de serviço do App Engine ou as permissões personalizadas, conceda o papel de usuário da rede do Compute (roles/compute.networkUser) na conta de serviço do Agente de serviço do App Engine. As sub-redes com IPv6 externo também exigem o papel de administrador de IP público do Compute (roles/compute.publicIpAdmin).

    Por exemplo, para conceder o papel de usuário da rede do Compute, execute o seguinte comando:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-gae-service.iam.gserviceaccount.com" \
    --role "roles/compute.networkUser"

    Substitua:

    • PROJECT_ID: ID do projeto.
    • PROJECT_NUMBER: o número do projeto em que você implanta o serviço do App Engine.

Configurar um serviço do App Engine com saída de VPC direta

Para permitir que um serviço do App Engine novo ou atual se conecte diretamente à rede VPC, siga estas etapas:

  1. Adicione a seguinte configuração vpc_access ao arquivo app.yaml:

    vpc_access:
      network_interface:
        network: NETWORK
        subnet: SUBNET
        tags:
            - NETWORK_TAGS
      vpc_egress: EGRESS_SETTING

    Substitua:

    • NETWORK: o nome da rede atual a que as instâncias do aplicativo se conectam, por exemplo, default. Especifique uma rede VPC ou uma sub-rede, ou ambas. Se você especificar apenas uma rede, a sub-rede usará o mesmo nome da rede.

    • SUBNET: o nome da sub-rede atual a que as instâncias do aplicativo se conectam, por exemplo, default. Especifique uma rede VPC ou uma sub-rede, ou ambas. Se você especificar apenas uma rede, a sub-rede usará o mesmo nome da rede.

    • Opcional: NETWORK_TAGS: uma lista de tags de rede a serem associadas às instâncias do serviço do App Engine para uso em regras de firewall e políticas de roteamento.

    • Opcional: EGRESS_SETTING: controla como o tráfego de saída é roteado. Esse campo oferece suporte às seguintes configurações:

      • all-traffic: todas as solicitações de saída são roteadas pela rede VPC.
      • private-ranges-only (padrão): apenas o tráfego para endereços IP internos é roteado pela rede VPC. O tráfego da Internet usa o caminho padrão do App Engine.
  2. Implante no App Engine executando o seguinte comando:

    gcloud beta app deploy

Desconectar um serviço

Para desconectar o serviço da rede VPC:

  1. Remova a seção vpc_access do arquivo app.yaml.

  2. Reimplante o serviço:

    gcloud beta app deploy

Práticas recomendadas para gerenciamento de IP

É necessário gerenciar os endereços IP, já que cada instância do serviço consome um endereço IP da sub-rede. Use as seguintes estratégias para gerenciar seus endereços IP:

  • Intervalo de IP recomendado: para melhor compatibilidade, recomendamos começar com o intervalo RFC 6598 (100.64.0.0/10).

  • Intervalos de IP alternativos: se você já estiver usando o intervalo de IP recomendado de 100.64.0.0/10, poderá usar intervalos não RFC 1918, como a classe E (240.0.0.0/4) na sub-rede.

  • Dimensionamento da sub-rede: verifique se o intervalo de endereços IPv4 da sub-rede é /26 ou maior para fornecer endereços suficientes para escalonamento.

  • Provisionar IPs em excesso: recomendamos provisionar o número de IPs disponíveis na sub-rede para evitar o esgotamento. Semelhante aos serviços do Cloud Run, geralmente é necessário usar quatro vezes mais IPs (2X para estado estável e mais 2X durante a implantação) do que o número de instâncias em execução para facilitar o escalonamento e as atualizações.

Resolver problemas

Esta seção descreve os erros comuns que podem ocorrer ao implantar o serviço do App Engine com saída de VPC direta.

Não consigo excluir uma sub-rede

Para excluir uma sub-rede, primeiro você precisa excluir ou reimplantar todos os recursos que a utilizam. Se o App Engine estiver usando uma sub-rede, desconecte o serviço do App Engine da rede VPC ou mova-o para uma sub-rede diferente antes de excluir a sub-rede.

Depois de excluir ou mover o serviço do App Engine, aguarde de uma a duas horas até que o App Engine libere os endereços IP antes de excluir a sub-rede.

Falhas de implantação

Se a implantação falhar, a Google Cloud CLI vai mostrar mensagens de erro indicando a causa raiz. Alguns problemas comuns incluem o seguinte:

Esgotamento do endereço IP

Se a sub-rede ficar sem endereços IP disponíveis, o App Engine não vai iniciar novas instâncias e vai registrar um erro. Para resolver esse problema, expanda o intervalo de IP da sub-rede ou mova o serviço para uma sub-rede maior.

Vazamentos de endereço IP

Os vazamentos de endereço IP podem levar ao esgotamento do endereço IP. Os vazamentos de endereço IP são improváveis durante as operações padrão, mas podem ocorrer devido aos seguintes motivos:

  • A conta de serviço de implantação só tem permissões para reservar endereços (create, createInternal) e não tem permissões para liberar endereços (delete, deleteInternal).
  • A conta de serviço foi excluída enquanto outras Google Cloud reservas de endereço estavam ativas.
  • A conta do Cloud Billing foi removida e reativada no projeto enquanto as reservas de endereço sem servidor estavam ativas.
  • O Google Cloud projeto foi excluído e restaurado enquanto as reservas de endereço sem servidor ainda existiam.

Para resolver o problema, siga estas etapas:

  1. Consulte os seguintes registros na Análise de registros para identificar os endereços vazados:

    protoPayload.authorizationInfo.permission=~"compute.addresses.delete.*"
    protoPayload.authorizationInfo.resourceAttributes.type="compute.addresses"
    protoPayload.resourceName=~"projects/.*/regions/.*/addresses/serverless-.*"
    severity>=WARNING
    

    Se essa consulta não retornar resultados, não haverá vazamentos de endereço IP e nenhuma outra ação será necessária.

  2. Se a consulta retornar resultados, verifique se a conta de serviço de implantação contém o papel de agente de serviço do App Engine (roles/appengine.serviceAgent). Se você não puder usar esse papel, verifique se você concede outras funções e permissões necessárias na sua conta de serviço de implantação.

  3. Exclua manualmente os endereços IP vazados usando o Google Cloud console ou a Google Cloud CLI:

    Console

    1. Acesse a página Endereços IP no Google Cloud console:

      Acessar endereços IP

    2. Selecione os endereços IP vazados identificados na etapa anterior executando a consulta.

    3. Clique em Liberar endereço estático para remover os endereços vazados.

    gcloud

    Execute o comando gcloud compute addresses delete:

    gcloud compute addresses delete ADDRESS_NAME --region=REGION

    Substitua:

    • ADDRESS_NAME: o nome do endereço IP vazado.
    • REGION: a região do endereço IP vazado.