É 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.getno projeto host da VPC compartilhadacompute.subnetworks.getno projeto host ou na sub-rede específicacompute.subnetworks.useno projeto host ou na sub-rede específicacompute.addresses.getno projeto de serviço da VPC compartilhadacompute.addresses.listno projeto de serviço da VPC compartilhadacompute.addresses.createno projeto de serviço da VPC compartilhadacompute.addresses.deleteno projeto de serviço da VPC compartilhadacompute.addresses.createInternalno projeto de serviço da VPC compartilhadacompute.addresses.deleteInternalno projeto de serviço da VPC compartilhadacompute.regionOperations.getno 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:
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.
Atualize o arquivo
app.yamlpara incluir a seçãovpc_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.
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:
- Remova a seção
vpc_accessdo arquivoapp.yaml. 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 arquivoapp.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:
- 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 (
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