Controllare la comunicazione con indirizzi IP permanenti


Questa pagina mostra come implementare indirizzi IP permanenti sui pod di Google Kubernetes Engine (GKE). Puoi assumere il controllo della rete dei pod GKE con la mappatura degli indirizzi IP permanenti personalizzati. Per scoprire di più sugli indirizzi IP permanenti, sui relativi casi d'uso e sui vantaggi, consulta Informazioni sugli indirizzi IP permanenti per i pod GKE.

Requisiti

  • GKE 1.31 o versioni successive.
  • Scegli tra la prenotazione di indirizzi IP forniti da Google (indirizzi IP forniti da Google) o l'utilizzo di indirizzi IP di tua proprietà (BYOIP).
  • Configura l'applicazione in esecuzione nei pod in modo che riconosca e utilizzi gli indirizzi IP permanenti assegnati.
  • Gli indirizzi IP permanenti per i pod GKE richiedono cluster con GKE Dataplane V2 e API Gateway abilitati.

Limitazioni

  • Configura le applicazioni in modo che utilizzino indirizzi IP permanenti assegnati. GKE non aggiunge automaticamente la configurazione dell'indirizzo IP alle interfacce di rete del pod.
  • Puoi associare ogni indirizzo IP permanente a un solo pod alla volta. Quando sono disponibili più pod, in genere GKE invia il traffico al pod più recente corrispondente. Tuttavia, GKE lo fa solo se il pod più recente è integro, il che significa che lo stato della condizione Ready è True per impostazione predefinita. Puoi configurare questo comportamento e modificarlo utilizzando l'impostazione reactionMode su GKEIPRoute.
  • GKE supporta solo gli indirizzi IPv4 come indirizzi IP permanenti.
  • GKE supporta solo più reti di livello 3 o di tipo di dispositivo.
  • Il supporto dell'alta disponibilità (HA) che utilizza indirizzi IP permanenti non è supportato per i casi d'uso non DPDK.

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.

Prezzi

Le seguenti funzionalità di Network Function Optimizer (NFO) sono supportate solo su cluster che si trovano all'interno di progetti in cui è abilitato GKE Enterprise:

Per capire le modifiche relative all'abilitazione della versione Google Kubernetes Engine (GKE) Enterprise, consulta Prezzi di GKE Enterprise.

Implementare indirizzi IP permanenti per i pod GKE

Gli indirizzi IP permanenti in GKE offrono un modo per assegnare ai pod un'identità di rete stabile, anche se i pod stessi vengono aggiornati o spostati.

Questa sezione riassume il flusso di lavoro per implementare gli indirizzi IP permanenti per i pod GKE:

  1. Crea un cluster: crea un cluster con l'API Gateway e GKE Dataplane V2.
  2. Prenota un indirizzo IP: decidi se hai bisogno di un indirizzo IP esterno (accessibile pubblicamente) o interno (solo Google Cloud) e prenotalo. Scegli la stessa regione del tuo cluster GKE.
  3. Crea un gateway: configura l'oggetto Kubernetes Gateway che contiene i tuoi indirizzi IP permanenti riservati e ti consente di creare regole (GKEIPRoutes) su quali pod del cluster possono utilizzare questi indirizzi IP permanenti.
  4. Crea o identifica i carichi di lavoro per gli indirizzi IP permanenti: se utilizzi indirizzi IP permanenti su un'altra rete, prepara i pod a utilizzarli attivando più interfacce di rete e definendo la rete in cui si trovano gli indirizzi IP permanenti.
  5. Crea l'oggetto GKEIPRoute per i carichi di lavoro selezionati: configuraGKEIPRoute per assegnare l'indirizzo IP permanente a un pod specifico. Puoi utilizzare le etichette per scegliere come target i pod giusti e, facoltativamente, configurare la reazione del routing alle modifiche dei pod.
  6. Configura la consapevolezza dell'applicazione: configura l'applicazione all'interno del pod in modo che utilizzi attivamente l'indirizzo IP permanente.
  7. Monitoraggio: tieni traccia dello stato del gateway e degli oggetti GKEIPRoute per assicurarti che tutto funzioni come previsto.

Per implementare l'indirizzo IP permanente per i pod GKE, segui questi passaggi:

Passaggio 1: crea un cluster GKE con API Gateway e GKE Dataplane V2 abilitati

Per abilitare le funzionalità avanzate di routing di rete e gestione degli indirizzi IP necessarie per implementare gli indirizzi IP permanenti sui pod GKE, devi creare un cluster GKE Dataplane V2 come segue:

gcloud container clusters create CLUSTER_NAME \
    --cluster-version=CLUSTER_VERSION \
    --enable-dataplane-v2 \
    --enable-ip-alias \
    --gateway-api=standard

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster.
  • CLUSTER_VERSION: la versione del cluster.

Passaggio 2: configura gli indirizzi IP permanenti

Per stabilire identità di rete affidabili per i pod e configurare indirizzi IP permanenti, devi prima acquisire indirizzi IP permanenti. Puoi scegliere tra prenotare gli indirizzi IP forniti da Google o utilizzare i tuoi (BYOIP).

Passaggio 2a: prenota gli indirizzi IP forniti da Google

Per prenotare indirizzi IP esterni, esegui il seguente comando:

gcloud compute addresses create ADDRESS_NAME \
   --region=REGION

Sostituisci quanto segue:

  • ADDRESS_NAME: il nome da associare a questo indirizzo.
  • REGION: la regione in cui vuoi prenotare questo indirizzo. Questa regione deve essere la stessa del pod a cui vuoi collegare l'indirizzo IP.

    Nota: devi specificare una regione quando prenoti un indirizzo IP perché le regole di inoltro, che gestiscono il routing del traffico per gli indirizzi IP permanenti, sono regionali. Affinché il routing funzioni correttamente, l'indirizzo IP e il cluster GKE devono trovarsi nella stessa regione.

Per prenotare gli indirizzi IP interni, esegui il seguente comando:

gcloud compute addresses create ADDRESS_NAME \
    --region REGION
    --subnet SUBNETWORK \
    --addresses IP_ADDRESS

Sostituisci quanto segue:

  • ADDRESS_NAME: i nomi di uno o più indirizzi che vuoi prenotare. In caso di più indirizzi, specifica tutti gli indirizzi come elenco separato da spazi. Ad esempio, example-address-1 example-address-2 example-address-3
  • REGION: la regione per questa richiesta.
  • SUBNETWORK: la subnet per questo indirizzo IPv4 interno.

Per assicurarti che il traffico venga instradato correttamente all'interno della tua rete privata, gli indirizzi IP interni devono appartenere alla subnet predefinita del cluster o alla subnet di rete aggiuntiva.

Per ulteriori informazioni sugli indirizzi IP esterni e interni o per scoprire come prenotare gli indirizzi utilizzando la console, consulta Prenotare un indirizzo IP esterno statico e Prenotare un indirizzo IP interno statico.

Passaggio 2b: utilizza i tuoi indirizzi IP (BYOIP)

Puoi utilizzare i tuoi indirizzi IP (BYOIP) anziché quelli forniti da Google. BYOIP è utile se hai bisogno di indirizzi IP specifici per le tue applicazioni o se stai spostando sistemi esistenti in Google Cloud. Per utilizzare BYOIP, Google convalida la tua proprietà dell'intervallo di indirizzi IP e, dopo che gli indirizzi IP sono stati importati in Google Cloud, puoi assegnarli come indirizzi IP permanenti per i pod GKE. Per ulteriori informazioni, consulta Utilizzare i tuoi indirizzi IP.

Passaggio 3: crea gli oggetti Gateway

Gli oggetti gateway contengono gli indirizzi IP e definiscono i pod idonei a utilizzarli. Per controllare la modalità di assegnazione degli indirizzi IP permanenti ai pod GKE, utilizzerai gli oggetti Gateway.

  1. Crea un oggetto Kubernetes Gateway della classe appropriata:
    • gke-persistent-regional-external-managed per gli indirizzi IP esterni (pubblici).
    • gke-persistent-regional-internal-managed per gli indirizzi IP interni (soloGoogle Cloud).
  2. Nella sezione Indirizzi del gateway, elenca gli indirizzi IP permanenti (forniti da Google o BYOIP) gestiti da questo gateway.
  3. Utilizza la sezione Listeners per determinare quali pod (e i relativi oggetti GKEIPRoute associati) possono potenzialmente utilizzare gli indirizzi IP del gateway. Listeners agisce come filtro in base allo spazio dei nomi di GKEIPRoute in cui esiste un oggetto GKEIPRoute.

    Puoi scegliere tra le seguenti opzioni di selezione dello spazio dei nomi Kubernetes:

    • Tutti gli spazi dei nomi: qualsiasi GKEIPRoute nel cluster.
    • Selettore: GKEIPRoute negli spazi dei nomi di GKEIPRoute corrispondenti a un'etichetta specifica.
    • Stessa rete: solo GKEIPRoutes nello stesso spazio dei nomi di GKEIPRoute del gateway.

