Accedere ai servizi gestiti utilizzando Private Service Connect con controlli di servizio HTTP(S) consumer

Quando accedi a servizi gestiti eseguiti su Google Cloud, potresti voler canalizzare le richieste a tali servizi tramite un punto di applicazione dei criteri. L'utilizzo di un punto di applicazione dei criteri consente di configurare il logging e la crittografia, nonché di specificare a quali URL si accede.

Puoi utilizzare Private Service Connect con controlli di servizio HTTP(S) consumer per connettere bilanciatori del carico HTTP(S) globali esterni a servizi gestiti in Google Cloud utilizzando il bilanciatore del carico per l'applicazione dei criteri. Puoi connetterti al servizio tramite una regola di forwarding mappata a un gruppo di endpoint di rete (NEG) di Private Service Connect.

Per ulteriori informazioni, consulta la pagina relativa all'utilizzo di Private Service Connect per pubblicare e utilizzare servizi gestiti.

Ruoli

Il ruolo di amministratore del bilanciatore del carico Compute (roles/compute.loadBalancerAdmin) contiene l'autorizzazione richiesta per eseguire le attività descritte in questa guida.

Prima di iniziare

  • Se vuoi pubblicare il tuo servizio, vedi Pubblicare servizi gestiti utilizzando Private Service Connect.

  • Se vuoi connettere un servizio pubblicato da una terza parte, chiedi al producer di servizi le seguenti informazioni:

    • L'URI del collegamento del servizio a cui vuoi connetterti. Il collegamento al servizio ha il seguente formato: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

    • Tutti i requisiti relativi ai nomi DNS che utilizzi per inviare le richieste. Potresti dover utilizzare nomi DNS specifici nella configurazione della mappa URL o nella configurazione DNS.

Specifiche

  • Il servizio di destinazione configurato nel NEG Private Service Connect deve essere un collegamento di servizio.

  • Devi configurare un bilanciatore del carico HTTP(S) esterno globale con funzionalità di gestione del traffico avanzata (schema di bilanciamento del carico impostato su EXTERNAL_MANAGED).

    Il bilanciatore del carico HTTP(S) esterno globale (classico) non è supportato per questa configurazione.

  • Il NEG Private Service Connect deve essere l'unico backend nel servizio di backend.

    Tuttavia, la mappa URL per il bilanciatore del carico può contenere più servizi di backend e tali servizi possono contenere qualsiasi tipo di backend.

  • Il servizio di backend associato al NEG deve utilizzare HTTPS per il protocollo.

Crea gruppo di endpoint di rete

Crea un NEG Private Service Connect che rimandi al collegamento al servizio per il servizio pubblicato a cui vuoi accedere.

gcloud beta compute network-endpoint-groups create NEG_NAME \
  --network-endpoint-type=private-service-connect \
  --psc-target-service=TARGET_SERVICE \
  --region=REGION

Sostituisci quanto segue:

  • NEG_NAME: un nome per il gruppo di endpoint di rete.

  • TARGET_SERVICE: il collegamento di servizio a cui vuoi connetterti.

  • REGION: area geografica in cui creare il gruppo di endpoint di rete. L'area geografica deve corrispondere a quella del servizio a cui vuoi connetterti.

Configurare il bilanciatore del carico

Configura un bilanciatore del carico HTTP(S) esterno globale con funzionalità di gestione del traffico avanzate (schema di bilanciamento del carico impostato su EXTERNAL_MANAGED) per la connessione ai servizi gestiti.

