Saída de VPC direta

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

Principais vantagens

  • 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.
  • Custo-benefício: o uso da saída VPC direta não tem custo adicional, e você não precisa pagar cobranças mensais fixas pelas VMs do conector.
  • Melhoria no desempenho e na 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 com os recursos da rede VPC. Ele é escalonado 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 de serviço do App Engine, permitindo regras de firewall e políticas de rede precisas e específicas do serviço.

  • Suporte a registros de fluxo de VPC: é possível ativar os registros de fluxo de VPC na sub-rede para registrar o tráfego de saída do serviço do App Engine.

Limitações

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

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

  • Inicializações a frio: os tempos iniciais de inicialização a frio 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 é compatível com a 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.

  • Registros de fluxo de VPC: não exibe a versão do serviço do App Engine nos registros. O nome do serviço é exibido no campo AppEngineServiceDetails.

Alocação de endereço IP

Para colocar o serviço do App Engine em uma rede VPC, especifique uma rede VPC, uma sub-rede ou ambas. Se você especificar apenas uma rede, a sub-rede vai 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.

Aumentar 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ços IP para serviços

No estado estável, o App Engine usa duas vezes (2X) mais endereços IP do que 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 o dobro do número de endereços IP, além de um buffer para as atualizações de versão.

Por exemplo, se você fizer upgrade das versões para que version 1 seja escalonado 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 IPv4 compatíveis

O App Engine é compatível com os 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 as API Compute Engine e 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

Verifique se o App Engine tem acesso à rede VPC concedendo os seguintes papéis à conta de serviço de implantação:

  • 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." \
    --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 novo ou atual do App Engine se conecte diretamente à sua 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, uma sub-rede ou ambas. Se você especificar apenas uma rede, a sub-rede vai 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, uma sub-rede ou ambas. Se você especificar apenas uma rede, a sub-rede vai usar o mesmo nome da rede.

    • Opcional: NETWORK_TAGS: uma lista de tags de rede para associar à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 é compatível com as seguintes configurações:

      • all-traffic: todas as solicitações de saída são roteadas pela rede VPC.
      • private-ranges-only (padrão): somente 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 seus 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 o escalonamento.

  • Superprovisionar IPs: recomendamos superprovisionar o número de IPs disponíveis na sub-rede para evitar o esgotamento. Assim como nos serviços do Cloud Run, normalmente é necessário usar quatro vezes mais IPs (duas vezes para o estado estável e mais duas vezes durante a implantação) do que o número de instâncias em execução para facilitar o escalonamento e as atualizações.

Isolar o tráfego da internet de saída

Por padrão, quando vpc_egress é definido como private-ranges-only, o App Engine envia o tráfego da internet de saída por um pool regional de endereços IP dinâmicos compartilhados entre cargas de trabalho sem servidor. Não use esse pool compartilhado padrão para cargas de trabalho que dependem da reputação de IP ou geram tráfego de sondagem de alto volume.

Em vez disso, defina vpc_egress: all-traffic e encaminhe o tráfego de saída pelo Cloud NAT com endereços IP de saída estáticos dedicados nestes casos:

  • Seu serviço se conecta a endpoints externos sensíveis à reputação, como gateways de pagamento, bancos de dados hospedados ou APIs de parceiros por trás de firewalls de aplicativos da Web (WAFs) de terceiros. Os endereços IP estáticos dedicados evitam que o tráfego ruidoso de outros locatários no pool compartilhado acione bloqueios de WAF externos ou erros HTTP 403.
  • Seu serviço executa verificação de rede autorizada, enumeração de portas, impressão digital de host, sondagem de vulnerabilidade, extração de dados da Web ou teste de carga. A execução dessas cargas de trabalho no pool de IPs compartilhados padrão degrada a reputação do IP, pode interromper o serviço para outros clientes em violação da Política de Uso Aceitável doGoogle Cloud e pode fazer com que o Google limite ou suspenda sua carga de trabalho.

Ao executar cargas de trabalho de verificação autorizada ou de alta conexão pelo Cloud NAT, aloque endereços IP estáticos suficientes e configure a reserva de portas para evitar o esgotamento de portas.

Resolver problemas

Nesta seção, descrevemos os erros comuns que podem ocorrer ao implantar o serviço do App Engine com a 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 uma ou duas horas para que o App Engine libere os endereços IP antes de excluir a sub-rede.

Falhas na implantação

Se a implantação falhar, a Google Cloud CLI vai exibir mensagens de erro indicando a causa raiz. Veja alguns problemas comuns:

  • Metadados de VPC incorretos, como um nome de rede ou sub-rede com erro de ortografia no arquivo app.yaml. Para corrigir possíveis erros, revise a configuração da VPC no arquivo app.yaml.

  • Permissões do IAM insuficientes. Conceda as permissões necessárias na conta de serviço de implantação. Se você encontrar erros de permissão durante a implantação, conceda os seguintes papéis adicionais à conta de serviço:

Esgotamento de endereços IP

Se a sub-rede ficar sem endereços IP disponíveis, o App Engine não conseguirá iniciar novas instâncias e 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

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

  • Sua 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).
  • Sua conta de serviço foi excluída enquanto outras reservas de endereço Google Cloud estavam ativas.
  • A conta do Cloud Billing foi removida e reativada posteriormente no projeto enquanto as reservas de endereços sem servidor estavam ativas.
  • Seu projeto do Google Cloud foi excluído e restaurado posteriormente, 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 há vazamentos de endereço IP e nenhuma outra ação é 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 não for possível usar esse papel, conceda outros papéis e permissões necessários na conta de serviço de implantação.

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

    Console

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

      Acessar endereços IP

    2. Selecione os endereços IP vazados que você identificou 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.