Configura 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.

Una volta registrato il servizio in Service Directory, creano un'associazione di servizi utilizzando le risorse API di Cloud Service Mesh. Crea da te un servizio di backend dedicato all'integrazione Service Directory, perché un servizio di backend che fa riferimento le associazioni di servizi non possono 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 meno recenti, segui queste linee guida:

  1. Assicurati che la regola di forwarding di Cloud Service Mesh utilizzi il token virtuale 0.0.0.0 Indirizzo IP (VIP).
  2. 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 che probabilmente falliranno.

Imposta l'endpoint 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 API network-services utilizzando il seguente comando.

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

Requisiti relativi a ruoli e autorizzazioni

Assicurati di disporre delle autorizzazioni e dei ruoli seguenti prima di creare il tuo Deployment di Cloud Service Mesh.

Autorizzazioni e ruoli di associazione dei servizi

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. Questo consente all'account di servizio di usare un servizio Service Directory, il che significa che l'account possa fare riferimento a un servizio Service Directory in un dell'associazione dei servizi.

Applicazione delle autorizzazioni

I controlli delle autorizzazioni IAM vengono eseguiti durante la configurazione di Cloud Service Mesh. Tu devi disporre delle autorizzazioni necessarie per creare associazioni di servizi e associare associazioni di servizi con particolari servizi Service Directory. Se che siano configurate le autorizzazioni corrette, puoi configurare i client mesh scopri di più e invia traffico a un servizio Service Directory.

Poiché questi controlli vengono eseguiti in fase di configurazione, viene rimossa l'autorizzazione di associazione su un servizio Service Directory esistente non interrompi il traffico dei flussi. Una volta stabilita un'associazione di servizi, la rimozione di un'autorizzazione determinare se un client mesh può apprendere informazioni e inviare traffico a un Service Directory.

Interruzione della comunicazione da parte di un client mesh con Service Directory di servizio, puoi utilizzare altri meccanismi:

  1. Limita l'accesso al servizio Service Directory. Ad esempio: puoi usare le regole firewall.
  2. Elimina il servizio Service Directory.
  3. Aggiornare la configurazione di Cloud Service Mesh, ad esempio rimuovendo il token dell'associazione di servizi dal servizio di backend.

Best practice

  • Sebbene Service Directory consenta la registrazione degli endpoint con l'API Service Directory, consigliamo di utilizzare integrazioni che si registrano automaticamente a Service Directory quando sono disponibili. Per ulteriori informazioni 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 anche quando viene eseguito il deployment in regioni diverse.

Utilizzare Service Directory per Service Discovery

Il diagramma seguente fornisce una panoramica dello stato finale di questa configurazione. procedura di configurazione, tra cui la configurazione, il modo in cui i diversi sistemi interagiscono viene risolta negli endpoint di un servizio. Questo esempio presuppone che tu un servizio è già registrato in Service Directory.

Dettagli di configurazione per l'utilizzo di Service Directory per Service Discovery.
Dettagli di configurazione per l'utilizzo di Service Directory per Service Discovery (fai clic per ingrandire)

Rendi disponibile un servizio Service Directory in Cloud Service Mesh è costituita dai seguenti passaggi.

  1. Crea un nuovo servizio di backend in Cloud Service Mesh e non creare per il servizio di backend.
  2. Crea un'associazione di servizi globale per Service Directory completamente gestito di Google Cloud.
  3. Associa il servizio Service Directory a questo servizio di backend. Facoltativamente, imposta campi e criteri aggiuntivi sul servizio di backend.

  4. 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

Utilizza le istruzioni riportate di seguito per creare un servizio di backend nel tuo Deployment di Cloud Service Mesh.

  1. 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
    
  2. 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
    
  3. 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ù Service Directory di servizio, Cloud Service Mesh inizia a tenere traccia degli endpoint associati con il servizio Service Directory. Gli endpoint sono coppie IP:porta distinte. A per rendere questo servizio instradabile, devi configurare il routing.

Configura il routing

Utilizza le seguenti istruzioni per aggiornare la configurazione del routing.

API per il routing dei servizi

L'esempio seguente presuppone che tu abbia una risorsa Mesh denominata sidecar- mesh. Crei una risorsa HTTPRoute con i nomi host impostati su myservice.example.com e destinazione impostati sul servizio di backend td-sd-demo-service che hai creato nella sezione precedente.

  1. Crea la specifica HTTPRoute e salvala in un file denominato 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. 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 sì che il percorso matcher da utilizzare se una richiesta specifica il nome host myservice.example.com.
  1. Crea un matcher di percorso semplice che punti al 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
    
  2. 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
    

Collega 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 servizi associazioni, di cui una che rimanda a un servizio in us-east1 e l'altra che punta a un a un servizio in us-west1.

  1. Crea un servizio di backend per la Service Directory importato completamente gestito di Google Cloud.

    gcloud compute backend-services create td-sd-demo-service \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. 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 \
    
  3. Crea un'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 \
    
  4. Associa i servizi us-east1 e us-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 a fronte di un servizio Service Directory esistente. Puoi applicare questa modelli di machine learning a scenari più avanzati di gestione del traffico.

Considera questo scenario. Disponi già di un servizio di test al di fuori del mesh di Cloud Service Mesh. Il servizio di test è un backend per il bilanciatore del carico delle applicazioni interno. Vuoi ripetere del traffico di produzione provenienti dal mesh di Cloud Service Mesh a questo servizio esterno. Cloud Service Mesh può farlo utilizzando RequestMirrorPolicy, che può inviare a un altro servizio di backend durante l'elaborazione della richiesta. 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 lo shadowing del traffico verso un servizio di test manualmente aggiunta o rimozione dell'endpoint di servizio di test al mesh di Cloud Service Mesh. Tuttavia, il processo è più semplice quando utilizzi Service Directory e integrazione.

Utilizzo di Service Directory per Service Discovery con mirroring.
Utilizzo di Service Directory per il Service Discovery con mirroring(fai clic per ingrandire)

In questo esempio, la prima cosa da fare è puntare un servizio di backend al Registrazione in Service Directory per il servizio di test dei pagamenti. Quindi aggiungi un criterio di mirroring della richiesta al servizio in Cloud Service Mesh.

  1. 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
    
  2. 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 \
    
  3. Associa il servizio Service Directory al backend di test completamente gestito di Google Cloud.

    gcloud beta compute backend-services update payments-test-bes \
     --global \
     --service-bindings my-sd-binding
    
  4. Modifica la mappa URL per eseguire il mirroring delle richieste al servizio di test.

    gcloud compute url-maps edit my-url-map \
      --region=global
    
  5. Dopo aver caricato la configurazione della mappa URL in un editor, aggiungi la richiesta esegui il mirroring del criterio per eseguire il mirroring delle richieste a Service Directory esistente completamente gestito di Google Cloud.

    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 elimina:

  • 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 omettono le associazioni di servizi che vuoi rimuovere --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 un'associazione di servizi dall'insieme di servizi di servizi di backend sul 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. Sono non a livello di API.

Passaggi successivi