Questa guida mostra come configurare la visibilità all'interno del nodo in un cluster Google Kubernetes Engine (GKE).
La visibilità tra nodi configura il networking su ogni nodo del cluster in modo che il traffico inviato da un pod a un altro venga elaborato dalla rete Virtual Private Cloud (VPC) del cluster, anche se i pod si trovano sullo stesso nodo.
La visibilità tra nodi è disabilitata per impostazione predefinita nei cluster standard e attivata per impostazione predefinita nei cluster Autopilot.
Architettura
La visibilità tra nodi garantisce che i pacchetti inviati tra i pod vengano sempre elaborati dalla rete VPC, il che assicura che a questi pacchetti vengano applicate regole firewall, route, log di flusso e configurazioni di mirroring dei pacchetti.
Quando un pod invia un pacchetto a un altro pod sullo stesso nodo, il pacchetto esce dal nodo e viene elaborato dalla rete Google Cloud. Il pacchetto viene quindi inviato immediatamente allo stesso nodo e inoltrato al pod di destinazione.
La visibilità tra nodi esegue il deployment del DaemonSet netd
.
Vantaggi
La visibilità tra nodi offre i seguenti vantaggi:
- Consulta i log di flusso per tutto il traffico tra i pod, incluso il traffico tra i pod sullo stesso nodo.
- Crea regole firewall che si applicano a tutto il traffico tra i pod, incluso il traffico tra i pod sullo stesso nodo.
- Utilizza il mirroring dei pacchetti per clonare il traffico, incluso quello tra i pod sullo stesso nodo, e inoltrarlo per l'esame.
Requisiti e limitazioni
La visibilità tra nodi presenta i seguenti requisiti e limitazioni:
- Il cluster deve utilizzare GKE 1.15 o versioni successive.
- La visibilità tra nodi non è supportata con i pool di nodi Windows Server.
- Se attivi la visibilità tra nodi e utilizzi
ip-masq-agent
configurato con il parametrononMasqueradeCIDRs
, devi includere l'intervallo CIDR del pod innonMasqueradeCIDRs
per evitare problemi di connettività tra nodi.
Regole firewall
Quando attivi la visibilità tra nodi, la rete VPC elabora tutti i pacchetti inviati tra i pod, inclusi i pacchetti inviati tra i pod sullo stesso nodo. Ciò significa che le regole firewall VPC e i criteri firewall gerarchici si applicano in modo coerente alla comunicazione tra pod, indipendentemente dalla posizione del pod.
Se configuri regole firewall personalizzate per la comunicazione all'interno del cluster, valuta attentamente le esigenze di rete del cluster per determinare l'insieme di regole di autorizzazione in uscita e in entrata. Puoi utilizzare i test di connettività per assicurarti che il traffico legittimo non sia ostruito. Ad esempio, la comunicazione tra pod è obbligatoria per il funzionamento dei criteri di rete.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installa e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
Attivare la visibilità tra nodi in un nuovo cluster
Puoi creare un cluster con la visibilità all'interno del nodo abilitata utilizzando la gcloud CLI o la console Google Cloud.
gcloud
Per creare un cluster a un solo nodo con la visibilità tra nodi abilitata,
utilizza il flag --enable-intra-node-visibility
:
gcloud container clusters create CLUSTER_NAME \
--region=COMPUTE_REGION \
--enable-intra-node-visibility
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del nuovo cluster.COMPUTE_REGION
: la regione di calcolo per il cluster.
Console
Per creare un cluster a un solo nodo con la visibilità all'interno del nodo abilitata, segui questi passaggi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Fai clic su add_boxCrea.
Inserisci il nome del cluster.
Nella finestra di dialogo Configura cluster, accanto a GKE Standard, fai clic su Configura.
Configura il cluster in base alle tue esigenze.
Nel riquadro di navigazione, in Cluster, fai clic su Networking.
Seleziona la casella di controllo Abilita visibilità tra nodi.
Fai clic su Crea.
Attivare la visibilità tra nodi in un cluster esistente
Puoi attivare la visibilità tra nodi in un cluster esistente utilizzando la gcloud CLI o la console Google Cloud.
Quando attivi la visibilità tra nodi per un cluster esistente, GKE riavvia i componenti sia nel piano di controllo sia nei nodi worker.
gcloud
Per abilitare la visibilità tra nodi in un cluster esistente, utilizza il flag --enable-intra-node-visibility
:
gcloud container clusters update CLUSTER_NAME \
--enable-intra-node-visibility
Sostituisci CLUSTER_NAME
con il nome del cluster.
Console
Per attivare la visibilità tra nodi in un cluster esistente, svolgi i seguenti passaggi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.
In Networking, fai clic su edit Modifica visibilità intranodo.
Seleziona la casella di controllo Abilita visibilità tra nodi.
Fai clic su Salva modifiche.
Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni dei carichi di lavoro in esecuzione. Per informazioni dettagliate su questa modifica specifica, individua la riga corrispondente nella tabella Modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi e rispettando le norme di manutenzione. Per scoprire di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni per gli aggiornamenti dei nodi.
Disattiva la visibilità tra nodi
Puoi disattivare la visibilità tra nodi in un cluster utilizzando la gcloud CLI o la console Google Cloud.
Quando disattivi la visibilità tra nodi per un cluster esistente, GKE riavvia i componenti sia nel piano di controllo sia nei nodi worker.
gcloud
Per disattivare la visibilità tra nodi, utilizza il flag --no-enable-intra-node-visibility
:
gcloud container clusters update CLUSTER_NAME \
--no-enable-intra-node-visibility
Sostituisci CLUSTER_NAME
con il nome del cluster.
Console
Per disattivare la visibilità tra nodi, segui questi passaggi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.
In Networking, fai clic su edit Modifica visibilità tra nodi.
Deseleziona la casella di controllo Abilita visibilità tra nodi.
Fai clic su Salva modifiche.
Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni dei carichi di lavoro in esecuzione. Per informazioni dettagliate su questa modifica specifica, individua la riga corrispondente nella tabella Modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi e rispettando le norme di manutenzione. Per scoprire di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni per gli aggiornamenti dei nodi.
Esercizio: verifica la visibilità tra nodi
Questo esercizio mostra i passaggi necessari per attivare la visibilità tra nodi e confermarne il funzionamento per il tuo cluster.
In questo esercizio, svolgi i seguenti passaggi:
- Attiva i log di flusso per la subnet predefinita nella regione
us-central1
. - Crea un cluster a un solo nodo con la visibilità tra nodi abilitata nella zona
us-central1-a
. - Crea due pod nel cluster.
- Invia una richiesta HTTP da un pod a un altro pod.
- Visualizza la voce di log del flusso per la richiesta da pod a pod.
Abilita log di flusso
Abilita i log di flusso per la subnet predefinita:
gcloud compute networks subnets update default \ --region=us-central1 \ --enable-flow-logs
Verifica che nella subnet predefinita siano abilitati i log di flusso:
gcloud compute networks subnets describe default \ --region=us-central1
L'output mostra che i log dei flussi sono abilitati, in modo simile al seguente:
... enableFlowLogs: true ...
Crea un cluster
Crea un cluster a un solo nodo con la visibilità tra nodi abilitata:
gcloud container clusters create flow-log-test \ --zone=us-central1-a \ --num-nodes=1 \ --enable-intra-node-visibility
Recupera le credenziali per il tuo cluster:
gcloud container clusters get-credentials flow-log-test \ --zone=us-central1-a
Crea due pod
Crea un pod.
Salva il seguente manifest in un file denominato
pod-1.yaml
:apiVersion: v1 kind: Pod metadata: name: pod-1 spec: containers: - name: container-1 image: google/cloud-sdk:slim command: - sh - -c - while true; do sleep 30; done
Applica il manifest al cluster:
kubectl apply -f pod-1.yaml
Crea un secondo pod.
Salva il seguente manifest in un file denominato
pod-2.yaml
:apiVersion: v1 kind: Pod metadata: name: pod-2 spec: containers: - name: container-2 image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
Applica il manifest al cluster:
kubectl apply -f pod-2.yaml
Visualizza i pod:
kubectl get pod pod-1 pod-2 --output wide
L'output mostra gli indirizzi IP dei pod, in modo simile al seguente:
NAME READY STATUS RESTARTS AGE IP ... pod-1 1/1 Running 0 1d 10.52.0.13 ... pod-2 1/1 Running 0 1d 10.52.0.14 ...
Prendi nota degli indirizzi IP di
pod-1
epod-2
.
Invia una richiesta
Accedi alla shell del contenitore in
pod-1
:kubectl exec -it pod-1 -- sh
Nella shell, invia una richiesta a
pod-2
:curl -s POD_2_IP_ADDRESS:8080
Sostituisci
POD_2_IP_ADDRESS
con l'indirizzo IP dipod-2
.L'output mostra la risposta del contenitore in esecuzione in
pod-2
.Hello, world! Version: 2.0.0 Hostname: pod-2
Digita exit per uscire dalla shell e tornare all'ambiente a riga di comando principale.
Visualizza le voci dei log di flusso
Per visualizzare una voce di log del flusso, utilizza il seguente comando:
gcloud logging read \
'logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" AND jsonPayload.connection.src_ip="POD_1_IP_ADDRESS" AND jsonPayload.connection.dest_ip="POD_2_IP_ADDRESS"'
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progetto.POD_1_IP_ADDRESS
: l'indirizzo IP dipod-1
.POD_2_IP_ADDRESS
: l'indirizzo IP dipod-2
.
L'output mostra una voce di log del flusso per una richiesta da pod-1
a pod-2
. In questo
esempio, pod-1
ha l'indirizzo IP 10.56.0.13
e pod-2
ha l'indirizzo IP
10.56.0.14
.
...
jsonPayload:
bytes_sent: '0'
connection:
dest_ip: 10.56.0.14
dest_port: 8080
protocol: 6
src_ip: 10.56.0.13
src_port: 35414
...
Esegui la pulizia
Per evitare che al tuo account vengano addebitati costi indesiderati, segui questi passaggi per rimuovere le risorse che hai creato:
Elimina il cluster:
gcloud container clusters delete -q flow-log-test
Disattiva i log di flusso per la subnet predefinita:
gcloud compute networks subnets update default --no-enable-flow-logs
Passaggi successivi
- Scopri come controllare la comunicazione tra i pod e i servizi del cluster creando un criterio di rete del cluster.
- Scopri i vantaggi dei cluster nativi di VPC.