Configurar integração com o Diretório de serviços

Neste guia, presumimos que você tenha uma implantação do Cloud Service Mesh em execução e que registrou pelo menos um serviço no Diretório de serviços. As instruções de configuração se aplicam se você estiver usando o Envoy ou o gRPC sem proxy.

Para usar o Diretório de serviços e o Cloud Service Mesh, a primeira etapa é publicar seu serviço no Diretório de serviços. Para informações gerais sobre o serviço, consulte como publicar um serviço no Diretório de serviços ou a documentação do Diretório de serviços.

Depois que o serviço for registrado no Diretório de serviços, crie uma vinculação de serviço usando os recursos da API do Cloud Service Mesh. Crie um serviço de back-end dedicado à integração com o Diretório de serviços, porque um serviço de back-end que se refere a vinculações de serviço não pode ter back-ends ou uma verificação de integridade associada.

Requisitos de regra de encaminhamento e de host do Cloud Service Mesh com as APIs de balanceamento de carga

Ao configurar o Cloud Service Mesh para uso com o Diretório de serviços e usar as APIs de balanceamento de carga mais antigas, siga estas diretrizes:

  1. Verifique se a regra de encaminhamento do Cloud Service Mesh usa o endereço IP virtual (VIP, na sigla em inglês) 0.0.0.0.
  2. Se você tiver uma zona particular, verifique se a regra de host no mapa de URLs corresponde ao nome DNS que o Diretório de serviços configura na zona particular do Cloud DNS.

Se você não seguir essas diretrizes, as solicitações de saída dos aplicativos provavelmente vão falhar.

Definir o endpoint da API network-services

Antes de criar e usar um serviço de back-end, verifique se o endpoint da API network-services está definido para que os recursos de vinculação de serviço nos recursos network-services sejam referenciados corretamente. Defina o endpoint da API network-services usando o seguinte comando.

export CLOUDSDK_API_ENDPOINT_OVERRIDES_NETWORKSERVICES="https://networkservices.googleapis.com/"

Requisitos de função e permissão

Verifique se você tem as permissões e os papéis a seguir antes de criar a implantação do Cloud Service Mesh.

Permissões e papéis de vinculação de serviço

Nesta seção, não falaremos sobre as permissões de Proprietário, Editor e Leitor no nível do projeto. Descreve as permissões e os papéis necessários para criar, ler, atualizar e excluir recursos.

Ação Permissão Papéis
Crie uma vinculação de serviço. networkservices.serviceBindings.create Administrador de rede
Receba uma vinculação de serviço. networkservices.serviceBindings.get Administrador de rede, leitor de rede
Listar vinculações de serviço em um projeto do Google Cloud. networkservices.serviceBindings.list Administrador de rede, leitor de rede
Atualize as vinculações de serviço. networkservices.serviceBindings.update Administrador de rede
Exclua as vinculações de serviço. networkservices.serviceBindings.delete Administrador de rede

Permissões de serviço do Diretório de serviços

O administrador do Diretório de serviços precisa conceder a permissão servicedirectory.services.bind à conta de serviço que está tentando anexar a vinculação de serviço ao serviço do Diretório de serviços. Isso permite que a conta de serviço use um serviço do Diretório de serviços, o que significa que a conta pode referenciar um serviço do Diretório de serviços em uma vinculação de serviço.

Aplicação de permissões

As verificações de permissão do IAM são realizadas quando você configura o Cloud Service Mesh. Você precisa ter as permissões necessárias para criar vinculações de serviço e associá-las a determinados serviços do Diretório de serviços. Se as permissões corretas estiverem em vigor, configure seus clientes da malha para saber mais e enviar tráfego para um serviço do Diretório de serviços.

Como essas verificações acontecem no momento da configuração, remover a permissão de vinculação em um serviço do Diretório de serviços não interrompe os fluxos de tráfego. Depois que uma vinculação de serviço é estabelecida, a remoção de uma permissão não afeta a capacidade do cliente de malha e de enviar tráfego para um serviço do Diretório de serviços.

Para impedir que um cliente de malha se comunique com um serviço de diretório de serviços, use outros mecanismos:

  1. Restrinja o acesso ao serviço do Diretório de serviços. Por exemplo, é possível usar regras de firewall.
  2. Exclua o serviço do Diretório de serviços.
  3. Atualize a configuração do Cloud Service Mesh, por exemplo, removendo a vinculação de serviço do serviço de back-end.

Práticas recomendadas

Use o diretório de serviços para a descoberta de serviços

O diagrama a seguir fornece uma visão geral do estado final desse procedimento de configuração, incluindo configuração, como diferentes sistemas interagem e como uma solicitação é resolvida nos endpoints de um serviço. Neste exemplo, presumimos que você já tenha um serviço registrado no Diretório de serviços.