Il seguente esempio fornisce l'accesso a livello di cluster agli indirizzi IP permanenti esterni, consentendo a qualsiasi pod di utilizzarli potenzialmente.

Salva il seguente manifest di esempio come allowed-pod-ips.yaml:

kind: Gateway
apiVersion: gateway.networking.k8s.io/v1beta1
metadata:
  namespace: default
  name: allowed-pod-ips
spec:
  gatewayClassName: gke-persistent-regional-external-managed

  listeners:
    - name: default
      port: 443
      protocol: none
      allowedRoutes:
        namespaces:
          from: All

  addresses:
    - value: "34.123.10.1/32"
      type: "gke.networking.io/cidr"
    - value: "34.123.10.2/32"
      type: "gke.networking.io/cidr"

dove:

  • addresses: elenca tutti gli indirizzi IP le cui autorizzazioni sono gestite dal gateway specifico.
  • listeners: utilizzato per identificare gli spazi dei nomi da cui gli oggetti GKEIPRoute possono fare riferimento a questo gateway.

Applica il manifest al cluster:

kubectl apply -f allowed-pod-ips.yaml

(Facoltativo) Passaggio 4: crea o identifica i carichi di lavoro con reti aggiuntive per gli indirizzi IP permanenti

Se prevedi di utilizzare i tuoi indirizzi IP permanenti con pod che richiedono la connettività a più reti, puoi configurare pod multi-rete e creare oggetti di rete che indicano le reti a cui appartiene l'indirizzo IP permanente.

Passaggio 5: crea l'oggetto GKEIPRoute per i carichi di lavoro selezionati

Per assegnare un indirizzo IP persistente a un pod selezionato, crea un oggetto GKEIPRoute.

Salva il seguente manifest di esempio come my-ip-route.yaml:

kind: GKEIPRoute
apiVersion: networking.gke.io/v1
metadata:
  namespace: default
  name: my-ip-route
spec:
  parentRefs:
  - name: allowed-pod-ips
    namespace: default
  addresses:
  - value: "34.123.10.1/32"
    type: "gke.networking.io/cidr"
  network: default
  reactionMode: ReadyCondition
  podSelector: # Only one pod is selected.
    matchLabels:
      component: proxy

dove:

  • parentRefs: indica il gateway da cui vengono utilizzati gli indirizzi IP permanenti. Questo campo è immutabile.
  • addresses: elenca tutti gli indirizzi IP permanenti instradati al pod identificato con podSelector. Questo campo è mutabile. Per IPv4, sono supportati solo gli indirizzi /32.
  • podSelector: specifica le etichette che identificano il pod a cui vengono instradati gli indirizzi IP permanenti. Questo campo è mutabile e si applica allo stesso spazio dei nomi in cui è inserito GKEIPRoute. Se selezioni più pod, vengono presi in considerazione due fattori aggiuntivi: la data di creazione del pod (GKE sceglie quello più recente) e l'impostazione del campo reactionMode.
  • reactionMode: specifica il comportamento di questa funzionalità quando viene creato o eliminato un pod specifico (selezionato da podSelector). Questo campo è facoltativo e il valore predefinito è ReadyCondition. Il campo ReadyCondition è immutabile. Puoi impostare reactionMode per controllare il comportamento della funzionalità quando i pod vengono creati, eliminati o aggiornati.
  • network: indica l'interfaccia di rete su un pod a cui vengono instradati gli indirizzi IP permanenti. Questo campo è immutabile.

Applica il manifest al cluster:

kubectl apply -f my-ip-route.yaml

Assegna indirizzi IP permanenti ai pod StatefulSet

Per assegnare un indirizzo IP permanente a un pod multirete specifico all'interno di un StatefulSet, utilizza il nome host prevedibile del pod e l'etichettatura automatica di Kubernetes, come mostrato nell'esempio seguente:

Salva il seguente manifest di esempio come my-pod-ips.yaml:

kind: GKEIPRoute
apiVersion: networking.gke.io/v1
metadata:
  namespace: proxy-ss-ns
  name: my-pod-ips
spec:
  parentRefs:
  - name: allowed-pod-ips
    namespace: default
  addresses:
  - value: "34.123.10.1/32"
    type: "gke.networking.io/cidr"
  - value: "34.123.10.2/32"
    type: "gke.networking.io/cidr"
  network: blue-network
  reactionMode: ReadyCondition
  podSelector:
    matchLabels:
      statefulset.kubernetes.io/pod-name: proxy-ss-1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  namespace: proxy-ss-ns
  name: proxy-ss
