Panoramica
In questo lab creerai un cluster standard che utilizza indirizzi IP interni RFC 1918, aggiungerai una rete autorizzata per l'accesso API e quindi configurerai una policy di rete per la sicurezza dei pod.
Nota: per questo lab verrà utilizzata la modalità GKE Standard. Il lab esplora le policy di rete dei cluster, abilitate per impostazione predefinita in GKE Autopilot.
Obiettivi
In questo lab imparerai a:
- Creare e testare un cluster standard che utilizza indirizzi IP interni RFC 1918.
- Configurare un cluster per l'accesso autorizzato al control plane della rete.
- Configurare una policy di rete per il cluster.
Configurazione e requisiti
Per ciascun lab, riceverai un nuovo progetto Google Cloud e un insieme di risorse per un periodo di tempo limitato senza alcun costo aggiuntivo.
-
Fai clic sul pulsante Avvia lab. Se devi effettuare il pagamento per il lab, si apre una finestra popup per permetterti di selezionare il metodo di pagamento.
A sinistra, trovi il riquadro Dettagli lab con le seguenti informazioni:
- Il pulsante Apri console Google Cloud
- Tempo rimanente
- Credenziali temporanee da utilizzare per il lab
- Altre informazioni per seguire questo lab, se necessario
-
Fai clic su Apri console Google Cloud (o fai clic con il tasto destro del mouse e seleziona Apri link in finestra di navigazione in incognito se utilizzi il browser Chrome).
Il lab avvia le risorse e apre un'altra scheda con la pagina di accesso.
Suggerimento: disponi le schede in finestre separate posizionate fianco a fianco.
Nota: se visualizzi la finestra di dialogo Scegli un account, fai clic su Usa un altro account.
-
Se necessario, copia il Nome utente di seguito e incollalo nella finestra di dialogo di accesso.
{{{user_0.username | "Username"}}}
Puoi trovare il Nome utente anche nel riquadro Dettagli lab.
-
Fai clic su Avanti.
-
Copia la Password di seguito e incollala nella finestra di dialogo di benvenuto.
{{{user_0.password | "Password"}}}
Puoi trovare la Password anche nel riquadro Dettagli lab.
-
Fai clic su Avanti.
Importante: devi utilizzare le credenziali fornite dal lab. Non utilizzare le credenziali del tuo account Google Cloud.
Nota: utilizzare il tuo account Google Cloud per questo lab potrebbe comportare addebiti aggiuntivi.
-
Fai clic nelle pagine successive:
- Accetta i termini e le condizioni.
- Non inserire opzioni di recupero o l'autenticazione a due fattori, perché si tratta di un account temporaneo.
- Non registrarti per le prove gratuite.
Dopo qualche istante, la console Google Cloud si apre in questa scheda.
Nota: per visualizzare un menu con un elenco di prodotti e servizi Google Cloud, fai clic sul menu di navigazione in alto a sinistra oppure digita il nome del servizio o del prodotto nel campo di ricerca.
Una volta completati i passaggi di accesso iniziali, viene visualizzata la dashboard del progetto.
Attiva Google Cloud Shell
Google Cloud Shell è una macchina virtuale in cui sono caricati strumenti per sviluppatori. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud.
Google Cloud Shell fornisce l'accesso da riga di comando alle risorse Google Cloud.
-
Nella barra degli strumenti in alto a destra della console Cloud, fai clic sul pulsante Apri Cloud Shell.

-
Fai clic su Continua.
Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Quando la connessione è attiva, l'autenticazione è già avvenuta e il progetto è impostato sul tuo PROJECT_ID. Ad esempio:

gcloud è lo strumento a riga di comando di Google Cloud. È preinstallato su Cloud Shell e supporta il completamento.
- Puoi visualizzare il nome dell'account attivo con questo comando:
gcloud auth list
Output:
Credentialed accounts:
- @.com (active)
Output di esempio:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- Puoi elencare l'ID progetto con questo comando:
gcloud config list project
Output:
[core]
project =
Output di esempio:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Nota:
la documentazione completa di gcloud è disponibile nella guida
Panoramica dell'interfaccia a riga di comando gcloud
.
Attività 1: crea un cluster standard
In questa attività creerai un cluster standard che utilizza indirizzi IP interni RFC 1918.
Tutti i nodi worker del cluster avranno solo indirizzi IP interni RFC 1918. Questo assicura che i workload siano isolati dalla rete internet pubblica e non abbiano un indirizzo IP pubblico.
Configura un cluster standard
- Nel menu di navigazione (
), fai clic su Kubernetes Engine > Cluster.
- Fai clic su Crea e seleziona Passa al cluster Standard per il cluster.
- Assegna al cluster il nome
standard-cluster.
- Seleziona come Zona.
- Nel riquadro a sinistra, in Pool di nodi, fai clic su default-pool.
- In Numero di nodi digita 2.