Detalhes de configuração para usar o Diretório de serviços para descoberta de serviços.
Detalhes de configuração para usar o Diretório de serviços para a descoberta de serviços (clique para ampliar)

A disponibilização de um serviço do Diretório de serviços para o Cloud Service Mesh consiste nas etapas a seguir.

  1. Crie um novo serviço de back-end no Cloud Service Mesh e não crie back-ends para ele.
  2. Crie uma vinculação global de serviço para o serviço do Diretório de serviços.
  3. Vincule o serviço do Diretório de serviços a este serviço de back-end. Se quiser, defina campos e políticas adicionais no serviço de back-end.

  4. Crie uma nova configuração de roteamento ou atualize uma configuração atual, de modo que as solicitações do cliente possam ser encaminhadas para o novo serviço de back-end.

Não é possível definir uma verificação de integridade em um serviço de back-end que se refere a uma vinculação de serviço. O serviço de back-end também não pode ter back-ends.

Criar a integração

Use as instruções a seguir para integrar o Cloud Service Mesh ao Diretório de serviços.

Criar um serviço de back-end

Use as instruções a seguir para criar um serviço de back-end na implantação do Cloud Service Mesh.

  1. Crie um serviço de back-end a ser usado com os serviços do Diretório de serviços.

    gcloud compute backend-services create td-sd-demo-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Crie uma vinculação de serviço que se refere a um serviço do Diretório de serviços.

    gcloud beta network-services service-bindings create my-sd-binding \
     --location global \
     --service-directory-region us-east1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service
    
  3. Vincule o serviço ao serviço de back-end.

    gcloud beta compute backend-services update td-sd-demo-service \
     --global \
     --service-bindings my-sd-binding
    

Depois que você cria o serviço de back-end e vincula um ou mais serviços do Diretório de serviços, o Cloud Service Mesh começa a rastrear os endpoints associados ao serviço do Diretório de serviços. Os endpoints são pares de IP:porta diferentes. Para tornar esse serviço roteável, você precisa configurar o roteamento.

Configurar o roteamento

Use as instruções a seguir para atualizar a configuração de roteamento.

APIs de roteamento de serviço

O exemplo a seguir pressupõe que você tem um recurso Mesh chamado sidecar- mesh. Crie um recurso HTTPRoute com nomes de host definidos como myservice.example.com e o destino definido como o serviço de back-end td-sd-demo-service criado na seção anterior.

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

    name: td-sd-demo-route
    hostnames:
    ‐ myservice.example.com
    meshes:
    ‐ projects/PROJECT_NUMBER/locations/global/meshes/sidecar-mesh
    rules:
    ‐ action:
      destinations:
      ‐ serviceName: "projects/PROJECT_NUMBER/locations/global/backendServices/td-sd-demo-service"
    
  2. Importe a especificação HTTPRoute.

    gcloud network-services httproutes import td-sd-demo-route \
      --source=httproute.yaml \
      --location=global
    

APIs de balanceamento de carga

No exemplo a seguir, pressupomos que você já tenha uma configuração de roteamento básico, incluindo um mapa de URLs chamado my-url-map.

  • Primeiro, você cria uma correspondência de caminho para esse mapa de URL. A correspondência de caminho é simples. Quando usado, ele é resolvido para td-sd-demo-service, que você criou na etapa anterior.
  • Em seguida, adicione uma regra de host ao mapa de URL. Essa regra de host faz com que a correspondência de caminho seja usada se uma solicitação especificar o nome do host myservice.example.com.
  1. Crie uma correspondência de caminho simples que aponte para o serviço de back-end.

    gcloud compute url-maps add-path-matcher my-url-map \
     --global \
     --default-service td-sd-demo-service \
     --path-matcher-name my-path-matcher
    
  2. Mapeie o serviço de back-end para uma nova regra de host no mapa de URL atual.

    gcloud compute url-maps add-host-rule my-url-map \
     --global \
     --path-matcher-name=my-path-matcher \
     --hosts=myservice.example.com
    

Anexe o mesmo serviço de várias regiões

