Saída de VPC direta

A saída de VPC direta oferece uma solução de rede de alta performance para que seu 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 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 do gerenciamento de instâncias de conector, tipos de máquinas 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 VPC direta não tem cobranças adicionais, e você não precisa pagar taxas mensais fixas pelas VMs do conector.
  • Melhor desempenho 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. Ele é escalonado tão rápido 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.

  • Compatível com registros de fluxo de VPC: é possível ativar os registros de fluxo de VPC na sua 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 seu 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 o uso de 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.

  • VPC direta: o App Engine não é compatível com a 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 da VPC direta.

  • Registros de fluxo de VPC: não mostram a versão do serviço do App Engine nos registros. O nome do serviço aparece 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 ou uma sub-rede, ou ambas. Se você especificar apenas uma rede, a sub-rede vai usar o mesmo nome. O App Engine aloca endereços IP da sua 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 mudar 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 sua 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 IPv4 compatíveis para mais opções.

Para excluir a sub-rede, primeiro exclua ou reimplemente o serviço do App Engine para interromper o uso da sub-rede e aguarde de uma a duas horas.

Consumo de endereços IP para serviços

No estado estável, o App Engine usa duas vezes (2X) o número de endereços IP em relação ao 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 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 sua 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 seu 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 direta de VPC, 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.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 direta da VPC

Para permitir que um serviço do App Engine novo ou atual 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 ou uma sub-rede, ou ambas. Se você especificar apenas uma rede, a sub-rede usará o mesmo nome.

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

    • Opcional: NETWORK_TAGS: uma lista de tags de rede para associar às instâncias do serviço do App Engine e usar 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 beta app deploy

Desconectar um serviço

Para desconectar seu 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 sua sub-rede. Use as seguintes estratégias para gerenciar seus endereços IP:

  • Intervalo de IP recomendado: para ter a 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, use intervalos não RFC 1918, como a classe E (240.0.0.0/4) na sua 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.

  • Provisione IPs em excesso: recomendamos provisionar em excesso o número de IPs disponíveis na sua sub-rede para evitar o esgotamento. Assim como nos 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

Nesta seção, descrevemos os erros comuns que podem ocorrer ao implantar o serviço do App Engine com saída direta da VPC.

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 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. Confira alguns problemas comuns:

  • Metadados da 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 insuficientes do IAM. Conceda as permissões necessárias à 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 vai conseguir 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ços IP

Vazamentos de endereços IP podem levar ao esgotamento deles. É improvável que ocorram vazamentos de endereço IP durante operações padrão, mas eles podem acontecer pelos 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 no projeto enquanto as reservas de endereços sem servidor estavam ativas.
  • Seu projeto Google Cloud foi excluído e restaurado depois que as reservas de endereços 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 tem 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 à conta de serviço de implantação.

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

    Console

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

      Acessar endereços IP

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