Configurar o Cloud Service Mesh para o Cloud Run
Esta página mostra como configurar o Cloud Service Mesh para execução em diversas infraestruturas de computação para serviços do Cloud Run.
O Cloud Service Mesh permite ativar os recursos avançados de gerenciamento de tráfego da malha, como divisão de tráfego ponderada e balanceamento de carga global, bem como políticas de observabilidade e segurança para o tráfego de um serviço do Cloud Run para outro. Ele também oferece uma solução de plano de dados totalmente gerenciada que remove o fardo operacional de manter seus próprios arquivos secundários da malha de serviço.
Antes de começar
Familiaridade com o Cloud Service Mesh.
Definir o projeto:
gcloud config set core/project
PROJECT_ID No console do Google Cloud, ative as seguintes APIs para o projeto:
Se você estiver usando um conector de acesso VPC sem servidor e não a VPC direta para saída de rede.
Atualize os componentes
gcloud
para a versão mais recente (488.0.0 ou mais recente):gcloud components update
Funções exigidas
Para receber as permissões necessárias para configurar e implantar os serviços do Cloud Run, peça ao administrador para conceder a você os seguintes papéis do IAM:
- Desenvolvedor do Cloud Run
(
roles/run.developer
) no serviço do Cloud Run - Usuário da conta de serviço
(
roles/iam.serviceAccountUser
) na identidade do serviço
A conta de serviço do cliente do Cloud Run também precisa ter os seguintes papéis:
- Cliente do Traffic Director
(
roles/trafficdirector.client
) para acessar as APIs de roteamento de serviços - Agente do Cloud Trace (
roles/cloudtrace.agent
) para ativar o rastreamento
Para uma lista de papéis e permissões do IAM associados ao Cloud Run, consulte Papéis do IAM do Cloud Run e Permissões do IAM do Cloud Run. Se o serviço do Cloud Run interagir com APIsGoogle Cloud , como as bibliotecas de cliente do Cloud, consulte o guia de configuração de identidade de serviço. Para mais informações sobre como conceder papéis, consulte permissões de implantação e gerenciar acesso.
Chamada entre serviços do Cloud Run usando o Cloud Service Mesh
O Cloud Run usa as APIs de roteamento de serviço do Cloud Service Mesh.
Essas APIs permitem que um serviço do Cloud Run chame outros
serviços do Cloud Run usando um URL personalizado em vez do
URL run.app
fornecido. Além disso, o Cloud Run autentica automaticamente o serviço de destino do Cloud Run para que você não precise configurar sua própria autenticação para anexar credenciais de solicitação a outros serviços do Cloud Run.
Para chamar um serviço do Cloud Run para outro usando o Cloud Service Mesh, siga estas etapas:
- Configurar um Cloud Service Mesh
- Configurar o Cloud DNS
- Criar o serviço de destino do Cloud Run
- Criar o NEG sem servidor
- Criar o serviço do Cloud Run do cliente
- Chamar o serviço do cliente de rede mesh
Configurar uma malha de serviço do Cloud
Para criar uma rota de serviço usando o URL padrão, salve a especificação
Mesh
em um arquivo chamadomesh.yaml
:name:
MESH_NAME Substitua
MESH_NAME
pelo nome do recurso de malha.Importe o recurso
Mesh
da especificação executando o seguinte comando:gcloud network-services meshes import
\ --source=mesh.yaml \ --location=globalMESH_NAME Substitua
MESH_NAME
pelo nome do recurso de malha.
Configurar o Cloud DNS
Você pode pular a configuração do Cloud DNS e ir para a
próxima seção
se usar um endpoint do Private Service Connect
com o endereço de URL run.app
completo como o nome de host, porque apenas endereços IP
particulares são capturados.
Quando um cliente de mesh chama o serviço de destino, o nome do host usado na solicitação precisa ser resolvido pelo DNS. Qualquer endereço IP RFC 1918 válido é aceitável, porque o sidecar captura todo o tráfego de IP para esses intervalos de endereços IP e o redireciona adequadamente.
O exemplo a seguir mostra como criar uma entrada *
curinga na zona do Cloud DNS que é resolvida para um único endereço IP. Se você não quiser usar uma zona exclusiva do Cloud DNS, crie uma entrada do Cloud DNS para cada nome de host correspondente aos serviços do Cloud Run que você quer que sejam endereçáveis pela malha.
Para criar um registro do Cloud DNS em uma zona exclusiva, execute os seguintes comandos:
Crie uma zona de DNS gerenciada particular no Cloud DNS para uma malha de serviços.
gcloud dns managed-zones create
\ --description="Domain forMESH_NAME
service mesh routes" \ --dns-name=DOMAIN_NAME
. \ --networks=DOMAIN_NAME
\ --visibility=privateVPC_NETWORK_NAME Crie um registro DNS na zona particular gerenciada recém-criada. Verifique se o endereço IP
10.0.0.1
não está em uso.gcloud dns record-sets create "*.
." \ --type=A \ --zone="DOMAIN_NAME
" \ --rrdatas=10.0.0.1 \ --ttl=3600MESH_NAME Substitua:
DOMAIN_NAME
: o nome do domínio DNS.MESH_NAME
: o nome do recurso de malha.VPC_NETWORK_NAME
: o nome da sua rede VPC, por exemplo, "default".
Acessar serviços internos com o Cloud Service Mesh
O Cloud Run permite restringir o tráfego de rede recebido a "interno". Se o serviço tiver essa restrição de entrada ativada, o tráfego que viaja da malha pela rede de nuvem privada virtual poderá ser definido como "interno" quando você ativar um caminho de acesso ao Cloud Run.
Para acessar serviços internos com o Cloud Service Mesh, use um dos seguintes métodos:
- Configure o Acesso privado do Google para sua rede VPC. Não é necessário configurar um registro DNS personalizado.
- Anexe um endpoint do Private Service Connect à Cloud Service Mesh.
Isso requer a configuração de registro DNS personalizado para o URL
*.run.app
padrão para usar o endereço do endpoint do Private Service Connect.
Criar o serviço de destino do Cloud Run
O destino do Cloud Run não pode ter o URL padrão desativado.
Implante um serviço do Cloud Run novo ou existente:
gcloud run deploy
\ --no-allow-unauthenticated \ --region=DESTINATION_SERVICE_NAME
\ --image=REGION IMAGE_URL Substitua:
DESTINATION_SERVICE_NAME
: o nome do serviço de destino do Cloud Run.REGION
: o nome da região.IMAGE_URL
: uma referência à imagem do contêiner, comous-docker.pkg.dev/cloudrun/container/hello:latest
.
Criar o grupo de endpoints de rede sem servidor (NEG)
Crie o NEG de destino executando o seguinte comando:
gcloud compute network-endpoint-groups create
-neg \ --region=DESTINATION_SERVICE_NAME
\ --network-endpoint-type=serverless \ --cloud-run-service=REGION DESTINATION_SERVICE_NAME Substitua:
REGION
: o nome da região.DESTINATION_SERVICE_NAME
: o nome do serviço de destino do Cloud Run.
Crie um serviço de back-end autogerenciado interno que faça referência ao NEG sem servidor.
Crie o serviço de back-end:
gcloud compute backend-services create
-DESTINATION_SERVICE_NAME
\ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGEDREGION Substitua
DESTINATION_SERVICE_NAME
pelo nome do serviço de destino eREGION
pelo nome da região.Adicione o back-end sem servidor ao serviço de back-end:
gcloud compute backend-services add-backend
-DESTINATION_SERVICE_NAME
\ --global \ --network-endpoint-group=REGION
-neg \ --network-endpoint-group-region=DESTINATION_SERVICE_NAME REGION Substitua
DESTINATION_SERVICE_NAME
pelo nome do serviço de destino eREGION
pelo nome da região.
Crie uma rota HTTP que faça referência ao serviço de back-end.
O recurso e os serviços do
Mesh
estão configurados. Conecte-os a um recursoHTTPRoute
que associa um nome de host a um serviço de back-end.Crie a especificação
HTTPRoute
e salve-a em um arquivo chamadohttp_route.yaml
:name: "
-route" hostnames: - "DESTINATION_SERVICE_NAME
.DESTINATION_SERVICE_NAME
" meshes: - "projects/DOMAIN_NAME
/locations/global/meshes/PROJECT_ID
" rules: - action: destinations: - serviceName: "projects/MESH_NAME
/locations/global/backendServices/PROJECT_ID
-DESTINATION_SERVICE_NAME
"REGION Defina os nomes de host como os nomes que você quer usar para o serviço. Todos os clientes na mesma malha de serviço podem chamar esse serviço usando o URL
http://<HOSTNAME>
, independentemente da região e do projeto do autor da chamada. Se você tiver configurado o Cloud DNS para usar um endereço IP particular, o nome de host da rota também poderá ser o endereço de URLrun.app
completo. Nesse caso, você pode pular a etapa de configuração do Cloud DNS.Substitua:
DESTINATION_SERVICE_NAME
: o nome do serviço de destino do Cloud Run.DOMAIN_NAME
: o nome do domínio DNS.PROJECT_ID
: o ID do projeto.MESH_NAME
: o nome da malha.REGION
: o nome da região.
Crie o recurso
HTTPRoute
usando a especificação no arquivohttp_route.yaml
:gcloud network-services http-routes import
-route \ --source=http_route.yaml \ --location=globalDESTINATION_SERVICE_NAME Conceda o papel de invocador do Cloud Run (
roles/iam.invoker
) no serviço de destino do Cloud Run executando o seguinte comando:gcloud run services add-iam-policy-binding
\ --regionDESTINATION_SERVICE_NAME
\ --member=serviceAccount:REGION
-compute@developer.gserviceaccount.com \ --role=roles/run.invokerPROJECT_NUMBER Substitua:
DESTINATION_SERVICE_NAME
: o nome do serviço de destino do Cloud Run.REGION
: o nome da região.PROJECT_NUMBER
: o número do projeto.
Criar o serviço do Cloud Run do cliente
A criação de um serviço do Cloud Run para clientes cria um sidecar do Envoy cujo recursos se relacionam ao QPS e ao tamanho total da configuração. Na maioria das vezes, o uso da CPU é inferior a 1% de uma vCPU, e o uso de memória é inferior a 50 MB.
É necessário ter acesso de saída de rede a uma rede de nuvem privada virtual.
Para criar o serviço de cliente para testes, implante o app Fortio no Cloud Run para permitir o encaminhamento de tráfego para rotas HTTP:
gcloud beta run deploy
\ --region=CLIENT_SERVICE_NAME
\ --image=fortio/fortio \ --network=REGION
\ --subnet=VPC_NETWORK_NAME
\ --mesh="projects/SUBNET_NAME
/locations/global/meshes/PROJECT_ID
"MESH_NAME Substitua:
CLIENT_SERVICE_NAME
: o nome do serviço do Cloud Run do cliente.REGION
: o nome da sua regiãoVPC_NETWORK_NAME
: o nome da sua rede VPC, por exemplo, "default".SUBNET_NAME
: o nome da sub-rede. Por exemplo, "padrão".PROJECT_ID
: ID do projeto.MESH_NAME
: o nome do recurso de rede.
Chamar o serviço de um cliente de malha
Para encaminhar uma solicitação para a rota de destino usando o app de teste do Fortio da seção anterior Criar serviço de cliente:
Extraia o URL do serviço de cliente do Cloud Run que você criou executando o seguinte comando:
TEST_SERVICE_URL=$(gcloud run services describe
\ --region=CLIENT_SERVICE_NAME
--format="value(status.url)" \ --project=REGION
)PROJECT_ID Substitua:
CLIENT_SERVICE_NAME
: o nome do serviço do Cloud Run do cliente.REGION
: o nome da sua regiãoPROJECT_ID
: ID do projeto.
Use o comando
curl
para enviar uma solicitação para a rota de destino do endpoint do Fortio da etapa anterior:curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" "$TEST_SERVICE_URL/fortio/fetch/
.DESTINATION_SERVICE_NAME
"DOMAIN_NAME Substitua:
DESTINATION_SERVICE_NAME
: o nome do serviço de destino do Cloud Run.DOMAIN_NAME
: o nome do domínio DNS.
Chamar o back-end do Compute Engine pelo Cloud Run
Para implantar uma rota de serviço do Compute Engine e do Cloud Service Mesh usando grupos de instâncias gerenciadas como back-ends, configure o servidor HTTP baseado no Compute Engine no Cloud Service Mesh. Isso permite que os clientes do Cloud Run usem essa rota de serviço de back-end para enviar solicitações diretamente para instâncias do Compute Engine.
Próximas etapas
- Conheça as configurações de rede comuns do Cloud Run para redes públicas e privadas.
- Configurar redes privadas para o Cloud Run
- Configurar proxies do Envoy com serviços HTTP
- Encaminhar o tráfego dos serviços do Cloud Run para cargas de trabalho do Cloud Service Mesh no GKE
- Encaminhar o tráfego de cargas de trabalho da Cloud Service Mesh para os Serviços do Cloud Run