Configurazione della visibilità tra nodi


Questa guida illustra come configurare la visibilità intranodi su una nel cluster Google Kubernetes Engine (GKE).

La visibilità tra nodi configura il networking su ciascun nodo del cluster, il traffico inviato da un pod a un altro viene elaborato Rete Virtual Private Cloud (VPC), anche se i pod si trovano sullo stesso nodo.

La visibilità tra nodi è disabilitata per impostazione predefinita sui cluster standard e è abilitato 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, assicurando che le regole firewall, le route log di flusso e le configurazioni di mirroring pacchetto si applicano ai pacchetti.

Quando un pod invia un pacchetto a un altro pod sullo stesso nodo, lascia la nodo ed è elaborato dalla rete Google Cloud. Quindi il pacchetto viene immediatamente rimandato 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 Pod, incluso il traffico tra pod sullo stesso nodo.
  • Utilizza il Mirroring pacchetto per clonare il traffico, tra cui il traffico tra i pod sullo stesso nodo e lo inoltra per l'esame.

Requisiti e limitazioni

La visibilità tra nodi presenta i seguenti requisiti e limitazioni:

  • Il cluster deve avere 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 l'elemento ip-masq-agent configurato con il parametro nonMasqueradeCIDRs, devi includere l'intervallo CIDR pod in nonMasqueradeCIDRs per evitare problemi di connettività tra nodi.

Regole firewall

Quando abiliti la visibilità tra nodi, la rete VPC elabora tutti i pacchetti inviati tra i pod, compresi quelli inviati tra i pod nodo. Ciò significa che le regole del firewall VPC e il firewall gerarchico si applicano in modo coerente alle comunicazioni tra pod, indipendentemente dal pod in ogni località.

Se configuri regole firewall personalizzate per la comunicazione all'interno del cluster, valutare attentamente le esigenze di networking del cluster per determinare l'insieme le regole di traffico in uscita e in entrata. Puoi usare i test di connettività per assicurarti traffico legittimo non è ostruito. Ad esempio, la comunicazione tra pod Obbligatorio per i criteri di rete per funzionare.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Attiva l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, install e poi inizializzare con gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo gcloud components update.

Abilita la visibilità tra nodi su un nuovo cluster

Puoi creare un cluster con visibilità tra nodi abilitata utilizzando il metodo con gcloud CLI o la console Google Cloud.

gcloud

Per creare un cluster a nodo singolo con visibilità tra nodi abilitata, usa il flag --enable-intra-node-visibility:

gcloud container clusters create CLUSTER_NAME \
    --region=COMPUTE_REGION \
    --enable-intra-node-visibility

Sostituisci quanto segue:

Console

Per creare un cluster a nodo singolo con visibilità tra nodi abilitata, segui questi passaggi:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Fai clic su Crea.

  3. Inserisci il nome del cluster.

  4. Nella finestra di dialogo Configura cluster, accanto a GKE Standard, fai clic su Configura.

  5. Configura il cluster in base alle tue esigenze.

  6. Nel riquadro di navigazione, in Cluster, fai clic su Networking.

  7. Seleziona la casella di controllo Attiva visibilità tra nodi.

  8. Fai clic su Crea.

Abilita la visibilità tra nodi su un cluster esistente

Puoi abilitare la visibilità tra nodi su un cluster esistente utilizzando il metodo con gcloud CLI o la console Google Cloud.

Quando abiliti la visibilità tra nodi per un cluster esistente, GKE riavvia i componenti sia nel piano di controllo che nei nodi worker.

gcloud

Per abilitare la visibilità tra nodi su un cluster esistente, utilizza la classe --enable-intra-node-visibility flag:

gcloud container clusters update CLUSTER_NAME \
    --enable-intra-node-visibility

Sostituisci CLUSTER_NAME con il nome del tuo cluster.

Console