Sebbene il NEG Private Service Connect sia a livello di area geografica, tutti gli altri componenti di bilanciamento del carico in questa configurazione sono globali.

  1. Prenota un indirizzo IPv4 esterno globale per il bilanciatore del carico.

    gcloud compute addresses create ADDRESS_NAME \
      --ip-version=IPV4 --global
    

    Sostituisci ADDRESS_NAME con un nome per la risorsa dell'indirizzo IP.

    Esegui questo comando per visualizzare l'indirizzo IP riservato:

    gcloud compute addresses describe ADDRESS_NAME \
      --format="get(address)" --global
    
  2. Crea un servizio di backend per ogni NEG creato.

    gcloud beta compute backend-services create BACKEND_SERVICE_NAME \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --protocol=HTTPS \
      --global
    

    Sostituisci BACKEND_SERVICE_NAME con il nome del servizio di backend.

  3. Per ogni servizio di backend creato, aggiungi il NEG corrispondente al servizio di backend.

    gcloud beta compute backend-services add-backend BACKEND_SERVICE_NAME \
      --network-endpoint-group=NEG_NAME \
      --network-endpoint-group-region=REGION \
      --global
    

    Sostituisci quanto segue:

    • BACKEND_SERVICE_NAME: nome del servizio di backend.
    • NEG_NAME: il nome del gruppo di endpoint di rete.
    • REGION: area geografica del gruppo di endpoint di rete.
  4. Crea una mappa URL per il bilanciatore del carico.

    Una mappa URL deve fare riferimento a un servizio di backend predefinito. Se stai configurando il bilanciatore del carico con un servizio di backend, imposta tale servizio di backend come predefinito. Se stai configurando il bilanciatore del carico in modo che utilizzi più servizi di backend, scegli uno dei servizi di backend come predefinita per la mappa degli URL.

    gcloud beta compute url-maps create URL_MAP_NAME \
      --default-service=DEFAULT_BACKEND_SERVICE_NAME \
      --global
    

    Sostituisci quanto segue:

    • URL_MAP_NAME: un nome per la mappa URL.

    • DEFAULT_BACKEND_SERVICE_NAME: nome del servizio di backend predefinito del bilanciatore del carico. Il valore predefinito viene utilizzato quando nessuna regola host corrisponde al nome host richiesto.

  5. Aggiungi altri servizi di backend alla mappa URL.

    Se la mappa URL deve fare riferimento a due o più servizi di backend, aggiungi ulteriori matcher percorso e regole host. Se la mappa URL fa riferimento a un solo servizio di backend, procedi alla creazione del proxy HTTPS di destinazione.

    1. Per ogni servizio di backend, aggiungi un matcher di percorso. Devi creare un matcher di percorso per ogni servizio di backend.

      gcloud beta compute url-maps add-path-matcher URL_MAP_NAME \
        --path-matcher-name=PATH_MATCHER \
        --default-service=BACKEND_SERVICE_NAME \
        --global
      

      Sostituisci quanto segue:

      • URL_MAP_NAME: il nome della mappa URL.
      • PATH_MATCHER: un nome per il matcher percorso.
      • BACKEND_SERVICE_NAME: nome del servizio di backend.
    2. Per ogni nome host, aggiungi una regola host.

      Ogni regola host può fare riferimento a un solo matcher percorso, ma due o più regole host possono fare riferimento allo stesso matcher percorso.

      gcloud beta compute url-maps add-host-rule URL_MAP_NAME \
        --hosts=HOST \
        --path-matcher-name=PATH_MATCHER \
        --global
      

      Sostituisci quanto segue:

      • URL_MAP_NAME: il nome della mappa URL.
      • HOST: nome host a cui inviare richieste per questo servizio. Ad esempio, service1.producer1.example.com.
      • PATH_MATCHER: nome del matcher percorso.
      • REGION: area della mappa URL.
  6. Crea il proxy HTTPS di destinazione.

    Per creare un bilanciatore del carico HTTPS, devi disporre di una risorsa per il certificato SSL da utilizzare nel proxy di destinazione HTTPS. Puoi creare una risorsa di certificato SSL utilizzando un certificato SSL gestito da Google o un certificato SSL autogestito. L'utilizzo dei certificati gestiti da Google è consigliato perché Google Cloud li ottiene, gestisce e rinnova automaticamente.

    Per creare un certificato gestito da Google, devi avere un dominio.

    Utilizza questo comando per creare una risorsa di certificato SSL gestita da Google:

    gcloud beta compute ssl-certificates create CERTIFICATE \
      --domains DOMAIN
    

    Sostituisci quanto segue:

    • CERTIFICATE: un nome per il certificato.
    • DOMAIN: il nome di dominio del bilanciatore del carico.

    Utilizza questo comando per creare una risorsa di certificato SSL autogestita. Per creare un certificato SSL autogestito, devi disporre di un file di chiave privata locale e di un file del certificato locale. Se devi creare questi file, consulta il passaggio 1 dell'utilizzo dei certificati SSL autogestiti.

    gcloud beta compute ssl-certificates create CERTIFICATE \
      --certificate LB_CERT \
      --private-key LB_PRIVATE_KEY
    

    Sostituisci quanto segue:

    • CERTIFICATE: un nome per il certificato.

    • LB_CERT: il percorso al file del certificato in formato PEM per il certificato autogestito.

    • LB_PRIVATE_KEY: percorso al file della chiave privata in formato PEM per il certificato autogestito.

    Utilizza la risorsa del certificato SSL per creare un proxy HTTPS di destinazione.

    gcloud beta compute target-https-proxies create PROXY_NAME \
      --url-map=URL_MAP_NAME \
      --ssl-certificates=CERTIFICATE
    

    Sostituisci quanto segue:

    • PROXY_NAME: un nome per il proxy HTTPS di destinazione.
    • URL_MAP_NAME: il nome della mappa URL.
    • CERTIFICATE: nome della risorsa del certificato.
  7. Crea la regola di forwarding.

    gcloud beta compute forwarding-rules create FWD_RULE \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network-tier=PREMIUM \
      --address=ADDRESS_NAME \
      --target-https-proxy=PROXY_NAME \
      --ports=443 \
      --global
    

    Sostituisci quanto segue:

    • FWD_RULE: un nome per la regola di forwarding.

    • ADDRESS_NAME: la risorsa dell'indirizzo IP che hai prenotato per la regola di forwarding.

    • PROXY_NAME: il nome del proxy HTTPS di destinazione.

