Configura i servizi di edge di rete con gruppi di endpoint di rete con connettività ibrida

Google offre vari servizi di rete perimetrale che possono aumentare le funzionalità e la sicurezza dei servizi basati al di fuori di Google Cloud(servizi on-premise e multi-cloud), ad esempio in un data center on-premise o in un altro cloud pubblico.

Questi servizi perimetrali di rete ti consentono di:

Esempio di servizi edge di rete.
Esempio di servizi edge di rete (fai clic per ingrandire)

Per estendere questi vantaggi ai tuoi servizi privati, on-premise o multicloud, devi implementare un bilanciatore del carico delle applicazioni esterno per ricevere il traffico da internet pubblico. Il bilanciatore del carico delle applicazioni esterno inoltra il traffico a un proxy intermedio che Cloud Service Mesh configura. Questo proxy intermedio indirizza il traffico al tuo ambiente on-premise o nonGoogle Cloud utilizzando Cloud VPN o Cloud Interconnect.

Questo tutorial illustra un esempio end-to-end che utilizza Cloud Armor all'edge di Google per consentire in modo selettivo ai client di accedere privatamente a un servizio on-premise. Ai client è consentito l'accesso in base al loro indirizzo IP.

Completa le seguenti attività:

  1. Esegui il deployment di Envoy come proxy intermedio in un gruppo di istanze gestite (MIG). Questo proxy Envoy è connesso automaticamente a Cloud Service Mesh.
  2. Crea un'istanza di macchina virtuale (VM) privata e on-premise simulata. In un esempio reale, probabilmente avresti già una VM on-premise.
  3. Configura Cloud Service Mesh per instradare tutte le richieste che raggiungono il proxy intermedio alla VM on-premise simulata.
  4. Crea un bilanciatore del carico delle applicazioni esterno per ricevere il traffico da internet pubblico e inoltrarlo al proxy intermedio.
  5. Collega un criterio di sicurezza Cloud Armor al bilanciatore del carico delle applicazioni esterno.

Una volta completate queste attività, puoi esplorare facoltativamente servizi edge aggiuntivi e funzionalità avanzate di gestione del traffico.

Prerequisiti

Prima di configurare il proxy intermedio, completa le seguenti attività:

  • Rivedi Preparati a configurare Cloud Service Mesh con Envoy e completa tutte le attività preliminari, tra cui la concessione dei ruoli e delle autorizzazioni richiesti e l'abilitazione dell'API Cloud Service Mesh.

  • Assicurati che i tuoi endpoint on-premise privati siano raggiungibili dall'interno della tua rete Virtual Private Cloud (VPC) tramite Cloud VPN o Cloud Interconnect. Google Cloud L'esempio utilizzato in questo tutorial indirizza il traffico solo a un endpoint all'interno di Google Cloud, quindi non è necessario configurare la connettività ibrida per seguire la procedura. In uno scenario di deployment reale, sarebbe necessaria la configurazione della connettività ibrida.

  • Assicurati che gli intervalli CIDR delle subnet VPC non siano in conflitto con gli intervalli CIDR remoti. Quando gli indirizzi IP si sovrappongono, le route di subnet hanno la priorità sulla connettività remota.

  • Per questa dimostrazione, ottieni le autorizzazioni necessarie per creare e aggiornare le policy di sicurezza di Cloud Armor. Le autorizzazioni potrebbero variare se vuoi utilizzare un servizio diverso, ad esempio Cloud CDN.

Esegui il deployment del proxy intermedio sulle VM di Compute Engine

Questa sezione descrive come eseguire il deployment di Envoy come proxy intermedio su Compute Engine per ricevere il traffico dal bilanciatore del carico esterno e inoltrarlo alla destinazione remota.

Crea il modello di istanza per il proxy intermedio

Un modello di istanza specifica la configurazione delle VM all'interno di un gruppo di istanze gestite (MIG).

  1. Utilizza il seguente modello per creare istanze VM con un proxy Envoy connesso a Cloud Service Mesh:

    gcloud compute instance-templates create td-middle-proxy \
        --service-proxy=enabled \
        --tags=allow-hc
    
  2. Per personalizzare il deployment di Envoy, ad esempio specificando il nome della rete, impostando un percorso dei log o attivando la tracciabilità, consulta la Guida alle opzioni di deployment automatizzato di Envoy.