O Cloud Service Mesh permite vincular vários serviços do diretório de serviços ao mesmo serviço de back-end. Por exemplo, é possível ter dois serviços do Diretório de serviços, cada um idêntico, mas com endpoints em regiões ou zonas diferentes do Google Cloud. Em outras palavras, um único serviço de back-end global pode ter duas vinculações de serviço globais, com uma apontando para um serviço em us-east1 e a outra apontando para um serviço em us-west1.

  1. Crie um serviço de back-end para o serviço importado do Diretório de serviços.

    gcloud compute backend-services create td-sd-demo-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Crie uma vinculação de serviço para o serviço do Diretório de serviços em us-east1.

    gcloud beta network-services service-bindings create us-east1-binding \
     --location global \
     --service-directory-region us-east1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service \
    
  3. Crie uma vinculação de serviço para o serviço do Diretório de serviços em us-west1.

    gcloud beta network-services service-bindings create us-west1-binding \
     --location global
     --service-directory-region us-west1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service \
    
  4. Vincule os serviços us-east1 e us-west1 ao serviço de back-end.

    gcloud compute backend-services update td-sd-demo-service \
      --global \
      --service-bindings us-east1-binding,us-west1-binding
    

Aplicar políticas avançadas de gerenciamento de tráfego

Na seção anterior, você usou o Cloud Service Mesh para configurar políticas de roteamento em um serviço atual do Diretório de serviços. É possível aplicar esse padrão a cenários de gerenciamento de tráfego mais avançados.

Imagine esta situação. Você tem um serviço de teste atual que está fora da malha do Cloud Service Mesh. O serviço de teste é um back-end para um balanceador de carga de aplicativo interno. Você quer repetir parte do tráfego de produção que tem origem na malha do Cloud Service Mesh nesse serviço externo. O Cloud Service Mesh pode fazer isso usando RequestMirrorPolicy, que pode enviar tráfego para outro serviço de back-end quando a solicitação é processada. Esse processo também é chamado de monitoramento de solicitações e permite examinar o tráfego sem afetar seus serviços de produção.

É possível permitir que os clientes do Envoy monitorem o tráfego para um serviço de teste adicionando ou removendo manualmente o endpoint do serviço de teste à malha do Cloud Service Mesh. Mas o processo é mais simples quando você usa a integração do Diretório de serviços.

Como usar o Diretório de serviços para descoberta de serviços com espelhamento.
Como usar o Diretório de serviços para descoberta de serviços com espelhamento (clique para ampliar)

Neste exemplo, comece apontando um serviço de back-end para o registro do Diretório de serviços do serviço de teste de pagamentos. Em seguida, adicione uma política de espelhamento de solicitações ao serviço no Cloud Service Mesh.

  1. Crie um serviço de back-end para a política de espelhamento de solicitações.

    gcloud compute backend-services create payments-test-bes \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Crie uma vinculação de serviço que se refere a um serviço do Diretório de serviços.

    gcloud beta network-services service-bindings create my-sd-binding \
     --location global \
     --service-directory-region us-east1 \
     --service-directory-namespace my-namespace \
     --service-directory-service my-service \
    
  3. Vincule o serviço do Diretório de serviços ao serviço de back-end de teste.

    gcloud beta compute backend-services update payments-test-bes \
     --global \
     --service-bindings my-sd-binding
    
  4. Edite o mapa de URL para espelhar as solicitações para o serviço de teste.

    gcloud compute url-maps edit my-url-map \
      --region=global
    
  5. Depois que a configuração do mapa de URL for carregada em um editor, adicione a política de espelhamento de solicitações ao espelhar solicitações para o serviço de Diretório de serviços existente.

    defaultService: my-project/global/default-service
       hostRules:
        - hosts:
          - '*'
          pathMatcher: path-matcher-one
       pathMatchers:
        - defaultService: my-project/global/default-service
         name: path-matcher-one
         pathRules:
          - paths:
            - /payments/
            service: my-project/global/default-service
            requestMirrorPolicy:
              backendService: myproject/global/payments-test-bes
    

Remover uma vinculação de serviço de um serviço de back-end

Para remover uma vinculação de serviço do serviço de back-end, transmita uma nova lista de vinculações de serviço para o comando gcloud compute backend-services update. A nova lista não pode incluir a vinculação de serviço que você quer excluir:

  • Para remover todas as vinculações de serviço, defina a sinalização --no-service-bindings.
  • Para remover uma ou mais vinculações de serviço: passe uma nova lista de vinculações de serviço que omita as vinculações de serviço que você quer remover.--service-bindings.

Adicionar ou remover vinculações de serviço

O comando bind-service adiciona uma vinculação de serviço ao conjunto de vinculações de serviço atuais no serviço de back-end.

gcloud compute backend-services bind-service BACKEND_SERVICE_NAME \
  --service-binding-name SERVICE_BINDING_URL \
  --global

O comando unbind-service remove uma vinculação de serviço do conjunto de vinculações de serviço atuais no serviço de back-end.

gcloud compute backend-services unbind-service BACKEND_SERVICE_NAME \
  --service-binding-name SERVICE_BINDING_URL \
  --global

Os comandos bind-service e unbind-service são construções da Google Cloud CLI. Elas não são construções no nível da API.

A seguir