spec:
  selector:
    matchLabels:
      component: proxy
  serviceName: "proxy"
  replicas: 3
  template:
    metadata:
      annotations:
        networking.gke.io/default-interface: 'eth0'
        networking.gke.io/interfaces: '[{"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"blue-network"}]'
      labels:
        component: proxy
    spec:
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

Applica il manifest al cluster (assicurati di avere una rete denominata "blue-network"):

kubectl apply -f my-pod-ips.yaml

Assegna indirizzi IP permanenti ai pod di deployment

Per assegnare un indirizzo IP permanente al pod più recente in un deployment, applica un GKEIPRoute con la seguente configurazione:

Salva il seguente manifest di esempio come my-pod-ips.yaml:

kind: GKEIPRoute
apiVersion: networking.gke.io/v1
metadata:
  namespace: proxy-deploy-ns
  name: my-pod-ips
spec:
  parentRefs:
  - name: allowed-pod-ips
    namespace: default
  addresses:
  - value: "34.123.10.1/32"
    type: "gke.networking.io/cidr"
  - value: "34.123.10.2/32"
    type: "gke.networking.io/cidr"
  network: blue-network # point to the right network if you intend to use persistent-ip on additional networks
  reactionMode: ReadyCondition
  podSelector:
    matchLabels:
      component: proxy
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: proxy-deploy-ns
  name: proxy-deploy
spec:
  selector:
    matchLabels:
      component: proxy
  replicas: 4 # Latest Pod is used
  template:
    metadata:
      # annotations:  <- Remove these lines if the pods are not multi-nic pods
      #   networking.gke.io/default-interface: 'eth0'
      #   networking.gke.io/interfaces: '[{"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"blue-network"}]'
      labels:
        component: proxy
    spec:
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

Applica il manifest al cluster:

kubectl apply -f my-ip-route.yaml

Assicurati di avere una rete denominata "blue-network", se utilizzi altre reti.

Passaggio 6: utilizza indirizzi IP permanenti all'interno del pod

L'assegnazione di un indirizzo IP permanente a un pod GKE utilizzando GKEIPRoute non consente automaticamente di utilizzare gli indirizzi IP per l'applicazione. Gli indirizzi IP permanenti vengono gestiti a livello di routing di rete, ma la configurazione predefinita del pod non ne è a conoscenza. Devi configurare la configurazione della tua applicazione in modo che riconosca e utilizzi l'indirizzo all'interno del pod. Per farlo, il tuo pod richiederà autorizzazioni di privilegio.

Per configurare l'applicazione, valuta le seguenti opzioni:

  • net.ipv4.ip_nonlocal_bind: modifica un'impostazione di sistema per consentire all'applicazione di utilizzare indirizzi IP non assegnati direttamente alla sua interfaccia.
  • ip address add: utilizza questo comando all'interno della logica dell'applicazione per aggiungere manualmente l'indirizzo IP permanente a un'interfaccia.
  • Socket non elaborati:per un maggiore controllo, la tua applicazione potrebbe interagire direttamente con lo stack di rete (avanzato).
  • Pila di indirizzi IP nello spazio utente:in casi specializzati, un'applicazione distinta potrebbe essere eseguita all'interno del pod per gestire l'indirizzo IP (molto avanzato).

Passaggio 7: attiva ARP per gli indirizzi IP permanenti (solo rete predefinita)

Per generare richieste e risposte ARP (Address Resolution Protocol) valide e per stabilire una nuova connessione a un pod utilizzando un indirizzo IP persistente sulla rete predefinita, devi configurare la variabile ARP_ANNOUNCE.

Per impostare la variabile ARP_ANNOUNCE, esegui il seguente comando sul pod:

echo "2" > /proc/sys/net/ipv4/conf/eth0/ARP_ANNOUNCE

dove la variabile ARP_ANNOUNCE controlla la modalità di gestione degli annunci ARP. Se lo imposti su "2", viene garantito che gli annunci ARP vengano effettuati per l'indirizzo IP permanente, consentendo agli altri dispositivi della rete di conoscere la nuova associazione.

Personalizzare il comportamento dell'indirizzo IP permanente durante le modifiche del pod

Questa sezione descrive il comportamento dell'indirizzo IP permanente per il pod GKE quando il pod di destinazione viene creato o eliminato. Il controller GKE monitora i pod e la configurazione GKEIPRoute. Quando rileva che è in corso un aggiornamento, riassegna automaticamente l'indirizzo IP permanente a un pod adatto in base al reactionMode scelto.