Crea il MIG per il proxy intermedio

  1. Crea il MIG in base al modello. In questo esempio, puoi mantenere la dimensione del gruppo di istanze pari a 1 per eseguire il deployment di una singola istanza. Per l'utilizzo in produzione, attiva la scalabilità automatica, ad esempio in base all'utilizzo della CPU, per evitare di creare un collo di bottiglia se il proxy intermedio deve gestire molto traffico.

    gcloud compute instance-groups managed create td-middle-proxy-us-central1-a \
        --zone=us-central1-a \
        --template=td-middle-proxy \
        --size=1
    
  2. Per configurazioni e verifiche future, identifica e memorizza l'indirizzo IP interno dell'istanza in MIDDLE_PROXY_IP:

    MIDDLE_PROXY_IP=$(gcloud compute instances list \
        --filter="name~'td-middle-proxy-us-central1-a-.*'" \
        --zones=us-central1-a \
        --format="value(networkInterfaces.networkIP)")
    

In questo esempio, creiamo il MIG che contiene istanze VM che eseguono Envoy in us-central1-a. Più avanti in questo tutorial, creerai un bilanciatore del carico esterno per gestire il traffico internet pubblico dai tuoi client.

Poiché il bilanciatore del carico esterno può instradare automaticamente il traffico alla regione più vicina ai tuoi client e al MIG all'interno di quella regione, ti consigliamo di creare più MIG. Per un elenco completo delle regioni e delle zone disponibili di Google Cloud, consulta Regioni e zone.

Esegui il deployment del servizio on-premise simulato

Questa sezione descrive il deployment di un gruppo di endpoint di rete (NEG) con connettività ibrida. In un deployment di produzione, questo NEG conterrebbe un endpoint (IP:port) che si risolve nel tuo server on-premise. In questo esempio, crei una VM di Compute Engine raggiungibile su un IP:port. Questa VM funge da server on-premise simulato.

Crea la VM on-premise simulata

  1. Esegui il deployment di una singola istanza VM per simulare un server privato on-premise:

    gcloud compute instances create on-prem-vm \
        --zone=us-central1-a \
        --metadata startup-script='#! /bin/bash
    ## Installs apache and a custom homepage
    sudo su -
    apt-get update
    apt-get install -y apache2
    cat <<EOF > /var/www/html/index.html
    <html><body><h1>Hello world from on-premises!</h1></body></html>
    EOF'
    
  2. Identifica e memorizza il suo indirizzo IP interno per configurazioni e verifiche future. Il server su questa VM è in ascolto delle richieste in entrata sulla porta 80:

    ON_PREM_IP=$(gcloud compute instances describe on-prem-vm \
        --zone=us-central1-a \
        --format="value(networkInterfaces.networkIP)" | sed "s/['\[\]]*//g")
    

Crea il NEG

Crea il NEG per questa configurazione dimostrativa specificando il tipo di endpoint di rete non-gcp-private-ip-port. Aggiungi l'indirizzo IP e la porta della tua VM on-premise simulata come endpoint a questo NEG. Come nel passaggio precedente, l'indirizzo IP viene archiviato nella variabile di ambiente ON_PREM_IP.

  1. Crea il NEG:

    gcloud compute network-endpoint-groups create td-on-prem-neg \
        --network-endpoint-type=non-gcp-private-ip-port \
        --zone=us-central1-a
    
  2. Aggiungi IP:port al nuovo NEG:

    gcloud compute network-endpoint-groups update td-on-prem-neg \
        --zone=us-central1-a \
        --add-endpoint="ip=$ON_PREM_IP,port=80"
    

Configura Cloud Service Mesh con i componenti di Cloud Load Balancing