Configura record DNS

Se vuoi accedere all'endpoint di Private Service Connect utilizzando un nome DNS, crea i nomi DNS per ogni regola di forwarding esterno. Il record DNS deve corrispondere a un nome nella mappa URL. A meno che la tua mappa URL non riscrivi i nomi, il record DNS deve corrispondere anche ai nomi previsti dal servizio del produttore.

Se utilizzi Cloud DNS per gestire il DNS, consulta la sezione relativa all'aggiunta di un record DNS.

Verificare la configurazione

  1. Crea l'istanza VM.

    gcloud compute instances create VM_NAME \
      --network=NETWORK \
      --image-project=debian-cloud --image-family=debian-9 \
      --zone=ZONE
    

    Sostituisci quanto segue:

    • VM_NAME: un nome per la macchina virtuale.

    • NETWORK: rete per la VM.

    • ZONE: zona della VM.

  2. Connettiti alla VM.

    gcloud compute ssh VM_NAME --zone=ZONE
    
  3. Utilizza il criterio curl per verificare la configurazione. Questo comando imposta l'intestazione Host e bypassa la risoluzione DNS specificando un indirizzo IP definito dall'utente. Puoi omettere la porta se utilizzi la porta predefinita per il protocollo, ad esempio utilizzando la porta 443 per HTTPS.

    Puoi evitare la convalida dei certificati utilizzando il flag -k. Potresti dover saltare la convalida se hai utilizzato un certificato autofirmato per configurare il proxy HTTPS di destinazione o se la VM non ha il certificato dell'autorità di certificazione che ha firmato il certificato.

    curl [-k] -s 'https://HOST:443/RESOURCE_URI' \
        -H 'Host: HOST' \
        --connect-to HOST:443:FWD_RULE_IP_ADDRESS:443
    

    Sostituisci quanto segue:

    • HOST: nome host configurato nella mappa URL.

    • RESOURCE_URI: il resto dell'URI della risorsa che vuoi utilizzare per la verifica.

    • FWD_RULE_IP_ADDRESS: indirizzo IP assegnato alla regola di forwarding.

Risolvere i problemi

Se visualizzi un errore 404 quando provi ad accedere alla regola di forwarding del bilanciatore del carico HTTP(S) esterno globale, l'errore potrebbe avere una delle seguenti cause:

  • La mappa degli URL non è ancora stata propagata.

    Se hai appena creato il bilanciatore del carico HTTP(S) esterno globale, prova ad attendere qualche minuto.

  • L'URL che utilizzi nella richiesta non corrisponde a un URL definito nella mappa URL.

    Verifica che l'URL che stai cercando corrisponda alla configurazione della mappa URL nel bilanciatore del carico HTTP(S) esterno globale.

  • Il backend del producer di servizi non supporta l'URL a cui stai tentando di accedere

    Chiedi al producer di servizi di verificare l'URL da utilizzare per accedere al servizio.