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 tenha registrado 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 Service Directory e o Cloud Service Mesh, a primeira etapa é publicar seu serviço no Service Directory. 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, criar uma vinculação de serviço usando os recursos de 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 da regra de encaminhamento e de host do Cloud Service Mesh com as APIs de balanceamento de carga
Quando você configura o Cloud Service Mesh para uso com o Diretório de serviços e você usar as APIs de balanceamento de carga mais antigas, siga estas diretrizes:
- Verifique se a regra de encaminhamento do Cloud Service Mesh usa o endereço IP virtual (VIP)
0.0.0.0
. - 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 seus aplicativos poderã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 seguintes permissões e papéis antes de criar seu 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 a 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:
- Restrinja o acesso ao serviço do Diretório de serviços. Por exemplo, é possível usar regras de firewall.
- Exclua o serviço do Diretório de serviços.
- Atualize a configuração da malha de serviços do Cloud, por exemplo, removendo a vinculação de serviço do serviço de back-end.
Práticas recomendadas
- Embora o Diretório de serviços permita o registro de endpoints usando a API Service Directory, recomendamos o uso de integrações registradas automaticamente quando estiverem disponíveis. Para mais informações sobre essas integrações, consulte Visão geral do Diretório de serviços para o GKE e Visão geral do Diretório de serviços e do Cloud Load Balancing.
- Recomendamos o mesmo namespace e serviço para um determinado serviço lógico, mesmo quando o serviço estiver implantado em diferentes regiões.
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.
A disponibilização de um serviço do Diretório de serviços para o Cloud Service Mesh consiste nas etapas a seguir.
- Crie um novo serviço de back-end na Cloud Service Mesh e não crie back-ends para o serviço de back-end.
- Crie uma vinculação global de serviço para o serviço do Diretório de serviços.
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.
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 com 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 sua Implantação do Cloud Service Mesh.
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
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
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 de criar o serviço de back-end e vincular 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.
Crie a especificação
HTTPRoute
e salve-a em um arquivo chamadohttproute.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"
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
.
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
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, você pode ter dois serviços do Diretório de serviços,
cada um idêntico, mas com endpoints em diferentes regiões ou zonas 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
.
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
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 \
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 \
Vincule os serviços
us-east1
eus-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 com um serviço 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 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 algum tráfego de produção
originado na malha do Cloud Service Mesh para esse 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 clientes Envoy acompanhem o tráfego para um serviço de teste manualmente adicionar ou remover o endpoint do serviço de teste da malha do Cloud Service Mesh; Mas o processo é mais simples quando você usa a integração do Diretório de serviços.
Neste exemplo, você começa apontando um serviço de back-end para o Registro no Diretório de serviços para o serviço de teste de pagamentos. Em seguida, adicione uma política de espelhamento de solicitações ao serviço no Cloud Service Mesh.
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
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 \
Vincular o serviço do Diretório de serviços ao back-end de teste serviço.
gcloud beta compute backend-services update payments-test-bes \ --global \ --service-bindings my-sd-binding
Edite o mapa de URL para espelhar solicitações ao serviço de teste.
gcloud compute url-maps edit my-url-map \ --region=global
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 elementos da CLI do Google Cloud. Elas não são construções no nível da API.
A seguir
- Para mais informações sobre observabilidade com essa integração, consulte Observabilidade e depuração com o Diretório de serviços.