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 da 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.

  • Compatível com o Cloud NAT: é possível configurar um gateway do Cloud NAT na sub-rede para fornecer serviços NAT, como Public NAT ou Private NAT, para 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: por padrão, é possível configurar até 100 instâncias por versão do App Engine para usar a saída de VPC direta. É possível solicitar um aumento de cota para esse limite se a carga de trabalho exigir mais instâncias.

  • 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.

  • Disponibilidade regional: a saída de VPC direta está disponível apenas por convite em determinadas regiões. Para solicitar acesso nessas regiões, entre em contato com o suporte.

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 reduz escala vertical, 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 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 ao agente de serviço do App Engine:

  • 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) ao 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

É possível configurar a saída de VPC direta para um serviço do App Engine usando YAML ou Terraform. Para ativar ou desativar a saída de VPC direta, implante uma nova versão e migre o tráfego para ela. Também é possível excluir a versão implantada primeiro, em vez de substituir um ID de versão existente.

YAML

  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 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 usará o mesmo nome da rede.

    • Opcional: NETWORK_TAGS lista as 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 é 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. Execute o comando abaixo para fazer a implantação no App Engine:

    gcloud app deploy

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

  1. Adicione o seguinte bloco vpc_access a um recurso google_app_engine_standard_app_version na configuração do Terraform:

    vpc_access {
    vpc_egress = "EGRESS_SETTING"
    network_interfaces {
     network    = "NETWORK"
     subnetwork = "SUBNET"
     tags       = ["TAG_1", "TAG_2"]
    }
    }

    Substitua:

    • NETWORK: o nome da rede VPC 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 usará o mesmo nome da rede. Também é possível referenciar um nome de recurso google_compute_network (por exemplo, google_compute_network.custom.name).
    • 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 usará o mesmo nome da rede. Também é possível referenciar um nome de recurso google_compute_subnetwork (por exemplo, google_compute_subnetwork.custom.name).
    • Opcional: TAG_1, TAG_2 lista as 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 é compatível com as seguintes configurações:
    • ALL_TRAFFIC: todas as solicitações de saída são roteadas pela rede VPC.
    • PRIVATE_IP_RANGES (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. Se a versão já estiver implantada sem a saída de VPC direta, atualize o campo version_id para um novo valor. Não é possível ativar a saída de VPC direta em uma versão atual.

  3. Aplique a configuração:

    terraform apply

Desconectar um serviço

Para desconectar o serviço da rede VPC, use YAML ou Terraform:

YAML

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

  2. Reimplante o serviço:

    gcloud app deploy

Terraform

  1. Remova o bloco vpc_access do recurso google_app_engine_standard_app_version na configuração do Terraform.

  2. Atualize o campo version_id com um novo valor. Não é possível desativar a saída de VPC direta em uma versão atual.

  3. Aplique a configuração:

    terraform apply

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. Executar essas 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. Verifique se você concedeu as permissões necessárias ao agente de serviço do App Engine. Se você encontrar erros de permissão durante a implantação, conceda os seguintes papéis adicionais à conta de serviço de implantaçã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

Os 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 às seguintes causas:

  • O agente de serviço do App Engine só tem permissões para reservar endereços (create, createInternal) e não tem permissões para liberar endereços (delete, deleteInternal).
  • O agente de serviço do App Engine foi excluído enquanto outras reservas de endereço Google Cloud estavam ativas.
  • A conta do Cloud Billing foi removida e reativada 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 o agente de serviço do App Engine tem o papel de agente de serviço do App Engine (roles/appengine.serviceAgent). Se não for possível usar esse papel, conceda os outros papéis e permissões necessários ao agente de serviço do App Engine.

  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.