Saída de VPC direta com uma rede VPC compartilhada

É possível ativar seu serviço do App Engine para que envie tráfego a uma rede VPC compartilhada usando a saída de VPC direta sem precisar de um conector de acesso VPC sem servidor.

Nesta página, descrevemos como configurar as permissões do IAM do App Engine para usar a sub-rede da rede VPC compartilhada e, em seguida, colocar o serviço na sub-rede compartilhada.

Antes de começar

Consulte a seção Alocação de endereços IP para orientações sobre como alocar endereços IP da sua sub-rede.

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

Configurar permissões do IAM

Antes que o App Engine em um projeto de serviço de VPC compartilhada possa acessar uma rede VPC compartilhada, verifique se o agente de serviço do App Engine tem permissões suficientes para usar a sub-rede.

  • Papel de agente de serviço do App Engine: para acessar a rede VPC compartilhada, conceda permissões suficientes ao agente de serviço do App Engine adicionando um dos seguintes papéis:

    • Usuário da rede do Compute (roles/compute.networkUser) no projeto host da VPC compartilhada. 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 HOST_PROJECT_ID \
      --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-gae-service.iam.gserviceaccount.com" \
      --role "roles/compute.networkUser"

      Substitua:

      • HOST_PROJECT_ID: o ID do seu projeto host da VPC compartilhada;
      • SERVICE_PROJECT_NUMBER: o número do projeto de serviço da VPC compartilhada em que você implanta o serviço do App Engine.
    • Leitor da rede do Compute (compute.networkViewer) no projeto host da VPC compartilhada e o papel Usuário da rede do Compute (compute.networkUser) na sub-rede da VPC compartilhada. As sub-redes com IPv6 externo também exigem a função Administrador de IP público do Compute (roles/compute.publicIpAdmin).

      Por exemplo, para conceder o papel "Usuário da rede do Compute" na sub-rede, execute o seguinte comando:

      gcloud compute networks subnets add-iam-policy-binding SUBNET_NAME \
        --region REGION \
        --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-gae-service.iam.gserviceaccount.com" \
        --role "roles/compute.networkUser" \
        --project HOST_PROJECT_ID

      Substitua:

      • SUBNET_NAME: o nome de recurso totalmente qualificado da sub-rede em que você quer executar os serviços do App Engine.
      • REGION: a região do serviço do App Engine, que precisa corresponder à região da sua sub-rede;
      • SERVICE_PROJECT_NUMBER: o número do projeto de serviço da VPC compartilhada em que você implanta o serviço do App Engine.
      • HOST_PROJECT_ID: o ID do seu projeto host da VPC compartilhada;
  • 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 no projeto host da VPC compartilhada
    • compute.subnetworks.get no projeto host ou na sub-rede específica
    • compute.subnetworks.use no projeto host ou na sub-rede específica
    • compute.addresses.get no projeto de serviço da VPC compartilhada
    • compute.addresses.list no projeto de serviço da VPC compartilhada
    • compute.addresses.create no projeto de serviço da VPC compartilhada
    • compute.addresses.delete no projeto de serviço da VPC compartilhada
    • compute.addresses.createInternal no projeto de serviço da VPC compartilhada
    • compute.addresses.deleteInternal no projeto de serviço da VPC compartilhada
    • compute.regionOperations.get no projeto de serviço da VPC compartilhada

Alocação de endereço IP

Para colocar seu 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 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 seu 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

Implantar um serviço do App Engine

A saída de VPC direta permite que seu serviço do App Engine envie tráfego a uma rede VPC compartilhada sem um conector de acesso VPC sem servidor. É possível atribuir tags de rede a uma versão específica do serviço do App Engine para uma segurança de rede mais granular, como a aplicação de regras de firewall da VPC.

Para colocar o serviço na sub-rede compartilhada, especifique os nomes de recursos totalmente qualificados na rede VPC compartilhada e na sub-rede no arquivo app.yaml.

  1. Atualize o arquivo app.yaml para incluir a seção vpc_access:

    vpc_access:
      network_interface:
        network: projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK
        subnet: projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
        tags:
            - NETWORK_TAGS
      vpc_egress: EGRESS_SETTING

    Substitua:

    • HOST_PROJECT_ID: o ID do seu projeto da VPC compartilhada;
    • VPC_NETWORK: o nome da sua rede VPC compartilhada;
    • REGION: a região do serviço do App Engine, que precisa corresponder à região da sua sub-rede;
    • SUBNET_NAME: o nome do recurso totalmente qualificado da sub-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: envia todo o tráfego de saída pela rede VPC compartilhada.
      • private-ranges-only (padrão): envia o tráfego apenas para endereços internos pela rede VPC compartilhada.
  2. Implante o serviço executando o seguinte comando:

    gcloud beta app deploy

Desconectar um serviço

Para remover seu serviço da rede VPC compartilhada:

  1. Remova a seção vpc_access do arquivo app.yaml.
  2. Reimplante o serviço:

    gcloud beta app deploy

Resolver problemas

Nesta seção, descrevemos erros comuns que podem ocorrer ao usar a saída direta da VPC com uma rede VPC compartilhada e fornecemos orientações sobre como resolvê-los.

Não consigo excluir uma sub-rede

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

Depois de excluir ou mover os recursos do App Engine, aguarde uma ou duas horas até que o App Engine libere os IPs 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 principal. Alguns problemas comuns incluem:

  • Metadados incorretos da rede VPC, como um nome de rede ou sub-rede com erros de ortografia no arquivo app.yaml. Para corrigir possíveis erros, revise a configuração da rede 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:

Não consigo remover a rede VPC compartilhada

Para desanexar a rede VPC compartilhada no projeto host, siga as etapas para desprovisionar a VPC compartilhada e desconecte todos os serviços do App Engine da rede VPC compartilhada.

Para ver quais recursos do App Engine estão usando a rede VPC compartilhada, execute o seguinte comando:

gcloud compute shared-vpc list-associated-resources HOST_PROJECT_ID

Substitua HOST_PROJECT_ID pelo ID do seu projeto host da VPC compartilhada.

A sub-rede de saída de VPC direta fica sem endereços IPv4

Se a sub-rede da rede VPC ficar sem endereços IPv4, o App Engine não poderá iniciar mais instâncias de serviço.

Para resolver esse problema, considere migrar para uma sub-rede com mais endereços IP disponíveis ou expandir o intervalo da sub-rede.

Ver endereços IP alocados

Para ver os endereços IP que o App Engine alocou, acesse a página de endereços IP no console do Google Cloud ou execute o seguinte comando na Google Cloud CLI:

gcloud compute addresses list