Puoi scegliere come target un endpoint privato per le chiamate HTTP dall'esecuzione del flusso di lavoro utilizzando il registro dei servizi di Service Directory con Workflows. In questo modo, puoi fornire al flusso di lavoro un nome del servizio Service Directory. L'esecuzione del flusso di lavoro utilizza le informazioni recuperate dal registro dei servizi per inviare la richiesta HTTP appropriata, senza uscire in una rete pubblica.
Questo documento mostra come registrare una macchina virtuale (VM) in una rete Virtual Private Cloud (VPC) come endpoint Service Directory:
Una rete VPC fornisce la connettività per le tue istanze VM e ti consente di creare endpoint privati all'interno della tua rete VPC utilizzando indirizzi IP interni. Le chiamate HTTP a una risorsa di rete VPC vengono inviate tramite una rete privata, applicando al contempo Identity and Access Management (IAM) e i Controlli di servizio VPC.
Service Directory è un registro dei servizi che memorizza informazioni sui servizi di rete registrati, inclusi nomi, posizioni e attributi. Indipendentemente dalla loro infrastruttura, puoi registrare automaticamente i servizi e acquisirne i dettagli. In questo modo puoi scoprire, pubblicare e connettere servizi su larga scala per tutti i tuoi endpoint di servizio.
Questo diagramma fornisce una panoramica:
In linea generale, devi:
- Concedi le autorizzazioni all'agente di servizio Cloud Workflows in modo che possa visualizzare le risorse Service Directory e accedere alle reti VPC utilizzando Service Directory.
- Crea una rete VPC per fornire funzionalità di rete.
- Crea una regola firewall VPC in modo da poter consentire o negare il traffico da o verso le istanze VM nella tua rete VPC.
- Crea un'istanza VM nella rete VPC. Un'istanza VM di Compute Engine è una macchina virtuale ospitata sull'infrastruttura di Google. I termini istanza Compute Engine, istanza VM e VM sono sinonimi e vengono utilizzati in modo intercambiabile.
- Esegui il deployment di un'applicazione sulla VM. Puoi eseguire un'app sull'istanza VM e verificare che il traffico venga gestito come previsto.
Configura Service Directory in modo che l'esecuzione del workflow possa richiamare un endpoint Service Directory.
Crea ed esegui il deployment del workflow. Il valore
private_service_name
nel flusso di lavoro specifica l'endpoint Service Directory che hai registrato nel passaggio precedente.
Concedere le autorizzazioni all'agente di servizio Cloud Workflows
Alcuni Google Cloud servizi hanno agenti di servizio che consentono ai servizi di accedere alle tue risorse. Se un'API richiede un service agent, Google lo crea dopo che hai attivato e utilizzato l'API.
Quando esegui il deployment di un flusso di lavoro per la prima volta, l'agente di servizio Cloud Workflows viene creato automaticamente con il seguente formato:
service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com
Puoi creare manualmente il account di servizio in un progetto senza workflow con questo comando:
gcloud beta services identity create \ --service=workflows.googleapis.com \ --project=PROJECT_ID
Sostituisci
PROJECT_ID
con l'ID progetto Google Cloud.Per visualizzare le risorse di Service Directory, concedi il ruolo Visualizzatore Service Directory (
servicedirectory.viewer
) sul progetto all'agente di servizio Workflows:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com \ --role=roles/servicedirectory.viewer
Sostituisci
PROJECT_NUMBER
con il numero del tuo progetto Google Cloud. Puoi trovare il numero di progetto nella pagina Benvenuto della console Google Cloud o eseguendo questo comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Per accedere alle reti VPC utilizzando Service Directory, concedi il ruolo di servizio autorizzato Private Service Connect (
roles/servicedirectory.pscAuthorizedService
) nel progetto all'agente di servizio Workflows:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com \ --role=roles/servicedirectory.pscAuthorizedService
Crea una rete VPC
Una rete VPC è una versione virtuale di una rete fisica implementata all'interno della rete di produzione di Google. Fornisce connettività per le tue istanze VM di Compute Engine.
Puoi creare una rete VPC in modalità automatica o personalizzata. Ogni nuova rete che crei deve avere un nome univoco all'interno dello stesso progetto.
Ad esempio, il seguente comando crea una rete VPC in modalità automatica:
gcloud compute networks create NETWORK_NAME \ --subnet-mode=auto
Sostituisci NETWORK_NAME
con un nome per la rete VPC.
Per saperne di più, consulta la pagina Crea e gestisci le reti VPC.
Crea una regola firewall VPC
Le regole firewall VPC consentono o negano il traffico da o verso le istanze VM in una rete VPC in base al numero di porta, al tag o al protocollo.
Le regole firewall VPC sono definite a livello di rete e si applicano solo alla rete in cui vengono create; tuttavia, il nome che scegli per una regola deve essere univoco per il progetto.
Ad esempio, il comando seguente crea una regola firewall per la rete VPC che hai creato in precedenza.
gcloud compute firewall-rules create RULE_NAME \ --network=projects/PROJECT_ID/global/networks/NETWORK_NAME \ --direction=INGRESS \ --action=ALLOW \ --source-ranges=IP_ADDRESS_RANGE \ --rules=all
Sostituisci quanto segue:
RULE_NAME
: un nome per la regola firewall.IP_ADDRESS_RANGE
: uno o più intervalli di indirizzi IPv4 o IPv6. Come best practice, specifica gli intervalli di indirizzi IP necessari per consentire l'accesso. Tieni presente quanto segue:L'accesso privato alla rete per Service Directory utilizza
35.199.192.0/19
come intervallo solo interno con hop successivi interamente all'interno della rete di Google. Per saperne di più, vedi Percorsi per Cloud DNS e Service Directory.L'inclusione di
35.235.240.0/20
negli intervalli di origine consente le connessioni SSH che utilizzano l'inoltro TCP di Identity-Aware Proxy (IAP) se tutti gli altri prerequisiti sono soddisfatti. Per ulteriori informazioni, consulta Utilizzo di IAP per inoltro TCP.Se utilizzi lo strumento SSH nel browser per connetterti alla tua VM Compute Engine dalla console Google Cloud , esistono requisiti specifici.
Il valore del flag
--rules
pari aall
rende la regola firewall applicabile a tutti i protocolli e a tutte le porte di destinazione. Puoi restringere l'ambito specificando protocolli e porte.(Facoltativo) Puoi utilizzare i flag
--target-tags
e--target-service-accounts
per definire i target; in caso contrario, la regola si applica a tutti i target della rete.
Per saperne di più, consulta Utilizzare le regole firewall VPC.
Crea un'istanza VM nella rete VPC
Le istanze VM includono cluster Google Kubernetes Engine (GKE), istanze dell'ambiente flessibile di App Engine e altri prodotti Google Cloud basati su VM di Compute Engine. Per supportare l'accesso alla rete privata, una risorsa di rete VPC può essere un'istanza VM, un indirizzo IP Cloud Interconnect o un bilanciatore del carico interno di livello 4.
Le istanze Compute Engine possono eseguire immagini pubbliche per Linux e Windows Server fornite da Google, nonché immagini private personalizzate che puoi creare o importare dai tuoi sistemi esistenti. Puoi anche eseguire il deployment di container Docker.
Puoi scegliere le proprietà delle macchine delle tue istanze, come il numero di CPU virtuali e la quantità di memoria, utilizzando un insieme di tipi di macchine predefinite o creando i tuoi tipi di macchine personalizzate.
Ad esempio, il seguente comando crea un'istanza VM Linux da un'immagine pubblica con un'interfaccia di rete collegata alla rete VPC creata in precedenza.
Crea e avvia un'istanza VM:
gcloud compute instances create VM_NAME \ --image-family=debian-11 \ --image-project=debian-cloud \ --machine-type=e2-micro \ --network-interface network=projects/PROJECT_ID/global/networks/NETWORK_NAME
Sostituisci
VM_NAME
con un nome per la VM.Se ti viene chiesto di confermare la zona per l'istanza, digita
y
.Dopo aver creato l'istanza VM, prendi nota dell'indirizzo
INTERNAL_IP
restituito.Nella console Google Cloud , vai alla pagina Istanze VM.
Nella colonna Nome, fai clic sul nome dell'istanza VM appropriata.
Se la VM è in esecuzione, per arrestarla, fai clic su
Arresta.Per modificare la VM, fai clic su
Modifica.Nella sezione Networking > Firewall, per consentire il traffico HTTP o HTTPS verso la VM, seleziona Consenti traffico HTTP o Consenti traffico HTTPS.
Per questo esempio, seleziona la casella di controllo Consenti traffico HTTP.
Compute Engine aggiunge un tag di rete alla VM che associa la regola firewall alla VM. Quindi crea la regola firewall in entrata corrispondente che consente tutto il traffico in entrata su
tcp:80
(HTTP) otcp:443
(HTTPS).Per salvare le modifiche, fai clic su Salva.
Per riavviare la VM, fai clic su Avvia/Riprendi.
Per saperne di più, consulta Crea e avvia un'istanza VM.
Esegui il deployment di un'applicazione sulla VM
Per testare la configurazione di rete e verificare che il traffico venga gestito come previsto, puoi eseguire il deployment di un'app di base sulla tua VM che ascolta su una porta.
Ad esempio, i seguenti comandi creano un servizio web Node.js in ascolto sulla porta 3000.
Stabilisci una connessione SSH alla tua istanza VM.
Aggiorna i repository dei pacchetti:
sudo apt update
-
Per maggiori informazioni, consulta Configurazione di un ambiente di sviluppo Node.js.
Crea in modo interattivo un file
package.json
:npm init
Ad esempio:
{ "name": "test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "hello" }, "author": "", "license": "ISC" }
Installa Express, un framework per applicazioni web per Node.js:
npm install express
Scrivi il codice per l'app di test:
vim app.js
Il seguente esempio crea un'app che risponde alle richieste
GET
al percorso principale (/
) con il testo "Hello, world!".Prendi nota della porta su cui l'app è in ascolto. Quando configuri l'endpoint per il servizio Service Directory, devi utilizzare lo stesso numero di porta.
Verifica che l'app sia in ascolto sulla porta 3000:
node app.js
Compute Engine offre una gamma di opzioni di deployment. Per saperne di più, consulta Scegliere una strategia di deployment di Compute Engine per il tuo workload.
Configura Service Directory
Per supportare l'invocazione di un endpoint privato dall'esecuzione di un flusso di lavoro, devi configurare uno spazio dei nomi Service Directory, registrare un servizio nello spazio dei nomi e aggiungere un endpoint al servizio.
Ad esempio, i seguenti comandi creano uno spazio dei nomi, un servizio e un endpoint che specifica la rete VPC e l'indirizzo IP interno della tua istanza VM.
Creare uno spazio dei nomi:
gcloud service-directory namespaces create NAMESPACE \ --location=REGION
Sostituisci quanto segue:
NAMESPACE
: l'ID dello spazio dei nomi o l'identificatore completo dello spazio dei nomi.REGION
: la regione Google Cloud che contiene lo spazio dei nomi, ad esempious-central1
.
Crea un servizio:
gcloud service-directory services create SERVICE \ --namespace=NAMESPACE \ --location=REGION
Sostituisci
SERVICE
con il nome del servizio che stai creando.Configura un endpoint.
gcloud service-directory endpoints create ENDPOINT \ --namespace=NAMESPACE \ --service=SERVICE \ --network=projects/PROJECT_NUMBER/locations/global/networks/NETWORK_NAME \ --port=PORT_NUMBER \ --address=IP_ADDRESS \ --location=REGION
Sostituisci quanto segue:
ENDPOINT
: il nome dell'endpoint che stai creando.PORT_NUMBER
: la porta su cui è in esecuzione l'endpoint, ad esempio3000
.IP_ADDRESS
: l'indirizzo IPv6 o IPv4 dell'endpoint; si tratta dell'indirizzo IP interno che hai annotato in precedenza.
Per ulteriori informazioni, consulta Configurare Service Directory e Configurare l'accesso alla rete privata.
Crea ed esegui il deployment del workflow
La chiamata o l'invocazione di un endpoint privato da Workflows viene eseguita
tramite una richiesta HTTP. I metodi di richiesta HTTP più comuni hanno una scorciatoia di chiamata (ad esempio http.get e http.post), ma puoi effettuare qualsiasi tipo di richiesta HTTP impostando il campo call
su http.request
e specificando il tipo di richiesta utilizzando il campo method
. Per ulteriori informazioni,
vedi Inviare una richiesta HTTP.
Crea un file di codice sorgente per il workflow:
touch call-private-endpoint.JSON_OR_YAML
Sostituisci
JSON_OR_YAML
conyaml
ojson
a seconda del formato del workflow.In un editor di testo, copia il seguente flusso di lavoro (che in questo caso utilizza un protocollo HTTP per il valore
url
) nel file del codice sorgente:YAML
main: steps: - checkHttp: call: http.get args: url: http://IP_ADDRESS private_service_name: "projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE" result: res - ret: return: ${res}
JSON
{ "main": { "steps": [ { "checkHttp": { "call": "http.get", "args": { "url": "http://IP_ADDRESS", "private_service_name": "projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE" }, "result": "res" } }, { "ret": { "return": "${res}" } } ] } }
Il valore
private_service_name
deve essere una stringa che specifica un nome servizio Service Directory registrato con il seguente formato:projects/PROJECT_ID/locations/LOCATION/namespaces/NAMESPACE_NAME/services/SERVICE_NAME
Esegui il deployment del workflow. A scopo di test, puoi collegare l'account di servizio predefinito di Compute Engine al workflow per rappresentarne l'identità:
gcloud workflows deploy call-private-endpoint \ --source=call-private-endpoint.JSON_OR_YAML \ --location=REGION \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Esegui il workflow:
gcloud workflows run call-private-endpoint \ --location=REGION
Dovresti vedere un risultato simile al seguente:
argument: 'null' duration: 0.650784403s endTime: '2023-06-09T18:19:52.570690079Z' name: projects/968807934019/locations/us-central1/workflows/call-private-endpoint/executions/4aac88d3-0b54-419b-b364-b6eb973cc932 result: '{"body":"Hello, world!","code":200,"headers":{"Connection":"keep-alive","Content-Length":"21","Content-Type":"text/html; charset=utf-8","Date":"Fri, 09 Jun 2023 18:19:52 GMT","Etag":"W/\"15-NFaeBgdti+9S7zm5kAdSuGJQm6Q\"","Keep-Alive":"timeout=5","X-Powered-By":"Express"}}' startTime: '2023-06-09T18:19:51.919905676Z' state: SUCCEEDED
Passaggi successivi
- Scopri di più su Private Service Connect.
- Configura Service Directory per GKE.
- Configura un perimetro di servizio utilizzando i Controlli di servizio VPC.
- Richiama un endpoint privato on-premise, Compute Engine, GKE o altro abilitando IAP.