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.yamldo 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:
Antes de começar
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.
Ative as API Compute Engine e Cloud Build:
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.getcompute.subnetworks.getcompute.subnetworks.useno projeto host ou na sub-rede específicacompute.addresses.getcompute.addresses.listcompute.addresses.createcompute.addresses.deletecompute.addresses.createInternalcompute.addresses.deleteInternalcompute.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
Adicione a seguinte configuração
vpc_accessao arquivoapp.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.
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.
Adicione o seguinte bloco
vpc_accessa um recursogoogle_app_engine_standard_app_versionna 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 recursogoogle_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 recursogoogle_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.
- NETWORK: o nome da rede VPC atual
a que as instâncias do aplicativo se conectam, por exemplo,
Se a versão já estiver implantada sem a saída de VPC direta, atualize o campo
version_idpara um novo valor. Não é possível ativar a saída de VPC direta em uma versão atual.Aplique a configuração:
terraform apply
Desconectar um serviço
Para desconectar o serviço da rede VPC, use YAML ou Terraform:
YAML
Remova a seção
vpc_accessdo arquivoapp.yaml.Reimplante o serviço:
gcloud app deploy
Terraform
Remova o bloco
vpc_accessdo recursogoogle_app_engine_standard_app_versionna configuração do Terraform.Atualize o campo
version_idcom um novo valor. Não é possível desativar a saída de VPC direta em uma versão atual.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 arquivoapp.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:
- Conta de serviço do Cloud Build (
roles/cloudbuild.builds.builder) - Criador do token da conta de serviço (
roles/iam.serviceAccountTokenCreator)
- Conta de serviço do Cloud Build (
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:
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>=WARNINGSe essa consulta não retornar resultados, não há vazamentos de endereço IP e nenhuma outra ação é necessária.
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.Exclua manualmente os endereços IP vazados usando o console do Google Cloud ou a Google Cloud CLI:
Console
Acesse a página Endereços IP no console do Google Cloud :
Selecione os endereços IP vazados que você identificou na etapa anterior executando a consulta.
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.