- Nel riquadro a sinistra, in Cluster fai clic su Networking.
- Assicurati che Abilita reti autorizzate non sia selezionato.
- Seleziona la casella di controllo Esegui l'override della subnet predefinita degli endpoint privati del control plane.
- Per Subnet endpoint privati seleziona predefinita.

- Seleziona la casella di controllo Abilita nodi privati.
Nota: Google Cloud utilizza il peering VPC per connettere il VPC del cluster alla rete VPC predefinita.
Potresti dover scorrere verso il basso per visualizzare l'opzione.
Questa impostazione consente di definire l'intervallo di indirizzi che possono accedere al cluster dall'esterno. Quando questa casella di controllo non è selezionata, puoi accedere a kubectl solo dalla rete Google Cloud. In questo lab accederai a kubectl solo tramite la rete Google Cloud, ma modificherai l'impostazione in un secondo momento.
- Fai clic su Crea.
Nota: devi attendere alcuni minuti per il completamento del deployment del cluster.
Controlla il cluster
- In Cloud Shell, inserisci il comando seguente per esaminare i dettagli del nuovo cluster:
gcloud container clusters describe standard-cluster --zone {{{project_0.default_zone|ZONE}}}
I valori seguenti vengono visualizzati solo per il cluster:
- privateEndpoint, un indirizzo IP interno. I nodi utilizzano questo indirizzo IP interno per comunicare con il control plane del cluster.
- publicEndpoint, un indirizzo IP esterno. Gli amministratori e i servizi esterni possono utilizzare l'indirizzo IP esterno per comunicare con il control plane del cluster.
Sono disponibili diverse opzioni per bloccare il cluster in varia misura:
- L'intero cluster può avere accesso esterno.
- L'intero cluster può avere accesso interno.
- I nodi possono essere interni mentre il control plane del cluster può essere pubblico e puoi limitare le reti esterne autorizzate ad accedere al control plane del cluster.
Senza indirizzi IP pubblici, il codice in esecuzione sui nodi non può accedere alla rete internet pubblica a meno che non configuri un gateway NAT come Cloud NAT.
Puoi utilizzare un cluster con accesso interno per fornire servizi come API interne, destinate a essere accessibili solo alle risorse della tua rete. Ad esempio, le risorse potrebbero essere strumenti privati utilizzati solo dalla tua azienda. Oppure potrebbero essere servizi di backend a cui accedono i tuoi servizi di frontend, gli unici accessibili direttamente da clienti o utenti esterni. In questi casi, i cluster sono un buon modo per ridurre la superficie di attacco della tua applicazione.
Fai clic su Controlla i miei progressi per verificare l'obiettivo.
Crea un cluster standard
Attività 2: aggiungi una rete autorizzata per l'accesso al control plane del cluster
Dopo la creazione del cluster, potrebbe essere necessario inviare comandi al tuo cluster dall'esterno di Google Cloud. Ad esempio, potresti decidere che solo la tua rete aziendale possa inviare comandi al control plane del cluster. Purtroppo, non hai specificato la rete autorizzata durante la creazione del cluster.
In questa attività aggiungi una rete autorizzata per l'accesso al control plane del cluster.
Nota: in questa attività, rendi l'API del control plane Kubernetes accessibile a un intervallo specifico di indirizzi di rete. Nell'uso reale di GKE, questa connessione viene utilizzata dal personale IT e dai processi automatizzati, non dagli utenti finali.
- Nel menu di navigazione (
) della console Google Cloud, fai clic su Kubernetes Engine > Cluster.
- Fai clic su standard-cluster per aprire la pagina dei dettagli del cluster.
- Nella sezione Networking del control plane della scheda Dettagli, fai clic su Modifica (
).
- Seleziona Abilita reti autorizzate.
- Fai clic su Aggiungi una rete autorizzata.
- In Nome, digita il nome della rete, quindi utilizza
Corporate.
- In Rete, digita un intervallo CIDR a cui vuoi concedere l'accesso autorizzato al control plane del cluster. Ad esempio, puoi utilizzare
192.168.1.0/24.
- Fai clic su Fine.
- Assicurati che i seguenti parametri siano abilitati:
- Accedi mediante l'indirizzo IP esterno del control plane
- Accedi mediante l'indirizzo IP interno del control plane da qualsiasi regione
- Applica le reti autorizzate sull'endpoint interno del control plane
- Aggiungi indirizzi IP esterni di Google Cloud alle reti autorizzate
Se necessario, puoi aggiungere più reti, ma non oltre 50 intervalli CIDR.
Nota: al di fuori di questo ambiente di lab, un esempio pratico potrebbe essere autorizzare solo l'indirizzo pubblico esterno del firewall aziendale. Ad esempio, se l'indirizzo IP del firewall aziendale fosse 8.8.8.14, potresti autorizzare l'accesso all'intervallo 8.8.8.14/32.
- Fai clic su Salva modifiche in fondo al menu.
Fai clic su Controlla i miei progressi per verificare l'obiettivo.
Aggiungi una rete autorizzata per l'accesso al control plane del cluster
.
Attività 3: crea una policy di rete per il cluster
In questa attività creerai una policy di rete per il cluster per limitare le comunicazioni tra i pod. Una zona Zero Trust è importante per prevenire gli attacchi laterali all'interno del cluster quando un intruso compromette uno dei pod.
Crea un cluster GKE
- In Cloud Shell, digita questo comando per impostare la variabile di ambiente per il nome della zona e del cluster:
export my_zone={{{project_0.default_zone|ZONE}}}
export my_cluster=standard-cluster-1
- Configura il completamento della scheda kubectl in Cloud Shell:
source <(kubectl completion bash)
- In Cloud Shell, digita il comando seguente per creare un cluster Kubernetes. Tieni presente che questo comando aggiunge un ulteriore flag
--enable-network-policy ai parametri che hai utilizzato nei lab precedenti. Il flag consente a questo cluster di utilizzare le policy di rete del cluster:
gcloud container clusters create $my_cluster --num-nodes 3 --enable-ip-alias --zone $my_zone --enable-network-policy
- In Cloud Shell, configura l'accesso al tuo cluster per lo strumento a riga di comando kubectl, utilizzando questo comando:
gcloud container clusters get-credentials $my_cluster --zone $my_zone
- Esegui una semplice applicazione server web con l'etichetta
app=hello ed esponi internamente l'applicazione web nel cluster:
kubectl run hello-web --labels app=hello \
--image=gcr.io/google-samples/hello-app:1.0 --port 8080 --expose
Limita il traffico in entrata ai pod
Creiamo un file manifest NetworkPolicy di esempio denominato hello-allow-from-foo.yaml. Questo file manifest definisce una policy in entrata che consente l'accesso ai pod con etichetta app: hello dai pod con etichetta app: foo.
- Crea e apri un file denominato
hello-allow-from-foo.yaml con nano utilizzando questo comando:
nano hello-allow-from-foo.yaml
- Una volta aperto nano, incolla il seguente codice nel file
hello-allow-from-foo.yaml:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: hello-allow-from-foo
spec:
policyTypes:
- Ingress
podSelector:
matchLabels:
app: hello
ingress:
- from:
- podSelector:
matchLabels:
app: foo
-
Premi Ctrl+O e poi Invio per salvare il file modificato.
-
Premi Ctrl+X per uscire dall'editor di testo nano.
-
Crea una policy in entrata:
kubectl apply -f hello-allow-from-foo.yaml
- Verifica che la policy sia stata creata:
kubectl get networkpolicy
Output:
NAME POD-SELECTOR AGE
hello-allow-from-foo app=hello 7s
Convalida la policy in entrata
- Esegui un pod temporaneo denominato
test-1 con l'etichetta app=foo e apri una shell nel pod:
kubectl run test-1 --labels app=foo --image=alpine --restart=Never --rm --stdin --tty
Nota: è importante notare le opzioni di kubectl utilizzate qui insieme al comando run.
--stdin (in alternativa, -i) crea una sessione interattiva collegata a STDIN sul container.
--tty (in alternativa, -t) assegna un TTY per ogni container nel pod.
--rm indica a Kubernetes di considerare questo pod come un pod temporaneo che verrà rimosso non appena completata l'attività di avvio. Poiché questa è una sessione interattiva, il pod verrà rimosso alla chiusura della sessione.
--label (in alternativa, -l) aggiunge un insieme di etichette al pod.
--restart definisce la policy di riavvio per il pod.
- Invia una richiesta all'endpoint hello-web:8080 per verificare che il traffico in entrata sia consentito:
wget -qO- --timeout=2 http://hello-web:8080
Output:
If you don't see a command prompt, try pressing enter.
/ # wget -qO- --timeout=2 http://hello-web:8080
Hello, world!
Version: 1.0.0
Hostname: hello-web-8b44b849-k96lh
/ #
-
Digita exit e premi Invio per uscire dalla shell.
-
Ora eseguirai un pod diverso utilizzando lo stesso nome del pod, ma con un'etichetta app=other che non corrisponde al podSelector nella policy di rete attiva. Questo pod non dovrebbe essere in grado di accedere all'applicazione hello-web.
kubectl run test-1 --labels app=other --image=alpine --restart=Never --rm --stdin --tty
- Invia una richiesta all'endpoint hello-web:8080 per verificare che il traffico in entrata non sia consentito:
wget -qO- --timeout=2 http://hello-web:8080
La richiesta scade.
Output:
If you don't see a command prompt, try pressing enter.
/ # wget -qO- --timeout=2 http://hello-web:8080
wget: download timed out
/ #
- Digita exit e premi Invio per uscire dalla shell.
Limita il traffico in uscita dai pod
Puoi limitare il traffico in uscita in modo analogo al traffico in entrata. Tuttavia, per eseguire query sui nomi host interni (come hello-web) o esterni (come www.example.com), devi consentire la risoluzione DNS nelle policy di rete in uscita. Il traffico DNS utilizza la porta 53 e i protocolli TCP e UDP.
Creiamo un file manifest NetworkPolicy foo-allow-to-hello.yaml. Questo file definisce una policy che consente ai pod con etichetta app: foo di comunicare con i pod etichettati come app: hello su qualsiasi numero di porta e consente ai pod etichettati come app: foo di comunicare con qualsiasi computer sulla porta UDP 53, utilizzata per la risoluzione DNS. Senza la porta DNS aperta, non sarai in grado di risolvere i nomi host.
- Crea e apri un file denominato
foo-allow-to-hello.yaml con nano utilizzando questo comando:
nano foo-allow-to-hello.yaml
- Una volta aperto nano, incolla il seguente codice nel file
foo-allow-to-hello.yaml:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: foo-allow-to-hello
spec:
policyTypes:
- Egress
podSelector:
matchLabels:
app: foo
egress:
- to:
- podSelector:
matchLabels:
app: hello
- to:
ports:
- protocol: UDP
port: 53
-
Premi Ctrl+O e poi Invio per salvare il file modificato.
-
Premi Ctrl+X per uscire dall'editor di testo nano.
-
Crea una policy in uscita:
kubectl apply -f foo-allow-to-hello.yaml
- Verifica che la policy sia stata creata:
kubectl get networkpolicy
Output:
NAME POD-SELECTOR AGE
foo-allow-to-hello app=foo 7s
hello-allow-from-foo app=hello 5m
Convalida la policy in uscita
- Esegui il deployment di una nuova applicazione web chiamata hello-web-2 ed esponila internamente nel cluster:
kubectl run hello-web-2 --labels app=hello-2 \
--image=gcr.io/google-samples/hello-app:1.0 --port 8080 --expose
- Esegui un pod temporaneo con l'etichetta
app=foo e apri un prompt di shell all'interno del container:
kubectl run test-3 --labels app=foo --image=alpine --restart=Never --rm --stdin --tty
- Verifica che il pod sia in grado di stabilire connessioni a hello-web:8080:
wget -qO- --timeout=2 http://hello-web:8080
Output:
If you don't see a command prompt, try pressing enter.
/ # wget -qO- --timeout=2 http://hello-web:8080
Hello, world!
Version: 1.0.0
Hostname: hello-web
/ #
- Verifica che il pod non sia in grado di stabilire connessioni a hello-web-2:8080:
wget -qO- --timeout=2 http://hello-web-2:8080
L'operazione non riesce perché nessuna delle policy di rete che hai definito consente il traffico ai pod con etichetta app: hello-2.
- Verifica che il pod non sia in grado di stabilire connessioni a siti web esterni, come www.example.com:
wget -qO- --timeout=2 http://www.example.com
L'operazione non riesce perché le policy di rete non consentono il traffico HTTP esterno (porta TCP 80).
- Digita exit e premi Invio per uscire dalla shell.
Fai clic su Controlla i miei progressi per verificare l'obiettivo.
Esegui applicazioni server web
Termina il lab
Una volta completato il lab, fai clic su Termina lab. Google Cloud Skills Boost rimuove le risorse che hai utilizzato ed esegue la pulizia dell'account.
Avrai la possibilità di inserire una valutazione in merito alla tua esperienza. Seleziona il numero di stelle applicabile, inserisci un commento, quindi fai clic su Invia.
Il numero di stelle corrisponde alle seguenti valutazioni:
- 1 stella = molto insoddisfatto
- 2 stelle = insoddisfatto
- 3 stelle = esperienza neutra
- 4 stelle = soddisfatto
- 5 stelle = molto soddisfatto
Se non vuoi lasciare un feedback, chiudi la finestra di dialogo.
Per feedback, suggerimenti o correzioni, utilizza la scheda Assistenza.
Copyright 2020 Google LLC Tutti i diritti riservati. Google e il logo Google sono marchi di Google LLC. Tutti gli altri nomi di società e prodotti sono marchi delle rispettive società a cui sono associati.