Scopri come la funzionalità di indirizzo IP permanente gestisce automaticamente le modifiche ai pod e le opzioni di configurazione a tua disposizione:

  • Scegli tra ReadyCondition o Exists all'interno del reactionMode campo della configurazione GKEIPRoute. Tieni conto delle esigenze della tua applicazione in merito alla velocità di assegnazione dell'indirizzo IP rispetto ai requisiti di idoneità rigorosi.
  • Se utilizzi ReadyCondition per verificare l'idoneità, assicurati che i tuoi pod abbiano implementato correttamente i sondaggi di idoneità di Kubernetes. In caso contrario, l'indirizzo IP permanente potrebbe non funzionare come previsto.
  • Ti consigliamo di monitorare lo stato dei pod e il Conditions campo dell'oggetto GKEIPRoute per assicurarti che il sistema funzioni correttamente. Lo stato true della condizione Ready indica che il sistema funziona correttamente.

Risolvere i problemi di comunicazione con gli indirizzi IP permanenti per i pod

Questa sezione mostra come risolvere i problemi relativi agli indirizzi IP permanenti per i pod.

NoPodsFound se non vengono trovati pod corrispondenti

Sintomo

L'oggetto GKEIPRoute specifica un podSelector (un insieme di etichette) per identificare i pod associati all'indirizzo IP permanente. Lo stato NoPodsFound indica che non sono presenti pod negli spazi dei nomi NoPodsFound scelti come target con le etichette corrispondenti.GKEIPRoute's

Cause potenziali

  • Etichette errate: il pod con cui intendi utilizzare l'indirizzo IP permanente potrebbe avere etichette errate o nessuna etichetta.
  • Non esistono pod:se il valore è reactionMode == Exists, controlla se il pod è assegnato a un nodo controllando il campo pod.Spec.nodeName. È possibile che nello spazio dei nomi GKEIPRoute's non siano in esecuzione pod corrispondenti al selettore.
  • Pod not Ready (Pod non pronto): se reactionMode == ReadyCondition, controlla se lo stato del pod è READY. Anche se esiste un pod corrispondente, se non è in uno stato Ready, non può gestire il traffico e quindi non viene selezionato.

Risoluzione

  1. Controlla le etichette: verifica che le etichette in GKEIPRoute's podSelector corrispondano a quelle che hai applicato al pod previsto.
  2. Verifica l'esistenza del pod: assicurati che un pod con le etichette corrette esista effettivamente negli spazi dei nomi GKEIPRoute's specificati da Listeners del tuo gateway. Se reactionMode == Exists, controlla se il pod è assegnato a un nodo controllando il campo pod.Spec.nodeName
  3. Conferma l'idoneità del pod: se reactionMode == ReadyCondition, controlla se lo stato del pod è READY. Assicurati che il pod sia nello stato Ready utilizzando il seguente comando:

    kubectl get pods -n <namespace>
    

    I pod in altri stati (ad esempio "Pending", "Error") non sono selezionati.

  4. Configura i pod perché rispondano sull'indirizzo IP permanente assegnato.

Mutated quando è stato trovato un pod corrispondente e la programmazione dell'indirizzo IP permanente è in corso

Sintomo

Lo stato GKEIPRoute mostra "Mutato", a indicare che la configurazione dell'indirizzo IP permanente per un pod corrispondente è in corso.

Possibile causa:

Durante la configurazione, dovresti visualizzare lo stato "Mutato" mentre il sistema imposta il percorso dati GKE e le risorse Google Cloud per l'indirizzo IP permanente.

Risoluzione:

  1. Attendi e riprova:nella maggior parte dei casi, la procedura di configurazione si completa automaticamente in breve tempo. Controlla lo stato dopo l'attesa. Se l'operazione va a buon fine, assumerà il valore Ready.
  2. Esegui ulteriori accertamenti (se necessario): se lo stato "Modificato" persiste per un periodo prolungato, potrebbe indicare un errore di configurazione. Esamina le altre condizioni di stato nella tua GKEIPRoute:
    • Accettata: indica se la configurazione di GKEIPRoute è valida.
    • DPV2Ready: indica se il percorso dati sul nodo è programmato correttamente.
    • GCPReady: indica se le risorse Google Cloud sono configurate come previsto.

Cerca i messaggi di errore in queste condizioni per risolvere il problema.

Passaggi successivi