Configurare l'integrazione con Service Directory
Questa guida presuppone che tu abbia un deployment Cloud Service Mesh in esecuzione e che tu ha registrato almeno un servizio con Service Directory. Configurazione si applicano indipendentemente dal fatto che utilizzi Envoy o gRPC senza proxy.
Per utilizzare Service Directory e Cloud Service Mesh, il primo passaggio è per pubblicare il tuo servizio in Service Directory. Leggi le informazioni su pubblicare un servizio in Service Directory o la documentazione di Service Directory per informazioni generali.
Dopo aver registrato il servizio in Service Directory, crea un'associazione di servizi utilizzando le risorse API di Cloud Service Mesh. Devi creare un servizio di backend dedicato all'integrazione con Service Directory, perché un servizio di backend che fa riferimento alle associazioni di servizi non può avere backend o un controllo di integrità associato.
Requisiti delle regola di forwarding e dell'host di Cloud Service Mesh con le API di bilanciamento del carico
Quando configuri Cloud Service Mesh per l'utilizzo con Service Directory e utilizzi le API di bilanciamento del carico precedenti, segui queste linee guida:
- Assicurati che la regola di forwarding di Cloud Service Mesh utilizzi il token virtuale
0.0.0.0
Indirizzo IP (VIP). - Se hai una zona privata, accertati che la regola host nella mappa URL corrisponda al nome DNS che Service Directory esegue la configurazione nella zona privata di Cloud DNS.
Se non segui queste linee guida, le richieste in uscita dalle tue applicazioni potrebbero non riuscire.
Imposta l'endpoint dell'API network-services
Prima di creare e utilizzare un servizio di backend, assicurati che l'elemento network-services
L'endpoint API è impostato in modo che i servizi associano le risorse in network-services
le risorse a cui viene fatto riferimento
correttamente. Imposta l'endpoint dell'API network-services
utilizzando il seguente comando.
export CLOUDSDK_API_ENDPOINT_OVERRIDES_NETWORKSERVICES="https://networkservices.googleapis.com/"
Requisiti per i ruoli e le autorizzazioni
Assicurati di disporre delle autorizzazioni e dei ruoli seguenti prima di creare il Deployment di Cloud Service Mesh.
Autorizzazioni e ruoli di associazione del servizio
Questa sezione non illustra Proprietario, gli editor e il visualizzatore a livello di progetto autorizzazioni aggiuntive. Descrive le autorizzazioni e i ruoli necessari per creare, leggere, aggiornare ed eliminare le risorse.
Azione | Autorizzazione | Ruoli |
---|---|---|
Creare un'associazione di servizi. | networkservices.serviceBindings.create |
Amministratore di rete |
Ottenere un'associazione di servizi. | networkservices.serviceBindings.get |
Amministratore di rete, Visualizzatore rete |
Elenca le associazioni di servizi in un progetto Google Cloud. | networkservices.serviceBindings.list |
Amministratore di rete, Visualizzatore rete |
Aggiorna le associazioni dei servizi. | networkservices.serviceBindings.update |
Amministratore di rete |
Elimina le associazioni di servizi. | networkservices.serviceBindings.delete |
Amministratore di rete |
Autorizzazioni del servizio Service Directory
L'amministratore di Service Directory deve concedere l'autorizzazione
servicedirectory.services.bind
all'account di servizio che sta tentando di
collegare l'associazione del servizio al servizio Service Directory. In questo modo, l'account di servizio può utilizzare un servizio Service Directory, il che significa che può fare riferimento a un servizio Service Directory in una associazione di servizi.
Applicazione delle autorizzazioni
I controlli delle autorizzazioni IAM vengono eseguiti quando configuri Cloud Service Mesh. Devi disporre delle autorizzazioni necessarie per creare associazioni di servizi e associarle a determinati servizi Service Directory. Se sono presenti le autorizzazioni corrette, puoi configurare i client mesh in modo che acquisiscano informazioni su un servizio Service Directory e inviino traffico a questo servizio.
Poiché questi controlli vengono eseguiti al momento della configurazione, la rimozione dell'autorizzazione di associazione su un servizio Service Directory esistente non interrompe i flussi di traffico. Una volta stabilita una mappatura del servizio, la rimozione di un'autorizzazione non influisce sulla possibilità per un client mesh di rilevare e inviare traffico a un servizio Service Directory.
Interruzione della comunicazione da parte di un client mesh con Service Directory di servizio, puoi utilizzare altri meccanismi:
- Limita l'accesso al servizio Service Directory. Ad esempio: puoi usare le regole firewall.
- Elimina il servizio Service Directory.
- Aggiorna la configurazione di Cloud Service Mesh, ad esempio rimuovendo il binding del servizio dal servizio di backend.
Best practice
- Sebbene Service Directory consenta la registrazione degli endpoint tramite l'API Service Directory, ti consigliamo di utilizzare le integrazioni che si registrano automaticamente a Service Directory, se disponibili. Per ulteriori informazioni su queste integrazioni, consulta la panoramica di Service Directory per GKE e la panoramica di Service Directory e Cloud Load Balancing.
- Ti consigliamo di utilizzare lo stesso spazio dei nomi e lo stesso servizio per un anche quando viene eseguito il deployment in regioni diverse.
Utilizzare Service Directory per Service Discovery
Il seguente diagramma fornisce una panoramica dello stato finale di questa procedura di configurazione, inclusa la configurazione, il modo in cui i diversi sistemi interagiscono e come una richiesta viene risolta negli endpoint di un servizio. Questo esempio presuppone che tu un servizio è già registrato in Service Directory.
Rendi disponibile un servizio Service Directory in Cloud Service Mesh è costituita dai seguenti passaggi.
- Crea un nuovo servizio di backend in Cloud Service Mesh e non creare per il servizio di backend.
- Crea un'associazione di servizi globale per Service Directory completamente gestito di Google Cloud.
Associa il servizio Service Directory a questo servizio di backend. Facoltativamente, imposta campi e criteri aggiuntivi sul servizio di backend.
Crea una nuova configurazione di routing o aggiornane una esistente. in modo che le richieste del client possano essere instradate al nuovo servizio di backend.
Non puoi impostare un controllo di integrità su un servizio di backend che fa riferimento a un servizio associazione. Inoltre, il servizio di backend non può avere backend.
Crea l'integrazione
Segui le istruzioni riportate di seguito per integrare Cloud Service Mesh con Service Directory.
Crea un servizio di backend
Segui le istruzioni riportate di seguito per creare un servizio di backend nel deployment di Cloud Service Mesh.
Crea un servizio di backend da utilizzare con i servizi Service Directory.
gcloud compute backend-services create td-sd-demo-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED
Crea una associazione di servizi che fa riferimento a un servizio Service Directory.
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
Associa il servizio al servizio di backend.
gcloud beta compute backend-services update td-sd-demo-service \ --global \ --service-bindings my-sd-binding
Dopo aver creato il servizio di backend e aver associato uno o più servizi Service Directory, Cloud Service Mesh inizia a monitorare gli endpoint associati al servizio Service Directory. Gli endpoint sono coppie IP:porta distinte. Per poter instradare questo servizio, devi configurare il routing.
Configura il routing
Segui le istruzioni riportate di seguito per aggiornare la configurazione del routing.
API per il routing dei servizi
Nell'esempio seguente si presuppone che tu abbia una risorsa Mesh
denominata sidecar-
mesh
. Crea una risorsa HTTPRoute
con gli hostname impostati su
myservice.example.com
e la destinazione impostata sul servizio di backend
td-sd-demo-service
che hai creato nella sezione precedente.
Crea la specifica
HTTPRoute
e salvala in un file denominatohttproute.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"
Importa la specifica
HTTPRoute
.gcloud network-services httproutes import td-sd-demo-route \ --source=httproute.yaml \ --location=global
API di bilanciamento del carico
L'esempio seguente presuppone che tu abbia già un routing di base
inclusa una mappa URL denominata my-url-map
.
- Innanzitutto, crei un matcher del percorso per questa mappa URL. Matcher percorso
è semplice. Quando viene utilizzato, viene risolto in
td-sd-demo-service
, che hai creato nel passaggio precedente. - In seguito, aggiungi una regola host alla mappa URL. Questa regola host fa in modo che il correlatore di percorsi venga utilizzato se una richiesta specifica il nome host
myservice.example.com
.
Crea un semplice corrispondenze di percorsi che punti al tuo servizio di backend.
gcloud compute url-maps add-path-matcher my-url-map \ --global \ --default-service td-sd-demo-service \ --path-matcher-name my-path-matcher
Mappa il servizio di backend a una nuova regola host nella mappa URL esistente.
gcloud compute url-maps add-host-rule my-url-map \ --global \ --path-matcher-name=my-path-matcher \ --hosts=myservice.example.com
Collegare lo stesso servizio da più regioni
Cloud Service Mesh ti consente di associare più servizi Service Directory allo stesso
di servizio di backend. Ad esempio, potresti avere due servizi Service Directory:
tutti identici, ma con endpoint in regioni o zone Google Cloud diverse.
In altre parole, un singolo servizio di backend globale potrebbe avere due associazioni di servizi globali, una che rimanda a un servizio in us-east1
e l'altra a un servizio in us-west1
.
Crea un servizio di backend per il servizio Service Directory importato.
gcloud compute backend-services create td-sd-demo-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED
Crea un'associazione di servizi al servizio Service Directory in
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 \
Crea una associazione di servizi al servizio Service Directory in
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 \
Associa i servizi
us-east1
eus-west1
al servizio di backend.gcloud compute backend-services update td-sd-demo-service \ --global \ --service-bindings us-east1-binding,us-west1-binding
Applica criteri avanzati per la gestione del traffico
Nella sezione precedente, hai utilizzato Cloud Service Mesh per configurare i criteri di routing in base a un servizio Service Directory esistente. Puoi applicare questo pattern a scenari di gestione del traffico più avanzati.
Considera questo scenario. Esiste già un servizio di test al di fuori della rete Cloud Service Mesh. Il servizio di test è un backend per
il bilanciatore del carico delle applicazioni
interno. Vuoi riprodurre parte del traffico di produzione proveniente dal mesh Cloud Service Mesh in questo servizio esterno.
Cloud Service Mesh può farlo utilizzando RequestMirrorPolicy
, che può inviare il traffico a un altro servizio di backend quando la richiesta viene elaborata. Questo processo
è anche chiamato shadowing di una richiesta e ti consente di esaminare il traffico senza
che interesserà i tuoi servizi di produzione.
Puoi consentire ai client Envoy di eseguire il shadowing del traffico verso un servizio di test aggiungendo o rimuovendo manualmente l'endpoint del servizio di test nel mesh Cloud Service Mesh. Tuttavia, la procedura è più semplice se utilizzi l'integrazione del Directory dei servizi.
In questo esempio, inizi indirizzando un servizio di backend alla registrazione della directory dei servizi per il servizio di test dei pagamenti. Quindi aggiungi un criterio di mirroring della richiesta al servizio in Cloud Service Mesh.
Crea un servizio di backend per il criterio di mirroring della richiesta.
gcloud compute backend-services create payments-test-bes \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED
Crea un'associazione di servizi che fa riferimento a un Service Directory completamente gestito di Google Cloud.
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 \
Associa il servizio Service Directory al servizio di backend di test.
gcloud beta compute backend-services update payments-test-bes \ --global \ --service-bindings my-sd-binding
Modifica la mappa URL per eseguire il mirroring delle richieste al servizio di test.
gcloud compute url-maps edit my-url-map \ --region=global
Dopo aver caricato la configurazione della mappa URL in un editor, aggiungi il criterio di mirroring delle richieste per eseguire il mirroring delle richieste al servizio Directory dei servizi esistente.
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
Rimuovere un'associazione di servizi da un servizio di backend
Per rimuovere un'associazione di servizi dal servizio di backend, passa un
nuovo elenco di associazioni di servizi a gcloud compute backend-services update
. Il nuovo elenco non deve includere l'associazione dei servizi che vuoi
delete:
- Per rimuovere tutte le associazioni di servizi, imposta il flag
--no-service-bindings
. - Per rimuovere una o più associazioni di servizi, passa un nuovo elenco di associazioni di servizi
che omette le associazioni di servizi che vuoi rimuovere al
--service-bindings
flag.
Aggiungere o rimuovere associazioni di servizi
Il comando bind-service
aggiunge un'associazione di servizi all'insieme di associazioni di servizi esistenti su
il servizio di backend.
gcloud compute backend-services bind-service BACKEND_SERVICE_NAME \ --service-binding-name SERVICE_BINDING_URL \ --global
Il comando unbind-service
rimuove una associazione di servizi dall'insieme di associazioni di servizi esistenti nel servizio di backend.
gcloud compute backend-services unbind-service BACKEND_SERVICE_NAME \ --service-binding-name SERVICE_BINDING_URL \ --global
I comandi bind-service
e unbind-service
sono costrutti di Google Cloud CLI. Non sono
costrutti a livello di API.
Passaggi successivi
- Per informazioni sull'osservabilità con questa integrazione, vedi Osservabilità e debug con Service Directory.