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 é para 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, 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 de 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 a VM
0.0.0.0
Endereço IP (VIP). - 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 durante a configuração do 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 do Cloud Service Mesh, por exemplo, removendo o 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.
Como disponibilizar um serviço do Diretório de serviços para o Cloud Service Mesh consiste nas etapas a seguir.
- Criar um novo serviço de back-end no Cloud Service Mesh e não criar 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 Diretório de serviços serviços, o Cloud Service Mesh começa a rastrear os endpoints associados com o 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 a uma mesma
serviço de back-end. Por exemplo, é possível ter dois serviços do Diretório de serviços,
idênticos, 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
.
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ê já tem um serviço de teste
fora da malha do Cloud Service Mesh. O serviço de teste é um back-end
balanceador de carga de aplicativo interno. Você quer repetir parte do tráfego de produção
originadas da malha do Cloud Service Mesh a esse serviço externo.
O Cloud Service Mesh faz isso usando RequestMirrorPolicy
, que pode enviar
o 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, você vai adicionar uma política de espelho de solicitação 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 para o 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 construções da Google Cloud CLI. 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.