Configurare l'integrazione con Service Directory
Questa guida presuppone che tu abbia un deployment di Cloud Service Mesh in esecuzione e che tu abbia registrato almeno un servizio con Service Directory. Le istruzioni di configurazione si applicano indipendentemente dal fatto che utilizzi Envoy o gRPC senza proxy.
Per utilizzare Service Directory e Cloud Service Mesh, il primo passaggio consiste nel pubblicare il servizio in Service Directory. Consulta le informazioni sulla pubblicazione di un servizio in Service Directory o la documentazione di Service Directory per informazioni generali.
Dopo aver registrato il servizio con Service Directory, crea un binding del servizio utilizzando le risorse API di Cloud Service Mesh. Crea un servizio di backend dedicato all'integrazione con Service Directory, perché un servizio di backend che fa riferimento ai binding del servizio non può avere backend o un controllo di integrità associato.
Requisiti per le regola di forwarding e 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 l'indirizzo IP virtuale (VIP)
0.0.0.0
. - Se hai una zona privata, assicurati che la regola host nella mappa URL corrisponda al nome DNS che Service Directory configura nella tua zona privata Cloud DNS.
Se non rispetti queste linee guida, è probabile che le richieste in uscita dalle tue applicazioni non vadano a buon fine.
Imposta l'endpoint API network-services
Prima di creare e utilizzare un servizio di backend, assicurati che l'endpoint API network-services
sia impostato in modo che le risorse di binding del servizio in network-services
siano referenziate correttamente. Imposta l'endpoint API network-services
utilizzando il seguente comando.
export CLOUDSDK_API_ENDPOINT_OVERRIDES_NETWORKSERVICES="https://networkservices.googleapis.com/"
Requisiti di ruoli e autorizzazioni
Prima di creare la distribuzione di Cloud Service Mesh, assicurati di disporre delle seguenti autorizzazioni e ruoli.
Autorizzazioni e ruoli di binding del servizio
Questa sezione non tratta le autorizzazioni Proprietario, Editor e Visualizzatore a livello di progetto. Descrive le autorizzazioni e i ruoli necessari per creare, leggere, aggiornare ed eliminare le risorse.
Azione | Autorizzazione | Ruoli |
---|---|---|
Crea un binding del servizio. | networkservices.serviceBindings.create |
Amministratore di rete |
Recupera un service binding. | networkservices.serviceBindings.get |
Amministratore di rete, Visualizzatore di rete |
Elenca i binding del servizio in un progetto Google Cloud . | networkservices.serviceBindings.list |
Amministratore di rete, Visualizzatore di rete |
Aggiorna i service binding. | 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
al account di servizio che tenta di
collegare il binding del servizio al servizio Service Directory. In questo modo, il account di servizio può utilizzare un servizio Service Directory, il che significa che può fare riferimento a un servizio Service Directory in un binding del servizio.
Applicazione delle autorizzazioni
I controlli delle autorizzazioni IAM vengono eseguiti quando configuri Cloud Service Mesh. Devi disporre delle autorizzazioni necessarie per creare service binding e per associarli a determinati servizi Service Directory. Se sono presenti le autorizzazioni corrette, puoi configurare i client mesh per ottenere informazioni e inviare traffico a un servizio Service Directory.
Poiché questi controlli vengono eseguiti al momento della configurazione, la rimozione dell'autorizzazione di binding su un servizio Service Directory esistente non interrompe i flussi di traffico. Una volta stabilito un binding del servizio, la rimozione di un'autorizzazione non influisce sulla possibilità di un client mesh di conoscere e inviare traffico a un servizio Service Directory.
Per impedire a un client mesh di comunicare con un servizio Service Directory, puoi utilizzare altri meccanismi:
- Limitare l'accesso al servizio Service Directory. Ad esempio, puoi utilizzare le regole firewall.
- Elimina il servizio Service Directory.
- Aggiorna la configurazione di Cloud Service Mesh, ad esempio rimuovendo il service binding dal servizio di backend.
Best practice
- Sebbene Service Directory consenta la registrazione degli endpoint utilizzando l'API Service Directory, ti consigliamo di utilizzare le integrazioni che si registrano automaticamente a Service Directory quando sono disponibili. Per saperne di più su queste integrazioni, consulta Panoramica di Service Directory per GKE e Panoramica di Service Directory e Cloud Load Balancing.
- Ti consigliamo di utilizzare lo stesso spazio dei nomi e lo stesso servizio per un determinato servizio logico, anche quando questo viene implementato in regioni diverse.
Utilizzare Service Directory per Service Discovery
Il seguente diagramma fornisce una panoramica dello stato finale di questa procedura di configurazione, inclusi la configurazione, l'interazione tra i diversi sistemi e la risoluzione di una richiesta negli endpoint di un servizio. Questo esempio presuppone che tu abbia già registrato un servizio con Service Directory.
Rendere disponibile un servizio Service Directory a Cloud Service Mesh consiste nei seguenti passaggi.
- Crea un nuovo servizio di backend in Cloud Service Mesh e non creare backend per il servizio di backend.
- Crea un binding del servizio globale per il servizio Service Directory.
Associa il servizio Service Directory a questo servizio di backend. (Facoltativo) Imposta campi e norme aggiuntivi nel servizio di backend.
Crea una nuova configurazione di routing o aggiorna una configurazione esistente, in modo che le richieste dei client possano essere indirizzate al nuovo servizio di backend.
Non puoi impostare un controllo di integrità su un servizio di backend che fa riferimento a un binding del servizio. Il servizio di backend non può avere backend.
Crea l'integrazione
Segui queste istruzioni per integrare Cloud Service Mesh con Service Directory.
Crea un servizio di backend
Utilizza le seguenti istruzioni per creare un servizio di backend nel tuo 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 un binding del servizio 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 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 rendere instradabile questo servizio, devi configurare il routing.
Configura il routing
Per aggiornare la configurazione di routing, segui le istruzioni riportate di seguito.
API di routing dei servizi
Il seguente esempio presuppone che tu disponga di una risorsa Mesh
denominata sidecar-
mesh
. Crea una risorsa HTTPRoute
con i nomi host 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
Il seguente esempio presuppone che tu disponga già di una configurazione di routing di base, inclusa una mappa URL denominata my-url-map
.
- Innanzitutto, crea un matcher percorso per questa mappa URL. Il matcher di percorso
è semplice. Quando viene utilizzato, viene risolto in
td-sd-demo-service
, che hai creato nel passaggio precedente. - Successivamente, aggiungi una regola host alla mappa URL. Questa regola host fa sì che il matcher di percorso venga utilizzato se una richiesta specifica il nome host
myservice.example.com
.
Crea un semplice matcher di percorso che rimandi 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 consente di associare più servizi Service Directory allo stesso servizio di backend. Ad esempio, potresti avere due servizi Service Directory, ciascuno identico, ma con endpoint in regioni o zone Google Cloud diverse.
In altre parole, un singolo servizio di backend globale potrebbe avere due binding di servizio globali, uno che punta a un servizio in us-east1
e l'altro che punta 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 binding del servizio 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 un binding del servizio 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
Applicare criteri di gestione avanzata del traffico
Nella sezione precedente, hai utilizzato Cloud Service Mesh per configurare le norme 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. Hai un servizio di test esistente che si trova
al di fuori del mesh Cloud Service Mesh. Il servizio di test è un backend per un
bilanciatore del carico delle applicazioni interno. Vuoi riprodurre parte del traffico di produzione
proveniente dal mesh Cloud Service Mesh a questo servizio esterno.
Cloud Service Mesh può farlo utilizzando RequestMirrorPolicy
, che può inviare
traffico a un altro servizio di backend durante l'elaborazione della richiesta. Questa procedura
è chiamata anche shadowing di una richiesta e ti consente di esaminare il traffico senza
influire sui tuoi servizi di produzione.
Puoi consentire ai client Envoy di eseguire il mirroring del traffico verso un servizio di test aggiungendo o rimuovendo manualmente l'endpoint del servizio di test dalla mesh Cloud Service Mesh. Tuttavia, la procedura è più semplice quando utilizzi l'integrazione di Service Directory.
In questo esempio, inizi puntando un servizio di backend alla registrazione di Service Directory per il servizio di test dei pagamenti. Poi aggiungi un criterio di mirroring delle richieste al servizio in Cloud Service Mesh.
Crea un servizio di backend per il criterio di mirroring delle richieste.
gcloud compute backend-services create payments-test-bes \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED
Crea un binding del servizio 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 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 Service Directory 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
Rimuovi un binding del servizio da un servizio di backend
Per rimuovere un'associazione di servizi dal servizio di backend, trasmetti un
nuovo elenco di associazioni di servizi al comando gcloud compute backend-services update
. Il nuovo elenco non deve includere l'associazione di servizi che vuoi eliminare:
- Per rimuovere tutti i binding dei servizi, imposta il flag
--no-service-bindings
. - Per rimuovere uno o più binding del servizio, passa un nuovo elenco di binding del servizio
che omette i binding del servizio che vuoi rimuovere al flag
--service-bindings
.
Aggiungere o rimuovere i binding del servizio
Il comando bind-service
aggiunge un binding del servizio all'insieme di binding del servizio esistenti nel servizio di backend.
gcloud compute backend-services bind-service BACKEND_SERVICE_NAME \ --service-binding-name SERVICE_BINDING_URL \ --global
Il comando unbind-service
rimuove un binding del servizio dal set di binding del servizio 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, consulta Osservabilità e debug con Service Directory.