Per abilitare la visibilità tra nodi su un cluster esistente, esegui questo comando: passaggi:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.

  3. In Networking, fai clic su Modifica tra nodi visibilità.

  4. Seleziona la casella di controllo Attiva visibilità tra nodi.

  5. Fai clic su Salva modifiche.

Disattiva visibilità tra nodi

Puoi disabilitare la visibilità tra nodi su un cluster utilizzando il metodo con gcloud CLI o la console Google Cloud.

Quando disabiliti la visibilità tra nodi per un cluster esistente, GKE riavvia i componenti sia nel piano di controllo che nel worker nodi.

gcloud

Per disattivare la visibilità tra nodi, utilizza --no-enable-intra-node-visibility Segnala:

gcloud container clusters update CLUSTER_NAME \
    --no-enable-intra-node-visibility

Sostituisci CLUSTER_NAME con il nome del tuo cluster.

Console

Per disattivare la visibilità tra nodi:

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.

  3. In Networking, fai clic su Modifica la visibilità tra nodi.

  4. Deseleziona la casella di controllo Attiva visibilità tra nodi.

  5. Fai clic su Salva modifiche.

Esercizio: verifica la visibilità tra nodi

Questo esercizio mostra i passaggi necessari per attivare la visibilità tra nodi e per confermare che funzioni per il cluster.

In questo esercizio devi eseguire questi passaggi:

  1. Abilita i log di flusso per la subnet predefinita nella regione us-central1.
  2. Crea un cluster a nodo singolo con visibilità tra nodi abilitata nella us-central1-a zona.
  3. Creare due pod nel cluster.
  4. Inviare una richiesta HTTP da un pod a un altro.
  5. Visualizza la voce di log di flusso per la richiesta da pod a pod.

Abilita log di flusso

  1. Abilita i log di flusso per la subnet predefinita:

    gcloud compute networks subnets update default \
        --region=us-central1 \
        --enable-flow-logs
    
  2. 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 di flusso sono abilitati, in modo simile al seguente:

    ...
    enableFlowLogs: true
    ...
    

Crea un cluster

  1. Crea un cluster a nodo singolo con visibilità tra nodi abilitata:

    gcloud container clusters create flow-log-test \
        --zone=us-central1-a \
        --num-nodes=1 \
        --enable-intra-node-visibility
    
  2. Ottieni le credenziali per il tuo cluster:

    gcloud container clusters get-credentials flow-log-test \
        --zone=us-central1-a
    

crea due pod

  1. Creare 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
    
  2. Applica il manifest al cluster:

    kubectl apply -f pod-1.yaml
    
  3. Creare 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
    
  4. Applica il manifest al cluster:

    kubectl apply -f pod-2.yaml
    
  5. 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 e pod-2.

Invia una richiesta

  1. Recupera una shell per il container in pod-1:

    kubectl exec -it pod-1 -- sh
    
  2. Nella tua shell, invia una richiesta a pod-2:

    curl -s POD_2_IP_ADDRESS:8080
    

    Sostituisci POD_2_IP_ADDRESS con l'indirizzo IP di pod-2.

    L'output mostra la risposta dal container in esecuzione in pod-2.

    Hello, world!
    Version: 2.0.0
    Hostname: pod-2
    
  3. Digita exit per uscire dalla shell e tornare all'ambiente principale a riga di comando.

Visualizza le voci di log di flusso

Per visualizzare una voce di log di flusso, utilizza il comando seguente:

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 di pod-1.
  • POD_2_IP_ADDRESS: l'indirizzo IP di pod-2.

L'output mostra una voce di log di flusso per una richiesta da pod-1 a pod-2. In questo ad 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 sul tuo account vengano addebitati costi indesiderati, segui questi passaggi per rimuovere le risorse che hai creato:

  1. Elimina il cluster:

    gcloud container clusters delete -q flow-log-test
    
  2. Disabilita i log di flusso per la subnet predefinita:

    gcloud compute networks subnets update default --no-enable-flow-logs
    

Passaggi successivi