Questa sezione mostra come configurare Cloud Service Mesh e abilitare il proxy intermedio per inoltrare il traffico al servizio privato on-premise. Configura i seguenti componenti:

  • Un controllo di integrità. Questo controllo di integrità si comporta in modo leggermente diverso rispetto ai controlli di integrità configurati per altri tipi di NEG.

  • Un servizio di backend. Per ulteriori informazioni, consulta la panoramica dei servizi di backend.

  • Una mappa di regole di routing. Questo passaggio include la creazione di una regola di forwarding, un proxy di destinazione e una mappa URL. Per saperne di più, consulta Mappe delle regole di routing.

Crea il controllo di integrità

I controlli di integrità verificano che gli endpoint siano integri e in grado di ricevere richieste. Il controllo di integrità per questo tipo di NEG si basa sul meccanismo di controllo di integrità distribuito di Envoy.

Gli altri tipi di NEG utilizzano il sistema di controllo di integrità centralizzato di Google Cloud:

gcloud compute health-checks create http td-on-prem-health-check

Crea il servizio di backend

  1. Crea un servizio di backend con lo schema di bilanciamento del carico INTERNAL_SELF_MANAGED da utilizzare con Cloud Service Mesh. Quando crei questo servizio di backend, specifica il controllo di integrità che hai creato in precedenza:

    gcloud compute backend-services create td-on-prem-backend-service \
        --global \
        --load-balancing-scheme=INTERNAL_SELF_MANAGED \
        --health-checks=td-on-prem-health-check
    
  2. Aggiungi il NEG che hai creato in precedenza come backend di questo servizio di backend:

    gcloud compute backend-services add-backend td-on-prem-backend-service \
        --global \
        --network-endpoint-group=td-on-prem-neg \
        --network-endpoint-group-zone=us-central1-a \
        --balancing-mode=RATE \
        --max-rate-per-endpoint=5
    

Crea la mappa di regole di routing

La mappa delle regole di routing definisce il modo in cui Cloud Service Mesh instrada il traffico al tuo servizio di backend.

  1. Crea una mappa URL che utilizzi il servizio di backend definito in precedenza:

    gcloud compute url-maps create td-hybrid-url-map \
        --default-service=td-on-prem-backend-service
    
  2. Crea un file denominato target_proxy.yaml con i seguenti contenuti:

    name: td-hybrid-proxy
    proxyBind: true
    urlMap: global/urlMaps/td-hybrid-url-map
    
  3. Utilizza il comando import per creare il proxy HTTP di destinazione (per ulteriori informazioni, consulta Proxy di destinazione per Cloud Service Mesh):

    gcloud compute target-http-proxies import td-hybrid-proxy \
        --source=target_proxy.yaml
    
  4. Crea una regola di forwarding che faccia riferimento a questo proxy HTTP di destinazione. Imposta l'indirizzo IP della regola di forwarding su 0.0.0.0. Se imposti l'indirizzo IP della regola su 0.0.0.0, il traffico viene instradato in base alla porta in entrata, al nome host HTTP e alle informazioni sul percorso configurate nella mappa URL. L'indirizzo IP specificato nella richiesta HTTP viene ignorato.

    gcloud compute forwarding-rules create td-hybrid-forwarding-rule \
        --global \
        --load-balancing-scheme=INTERNAL_SELF_MANAGED \
        --address=0.0.0.0 \
        --target-http-proxy=td-hybrid-proxy \
        --ports=8080 \
        --network=default
    

Verifica che il proxy intermedio possa instradare le richieste al servizio on-premise simulato

Cloud Service Mesh è ora configurato per instradare il traffico tramite il proxy intermedio al servizio on-premise privato simulato. Puoi verificare questa configurazione creando una VM client di test, accedendo a questa VM e inviando una richiesta al proxy intermedio che esegue Envoy. Dopo aver verificato la configurazione, elimina la VM client di test.

  1. Ottieni l'indirizzo IP del proxy intermedio. Queste informazioni ti servono solo per il passaggio di verifica:

    gcloud compute instances list
    
  2. Annota l'indirizzo IP dell'istanza nel MIG td-middle-proxy-us-central1-a.

  3. Crea un'istanza client di test:

    gcloud compute instances create test-client \
        --zone=us-central1-a
    
  4. Utilizza ssh per accedere al client di test:

    gcloud compute ssh test-client
        --zone=us-central1-a
    
  5. Invia una richiesta alla VM proxy intermedia, sostituendo l'indirizzo IP che hai ottenuto in precedenza per MIDDLE_PROXY_IP:

    curl $MIDDLE_PROXY_IP:8080
    

    Dovresti vedere l'output seguente:

    Hello world from on-premises!
    
  6. Esci dalla VM client di test. Dopo aver eseguito l'uscita, puoi eliminare la VM:

    gcloud compute instances delete test-client \
        --zone=us-central1-a
    

