Configure o Cloud Service Mesh para 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

  1. Conhecer o Cloud Service Mesh.

  2. Definir o projeto:

    gcloud config set core/project PROJECT_ID
  3. No console do Google Cloud, ative as seguintes APIs para seu projeto:

  4. 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:

A conta de serviço do cliente do Cloud Run também precisa ter as os seguintes papéis:

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 interage com as APIs do Google 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.

Chamadas entre serviços do Cloud Run usando o Cloud Service Mesh

O Cloud Run usa o Cloud Service Mesh APIs de roteamento de serviço. 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 de run.app fornecido. Além disso, o Cloud Run automaticamente se autentica no serviço de destino do Cloud Run para que você não precisa configurar sua própria autenticação para anexar credenciais de solicitação ao outros serviços do Cloud Run.

Para chamar de um serviço do Cloud Run para outro usando Cloud Service Mesh, siga estas etapas:

  1. Configurar um Cloud Service Mesh
  2. Configurar o Cloud DNS
  3. Criar o serviço de destino do Cloud Run
  4. Criar o NEG sem servidor
  5. Criar o serviço do Cloud Run do cliente
  6. Chamar o serviço do cliente de rede mesh

Configurar uma malha de serviço do Cloud

  1. Para criar uma rota de serviço usando o URL padrão, salve o Mesh especificação em um arquivo chamado mesh.yaml:

    name: MESH_NAME

    Substitua MESH_NAME pelo nome do recurso de rede.

  2. Importe o recurso Mesh da especificação executando o seguinte comando:

    gcloud network-services meshes import MESH_NAME \
      --source=mesh.yaml \
      --location=global

    Substitua MESH_NAME pelo nome do recurso de rede.

Configurar o Cloud DNS

É possível pular a configuração do Cloud DNS e acessar próxima seção se você usar um endpoint do Private Service Connect com o endereço URL completo run.app como o nome do host, porque apenas o IP privado e endereços IP são capturados.

Quando um cliente da malha chama o serviço de destino, o nome do host usadas na solicitação precisam ser resolvidas 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 no Cloud DNS que é resolvida para um único endereço IP. Se você não quiser usar um modelo zona do Cloud DNS, crie uma entrada do Cloud DNS. para cada nome de host correspondentes aos serviços do Cloud Run que você quer endereçáveis da malha.

  • Para criar um registro do Cloud DNS em uma zona exclusiva, execute os seguintes comandos:

    1. Criar uma zona de DNS particular gerenciada no Cloud DNS para um serviço da rede mesh.

      gcloud dns managed-zones create MESH_NAME \
      --description="Domain for DOMAIN_NAME service mesh routes" \
      --dns-name=DOMAIN_NAME. \
      --network=VPC_NETWORK_NAME \
      --visibility=private
    2. Crie um registro DNS na zona particular gerenciada recém-criada. Marca Confirme que o endereço IP 10.0.0.1 não está sendo usado.

      gcloud dns record-sets create "*.DOMAIN_NAME." \
      --type=A \
      --zone="MESH_NAME" \
      --rrdatas=10.0.0.1 \
      --ttl=3600

      Substitua:

      • DOMAIN_NAME: o nome do domínio DNS.
      • MESH_NAME: o nome do recurso da malha.
      • VPC_NETWORK_NAME: o nome da rede VPC, por exemplo, "default".

Acessar serviços internos com o Cloud Service Mesh

O Cloud Run permite restringir o tráfego de rede de entrada a "internos". 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:

Criar o serviço de destino do Cloud Run

O destino do Cloud Run não pode ter o URL padrão desativado.

  1. Implante um serviço do Cloud Run novo ou existente:

    gcloud run deploy DESTINATION_SERVICE_NAME \
    --no-allow-unauthenticated \
    --region=REGION \
    --image=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. como us-docker.pkg.dev/cloudrun/container/hello:latest.

Criar o grupo de endpoints de rede (NEG) sem servidor

  1. Execute o seguinte comando para criar o NEG de destino:

    gcloud compute network-endpoint-groups create destination-neg \
    --region=REGION \
    --network-endpoint-type=serverless \
    --cloud-run-service=DESTINATION_SERVICE_NAME

    Substitua:

    • REGION: o nome da região.
    • DESTINATION_SERVICE_NAME: o nome do serviço de destino do Cloud Run.
  2. Crie um serviço de back-end autogerenciado interno que faça referência ao sem servidor.

    1. Crie o serviço de back-end:

      gcloud compute backend-services create DESTINATION_SERVICE_NAME-REGION \
      --global \
      --load-balancing-scheme=INTERNAL_SELF_MANAGED

      Substitua DESTINATION_SERVICE_NAME pelo nome do serviço de destino e REGION pelo nome da região.

    2. Adicione o back-end sem servidor ao serviço de back-end:

      gcloud compute backend-services add-backend DESTINATION_SERVICE_NAME-REGION \
      --global \
      --network-endpoint-group=destination-neg \
      --network-endpoint-group-region=REGION

      Substitua DESTINATION_SERVICE_NAME pelo nome do serviço de destino e REGION pelo nome da região.

  3. 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-as com um O recurso HTTPRoute que associa um nome de host a um serviço de back-end.

    1. Crie a especificação HTTPRoute e salve-a em um arquivo chamado http_route.yaml:

      name: "DESTINATION_SERVICE_NAME-route"
      hostnames:
      - "DESTINATION_SERVICE_NAME.DOMAIN_NAME"
      meshes:
      - "projects/PROJECT_ID/locations/global/meshes/MESH_NAME"
      rules:
      - action:
         destinations:
         - serviceName: "projects/PROJECT_ID/locations/global/backendServices/DESTINATION_SERVICE_NAME-REGION"
      

      Defina os nomes do host para os nomes que você gostaria de usar para endereçar o serviço. Todos os clientes na mesma malha de serviço podem chamar esse serviço usando o URL http://<HOSTNAME>, independente 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 do host da rota também poderá ser o endereço de URL run.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.
    2. Crie o recurso HTTPRoute usando a especificação na Arquivo http_route.yaml:

      gcloud network-services http-routes import DESTINATION_SERVICE_NAME-route \
      --source=http_route.yaml \
      --location=global
      
    3. Conceda o papel de invocador do Cloud Run (roles/iam.invoker) no serviço de destino do Cloud Run executando o comando a seguir:

      gcloud run services add-iam-policy-binding DESTINATION_SERVICE_NAME \
      --region REGION \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.invoker

      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 cliente cria um arquivo secundário do Envoy com recursos relacionados 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 CLIENT_SERVICE_NAME \
    --region=REGION \
    --image=fortio/fortio \
    --network=VPC_NETWORK_NAME \
    --subnet=SUBNET_NAME \
    --mesh="projects/PROJECT_ID/locations/global/meshes/MESH_NAME"

    Substitua:

    • CLIENT_SERVICE_NAME: o nome do serviço do Cloud Run do cliente.
    • REGION: o nome da sua região
    • VPC_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:

  1. 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 CLIENT_SERVICE_NAME \
    --region=REGION --format="value(status.url)" \
    --project=PROJECT_ID)

    Substitua:

    • CLIENT_SERVICE_NAME: o nome do serviço do Cloud Run do cliente.
    • REGION: o nome da sua região
    • PROJECT_ID: ID do projeto.
  2. 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 usar grupos gerenciados de instâncias 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