Configura 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. Trova informazioni su come pubblicare un servizio in Service Directory oppure consulta la documentazione di Service Directory per una panoramica generale.

Dopo aver registrato il servizio con Service Directory, crea un'associazione dei servizi 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 alle associazioni dei servizi non può avere backend o un controllo di integrità associato.

Requisiti per le regole 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 usi le API di bilanciamento del carico precedenti, segui queste linee guida:

  1. Assicurati che la regola di forwarding di Cloud Service Mesh utilizzi l'indirizzo IP virtuale (VIP) 0.0.0.0.
  2. 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 i riferimenti alle risorse delle associazioni dei servizi nelle risorse network-services siano corretti. 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 il deployment di Cloud Service Mesh, assicurati di disporre delle autorizzazioni e dei ruoli seguenti.

Autorizzazioni e ruoli di associazione dei servizi

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

Azione Autorizzazione Ruoli
Creare un'associazione dei servizi. networkservices.serviceBindings.create Network Admin
Recuperare un'associazione dei servizi. networkservices.serviceBindings.get Network Admin, Network Viewer
Elencare le associazioni dei servizi in un progetto Google Cloud . networkservices.serviceBindings.list Network Admin, Network Viewer
Aggiornare associazioni dei servizi. networkservices.serviceBindings.update Network Admin
Eliminare associazioni dei servizi. networkservices.serviceBindings.delete Network Admin

Autorizzazioni del servizio Service Directory

L'amministratore di Service Directory deve concedere l'autorizzazione servicedirectory.services.bind al service account che tenta di collegare l'associazione dei servizi al servizio Service Directory. In questo modo, il service account può utilizzare un servizio Service Directory, il che significa che può fare riferimento a un servizio Service Directory in un'associazione dei servizi.

Applicazione delle autorizzazioni

I controlli delle autorizzazioni IAM vengono eseguiti quando configuri Cloud Service Mesh. Devi disporre delle autorizzazioni necessarie per creare associazioni dei servizi e per associare le associazioni dei servizi a servizi Service Directory specifici. Se sono state applicate 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 associazione su un servizio Service Directory esistente non interrompe i flussi di traffico. Una volta stabilita un'associazione dei servizi, la rimozione di un'autorizzazione non influisce sulla capacità di un client mesh di ottenere informazioni 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:

  1. Limitare l'accesso al servizio Service Directory. Ad esempio, puoi utilizzare le regole firewall.
  2. Eliminare il servizio Service Directory.
  3. Aggiornare la configurazione di Cloud Service Mesh, ad esempio rimuovendo l'associazione dei servizi 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 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 determinato servizio logico, anche quando il relativo deployment viene eseguito in regioni diverse.

Utilizza Service Directory per Service Discovery

Il diagramma di seguito fornisce una panoramica dello stato finale di questa procedura, 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à un servizio registrato con 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)

Per rendere disponibile un servizio Service Directory a Cloud Service Mesh, è necessario seguire questi passaggi:

  1. Crea un nuovo servizio di backend in Cloud Service Mesh e non creare backend per il servizio di backend.
  2. Crea un'associazione dei servizi globale per il servizio Service Directory.
  3. Associa il servizio Service Directory a questo servizio di backend. Facoltativamente, puoi impostare campi e policy aggiuntivi nel servizio di backend.

  4. 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'associazione dei servizi. Inoltre, 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 istruzioni seguenti 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 dei 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
    
  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 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 queste istruzioni.

API di routing dei servizi

L'esempio di seguito 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.

  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 di seguito presuppone che tu disponga già di una configurazione di routing di base, inclusa una mappa URL denominata my-url-map.

  • Innanzitutto, crea un matcher di percorso per questa mappa URL. Il matcher di percorso non è complicato. 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 matcher di percorso venga utilizzato se una richiesta specifica il nome host myservice.example.com.
  1. Crea un matcher di percorso semplice che rimandi 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 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 associazioni dei servizi globali, una che punta a un servizio in us-east1 e l'altra che punta a un servizio in us-west1.

  1. 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
    
  2. Crea un'associazione dei 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 dei 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 policy di gestione avanzata del traffico

Nella sezione precedente, hai utilizzato Cloud Service Mesh per configurare le policy di routing in base a un servizio Service Directory esistente. Puoi applicare questo pattern a scenari di gestione del traffico più avanzati.

Supponiamo che tu abbia 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 duplicare parte del traffico di produzione proveniente dal mesh Cloud Service Mesh su 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 consente di esaminare il traffico senza influire sui servizi di produzione.

Puoi consentire ai client Envoy di eseguire lo shadowing del traffico verso un servizio di test aggiungendo o rimuovendo manualmente l'endpoint del servizio di test dal mesh Cloud Service Mesh. Tuttavia, la procedura è più semplice quando utilizzi l'integrazione di Service Directory.

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

In questo esempio, inizi puntando un servizio di backend alla registrazione di Service Directory per il servizio di test dei pagamenti. Poi aggiungi una policy di mirroring delle richieste al servizio in Cloud Service Mesh.

  1. Crea un servizio di backend per la policy di mirroring delle richieste.

    gcloud compute backend-services create payments-test-bes \
     --global \
     --load-balancing-scheme=INTERNAL_SELF_MANAGED
    
  2. Crea un'associazione dei 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 \
    
  3. 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
    
  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 policy di mirroring delle richieste per eseguire il mirroring delle richieste sul 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'associazione dei servizi da un servizio di backend

Per rimuovere un'associazione dei servizi dal servizio di backend, passa un nuovo elenco di associazioni dei servizi al comando gcloud compute backend-services update. Il nuovo elenco non deve includere l'associazione dei servizi che vuoi eliminare:

  • Per rimuovere tutte le associazioni dei servizi, imposta il flag --no-service-bindings.
  • Per rimuovere una o più associazioni dei servizi, passa un nuovo elenco di associazioni dei servizi in cui sono omesse quelle che vuoi rimuovere al flag --service-bindings.

Aggiungi o rimuovi associazioni dei servizi

Il comando bind-service aggiunge un'associazione dei servizi all'insieme di associazioni dei servizi 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'associazione dei servizi dall'insieme di associazioni dei 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