Esegui il deployment del bilanciatore del carico delle applicazioni esterno

In questa sezione, esegui il deployment di un bilanciatore del carico delle applicazioni esterno che invia il traffico in entrata al proxy intermedio. Questo deployment è una configurazione standard del bilanciatore del carico delle applicazioni esterno.

Prenotare un indirizzo IP esterno

Crea un indirizzo IP esterno statico globale (external-lb-vip) a cui i client esterni invieranno il traffico. Recupererai questo indirizzo IP esterno durante il passaggio di verifica più avanti in questo tutorial.

gcloud compute addresses create external-lb-vip \
    --ip-version=IPV4 \
    --global

Configura il bilanciatore del carico HTTP esterno

Configura il bilanciatore del carico esterno per instradare il traffico dei clienti internet al proxy intermedio già configurato.

  1. Crea un controllo di integrità utilizzato per determinare se il MIG che esegue il proxy intermedio è integro e in grado di ricevere traffico:

    gcloud compute health-checks create tcp tcp-basic-check \
        --port=8080
    
  2. Crea una regola firewall per consentire il controllo di integrità. Riutilizza il tag allow-hc qui per applicare la regola firewall alle VM proxy intermedie:

    gcloud compute firewall-rules create fw-allow-health-checks \
        --network=default \
        --action=ALLOW \
        --direction=INGRESS \
        --source-ranges=35.191.0.0/16,130.211.0.0/22 \
        --target-tags=allow-hc \
        --rules=tcp
    
  3. Crea un servizio di backend:

    gcloud compute backend-services create td-middle-proxy-backend-service \
        --protocol=HTTP \
        --health-checks=tcp-basic-check \
        --global
    
  4. Aggiungi il MIG del proxy intermedio come backend a questo servizio di backend:

    gcloud compute backend-services add-backend td-middle-proxy-backend-service \
        --instance-group=td-middle-proxy-us-central1-a \
        --instance-group-zone=us-central1-a \
        --global
    
  5. Crea una mappa URL per instradare le richieste in entrata al proxy intermedio come servizio di backend predefinito:

    gcloud compute url-maps create lb-map-http \
        --default-service=td-middle-proxy-backend-service
    
  6. Crea un proxy HTTP di destinazione in modo che le richieste all'indirizzo IP virtuale (VIP) della regola di forwarding del bilanciatore del carico esterno vengano gestite in base alla mappa URL:

    gcloud compute target-http-proxies create http-lb-proxy \
        --url-map=lb-map-http
    
  7. Crea una regola di forwarding globale per instradare le richieste in entrata al proxy HTTP di destinazione:

    gcloud compute forwarding-rules create http-forwarding-rule \
        --address=external-lb-vip\
        --global \
        --load-balancing-scheme=EXTERNAL \
        --target-http-proxy=http-lb-proxy \
        --ports=80
    

Imposta la porta denominata del gruppo di istanze gestite

Imposta una porta denominata per il gruppo di istanze per consentire al proxy intermedio di ricevere il traffico HTTP dal bilanciatore del carico esterno:

gcloud compute instance-groups managed set-named-ports td-middle-proxy-us-central1-a \
    --named-ports=http:8080 \
    --zone=us-central1-a

Verifica la configurazione del bilanciatore del carico delle applicazioni esterno

In questo passaggio, verifichi che il bilanciatore del carico esterno sia configurato correttamente.

  1. Dovresti essere in grado di inviare una richiesta al VIP del bilanciatore del carico e ricevere una risposta dalla VM on-premise simulata:

    PUBLIC_VIP=gcloud compute addresses describe external-lb-vip \
        --format="get(address)" \
        --global
    
  2. Emetti una richiesta curl all'indirizzo IP esterno (PUBLIC_VIP) e verifica di ricevere il messaggio Hello world:

    curl $PUBLIC_VIP
    

    Viene visualizzato l'output seguente:

    Hello world from on-premises!
    

Abilita Cloud Armor

Configura le policy di sicurezza di Cloud Armor in modo da consentire l'accesso al tuo servizio solo da CLIENT_IP_RANGE, che deve includere l'indirizzo IP esterno del dispositivo client con cui intendi eseguire il test, ad esempio "192.0.2.0/24".

Questi criteri vengono applicati al servizio di backend del bilanciatore del carico esterno (in questo esempio, td-hybrid-backend-service che punta al proxy intermedio). Per ulteriori informazioni sulle autorizzazioni richieste per impostare queste regole, vedi Configurare le policy di sicurezza di Cloud Armor.

  1. Crea il criterio di sicurezza di Cloud Armor:

    gcloud compute security-policies create external-clients-policy \
        --description="policy for external clients"
    
  2. Aggiorna la regola predefinita del criterio di sicurezza in modo da negare tutto il traffico:

    gcloud compute security-policies rules update 2147483647 \
        --security-policy=external-clients-policy \
        --action="deny-404"
    
  3. Aggiungi una regola con priorità più alta per consentire il traffico da un intervallo IP specifico:

    gcloud compute security-policies rules create 1000 \
        --security-policy=external-clients-policy \
        --description="allow traffic from CLIENT_IP_RANGE" \
        --src-ip-ranges="CLIENT_IP_RANGE" \
        --action="allow"
    
  4. Collega i criteri di sicurezza di Cloud Armor al servizio di backend:

    gcloud compute backend-services update td-middle-proxy-backend-service \
        --security-policy=external-clients-policy
    

Verifica finale

  1. Invia una richiesta curl all'indirizzo IP virtuale pubblico del bilanciatore del carico delle applicazioni esterno. Se l'indirizzo IP del dispositivo client rientra nell'intervallo CLIENT_IP_RANGE specificato in precedenza, dovresti ricevere la risposta prevista.

    curl $PUBLIC_VIP
    

    Viene visualizzato l'output seguente:

    Hello world from on-premises!
    
  2. Emetti la stessa richiesta curl da un dispositivo client diverso il cui indirizzo IP non rientra in CLIENT_IP_RANGE oppure aggiorna la regola della policy di sicurezza in modo che non includa più l'indirizzo IP del client. Ora dovresti ricevere un errore 404 Not Found.

Risoluzione dei problemi

Le istruzioni riportate di seguito descrivono come risolvere i problemi di configurazione.

Il mio servizio on-premise non è accessibile tramite l'indirizzo IP del bilanciatore del carico delle applicazioni esterno globale

Supponendo che il tuo servizio on-premise sia già accessibile sulle VMGoogle Cloud in cui sono in esecuzione gli Envoy, segui questi passaggi per risolvere i problemi di configurazione:

  1. Assicurati che il Google Cloud MIG Envoy sia segnalato come integro. Nella console Google Cloud , vai a Servizi di rete > Bilanciamento del carico e fai clic su url-map lb-map-http per visualizzarne i dettagli. Dovresti vedere che 1/1 dell'istanza in td-middle-proxy-us-central1-a è integro.

  2. Se non è integro, controlla se è stata configurata una regola firewall per consentire il traffico di controllo di integrità in entrata alle VM Google Cloud che eseguono Envoy:

    gcloud compute firewall-rules describe fw-allow-health-check
    

    Dovresti vedere l'output seguente:

    allowed:
    ‑ IPProtocol: tcp
    ...
    direction: INGRESS
    disabled: false
    ...
    ...
    sourceRanges:
    ‑ 130.211.0.0/22
    ‑ 35.191.0.0/16
    targetTags:
    ‑ allow-hc
    

Passaggi successivi