Questa pagina spiega come configurare i cluster creati in Google Kubernetes Engine (GKE)
Standard per eseguire il mascheramento IP
con ip-masq-agent
. Per saperne di più sull'IP masquerading in
modalità Autopilot di GKE,
consulta Utilizzare il criterio NAT in uscita per configurare l'IP masquerading nei cluster Autopilot.
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à,
installala e poi
inizializzala. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo
gcloud components update
.
Controllo dello stato di ip-masq-agent
Questa sezione mostra come:
- Determina se il cluster ha un DaemonSet
ip-masq-agent
. - Controlla la risorsa
ip-masq-agent
ConfigMap.
Controlla il DaemonSet ip-masq-agent
Per verificare se il cluster esegue il DaemonSet ip-masq-agent
, utilizza
Google Cloud CLI o la console Google Cloud .
gcloud
Recupera le credenziali per il tuo cluster:
gcloud container clusters get-credentials CLUSTER_NAME
Sostituisci
CLUSTER_NAME
con il nome del cluster.Cerca
ip-masq-agent
nello spazio dei nomikube-system
:kubectl get daemonsets/ip-masq-agent -n kube-system
Se esiste il DaemonSet
ip-masq-agent
, l'output è simile al seguente:NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE ip-masq-agent 3 3 3 3 3 <none> 13d
Se il DaemonSet
ip-masq-agent
non esiste, l'output è simile al seguente:Error from server (NotFound): daemonsets.apps "ip-masq-agent" not found
Controlla se il DaemonSet
ip-masq-agent
esegue l'ultima versione:kubectl get daemonsets/ip-masq-agent -n kube-system -o jsonpath='{.spec.template.spec.containers[].image}'
Questo comando deve restituire la stessa immagine container specificata in Deployment del DaemonSet ip-masq-agent.
Console
Vai alla pagina Workload nella console Google Cloud .
Per il filtro
, procedi nel seguente modo:- Fai clic su per cancellare il filtro Is system object: False.
- Filtra le seguenti proprietà:
- Nome:
ip-masq-agent
. - Cluster: il nome del cluster.
- Nome:
Se esiste un DaemonSet
ip-masq-agent
, puoi visualizzare il record DaemonSet nella tabella. Seip-masq-agent
DaemonSet non esiste, non vengono visualizzate righe.
Per creare il ConfigMap ip-masq-agent
ed eseguire il deployment del DaemonSet ip-masq-agent
,
consulta Configurazione ed esecuzione del deployment di ip-masq-agent
.
Controllo di ConfigMap ip-masq-agent
Per verificare se il cluster esegue il ConfigMap ip-masq-agent
, utilizza
Google Cloud CLI o la console Google Cloud .
gcloud
Recupera le credenziali per il tuo cluster:
gcloud container clusters get-credentials CLUSTER_NAME
Sostituisci
CLUSTER_NAME
con il nome del cluster.Descrivi ConfigMap
ip-masq-agent
nello spazio dei nomikube-system
:kubectl describe configmaps/ip-masq-agent -n kube-system
Se esiste ConfigMap
ip-masq-agent
, l'output è simile al seguente:Name: ip-masq-agent Namespace: kube-system Labels: <none> Annotations: <none> Data ==== config: ---- nonMasqueradeCIDRs: - 198.15.5.92/24 - 10.0.0.0/8 masqLinkLocal: false resyncInterval: 60s BinaryData ==== Events: <none>
Se l'oggetto ConfigMap
ip-masq-agent
non esiste, l'output è simile al seguente:Error from server (NotFound): configmaps "ip-masq-agent" not found
Console
Vai alla pagina Configurazione nella console Google Cloud .
Per il filtro
, procedi nel seguente modo:- Fai clic su per cancellare il filtro Is system object: False.
- Filtra le seguenti proprietà:
- Nome:
ip-masq-agent
. - Cluster: il nome del cluster.
- Nome:
Se esiste ConfigMap
ip-masq-agent
, puoi visualizzare il record ConfigMap nella tabella. Seip-masq-agent
ConfigMap non esiste, non vengono visualizzate righe.
Se il cluster ha già il ConfigMap ip-masq-agent
, puoi configurarlo e
deployarlo.
Configurazione e deployment di ip-masq-agent
Questa sezione mostra come creare o modificare il ConfigMap ip-masq-agent
e come eseguire il deployment o eliminare il DaemonSet ip-masq-agent
. Per
determinare le attività da svolgere, devi prima stabilire se il tuo
cluster dispone già di ConfigMap ip-masq-agent
e DaemonSet ip-masq-agent
.
Creazione di ConfigMap ip-masq-agent
I seguenti passaggi mostrano come creare ConfigMap ip-masq-agent
. Se
il tuo cluster ha già il ConfigMap ip-masq-agent
, modifica un ConfigMap
ip-masq-agent esistente.
Crea un file di configurazione utilizzando il seguente modello e salvalo localmente. Puoi utilizzare qualsiasi nome per la copia locale di questo file di configurazione.
nonMasqueradeCIDRs: - CIDR_1 - CIDR_2 masqLinkLocal: false resyncInterval: SYNC_INTERVALUNIT_OF_TIME
Sostituisci quanto segue:
CIDR_1
eCIDR_2
: gli intervalli di indirizzi IP in formato CIDR. Quando i pacchetti vengono inviati a queste destinazioni, il cluster non maschera le origini degli indirizzi IP e conserva gli indirizzi IP dei pod di origine. Se hai bisogno di più di due CIDR, aggiungi altre voci all'elencononMasqueradeCIDRs
seguendo lo stesso formato. Come minimo, la proprietànonMasqueradeCIDRs
deve includere gli intervalli di indirizzi IP di nodi e pod del cluster.SYNC_INTERVAL
: il periodo di tempo dopo il quale ogni podip-masq-agent
controlla i contenuti del ConfigMap e scrive le modifiche nel file/etc/config/ip-masq-agent
locale.ip-masq-agent
Il valore predefinito è60
.UNIT_OF_TIME
: l'unità di tempo per resyncInterval. I valori validi includonos
(per i secondi) oms
(per i millisecondi). Il valore predefinito ès
.
Imposta
masqLinkLocal
su false (valore predefinito) a meno che tu non debba attivare il mascheramento per i pacchetti inviati agli indirizzi IPv4 link-local. Per ulteriori informazioni, vedi Mascheramento per destinazioni link-local.Crea la risorsa ConfigMap:
kubectl create configmap ip-masq-agent \ --namespace=kube-system \ --from-file=config=LOCAL_CONFIG_FILE_PATH
Sostituisci
LOCAL_CONFIG_FILE_PATH
con il percorso del file di configurazione che hai creato nel passaggio precedente.Descrivi ConfigMap
ip-masq-agent
nello spazio dei nomikube-system
:kubectl describe configmaps/ip-masq-agent -n kube-system
L'output è simile al seguente:
Name: ip-masq-agent Namespace: kube-system Labels: <none> Annotations: <none> Data ==== config: ---- nonMasqueradeCIDRs: - 198.15.5.92/24 - 10.0.0.0/8 masqLinkLocal: false resyncInterval: 60s BinaryData ==== Events: <none>
Questo output include il parametro
config
con le modifiche alla configurazione. Ora puoi eseguire il deployment delip-masq-agent
DaemonSet.
Modifica di un ConfigMap ip-masq-agent
esistente
Puoi modificare i contenuti di un ConfigMap ip-masq-agent
esistente
completando i seguenti passaggi:
Apri ConfigMap in un editor di testo:
kubectl edit configmap ip-masq-agent --namespace=kube-system
Modifica i contenuti del file ConfigMap:
apiVersion: v1 data: config: | nonMasqueradeCIDRs: - CIDR_1 - CIDR_2 masqLinkLocal: false resyncInterval: SYNC_INTERVALUNIT_OF_TIME kind: ConfigMap metadata: name: ip-masq-agent namespace: kube-system
Sostituisci quanto segue:
CIDR_1
eCIDR_2
: gli intervalli di indirizzi IP in formato CIDR. Quando i pacchetti vengono inviati a queste destinazioni, il cluster non maschera le origini degli indirizzi IP e conserva gli indirizzi IP dei pod di origine. Se hai bisogno di più di due CIDR, aggiungi altre voci all'elencononMasqueradeCIDRs
seguendo lo stesso formato. Come minimo, la proprietànonMasqueradeCIDRs
deve includere gli intervalli di indirizzi IP di nodi e pod del cluster.SYNC_INTERVAL
: il periodo di tempo dopo il quale ogni podip-masq-agent
controlla i contenuti del ConfigMapip-masq-agent
e scrive le modifiche nel file/etc/config/ip-masq-agent
locale. Il valore predefinito è60
.UNIT_OF_TIME
: l'unità di tempo per resyncInterval. I valori validi includonos
(per i secondi) oms
(per i millisecondi). Il valore predefinito ès
.
Imposta
masqLinkLocal
su false (valore predefinito) a meno che tu non debba attivare il mascheramento per i pacchetti inviati agli indirizzi IPv4 link-local. Per ulteriori informazioni, vedi Mascheramento per destinazioni link-local.Descrivi ConfigMap
ip-masq-agent
nello spazio dei nomikube-system
:kubectl describe configmaps/ip-masq-agent -n kube-system
L'output è simile al seguente:
Name: ip-masq-agent Namespace: kube-system Labels: <none> Annotations: <none> Data ==== config: ---- nonMasqueradeCIDRs: - 198.15.5.92/24 - 10.0.0.0/8 masqLinkLocal: false resyncInterval: 60s BinaryData ==== Events: <none>
Questo output include il parametro
config
che corrisponde al valore di configurazione del file che hai creato.
Deployment del DaemonSet ip-masq-agent
Dopo aver creato o modificato il ConfigMap ip-masq-agent
, esegui il deployment del DaemonSet ip-masq-agent
.
Salva il seguente manifest come file YAML:
apiVersion: apps/v1 kind: DaemonSet metadata: name: ip-masq-agent namespace: kube-system spec: selector: matchLabels: k8s-app: ip-masq-agent template: metadata: labels: k8s-app: ip-masq-agent spec: hostNetwork: true containers: - name: ip-masq-agent image: gke.gcr.io/ip-masq-agent:v2.12.3-gke.4@sha256:b5db41ddaf863b660da330322714f668101482b528829c50c53229d901d11af5 args: - --v=2 - --logtostderr=false - --log_file=/dev/stdout - --log_file_max_size=0 # The masq-chain must be IP-MASQ - --masq-chain=IP-MASQ # To non-masquerade reserved IP ranges by default, # uncomment the following line. # - --nomasq-all-reserved-ranges # Must be set to false when using Dataplane V2. - --random-fully=false securityContext: privileged: false capabilities: drop: ["ALL"] add: ["NET_ADMIN", "NET_RAW"] allowPrivilegeEscalation: false seccompProfile: type: RuntimeDefault volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: ip-masq-agent optional: true items: - key: config path: ip-masq-agent tolerations: - effect: NoSchedule operator: Exists - effect: NoExecute operator: Exists - key: "CriticalAddonsOnly" operator: "Exists"
Questo manifest crea un volume denominato
config-volume
che viene montato come specificato da volumeMount del container.Se devi modificare questo manifest, tieni presente le seguenti condizioni:
Il nome del volume può essere qualsiasi, ma deve corrispondere al nome
volumeMount
del container.Il nome di ConfigMap deve corrispondere al nome di
configMap
a cui viene fatto riferimento nel volumeconfig-volume
del pod.Il nome della catena (
--masq-chain
) deve essereIP-MASQ
. In caso contrario, GKE non esegue l'override delle regole di mascheramento predefinite.I pod DaemonSet vengono letti dal file
ip-masq-agent
. Il contenuto del fileip-masq-agent
è il valore della chiaveconfig
in ConfigMap.Se utilizzi intervalli IP riservati non di mascheramento per impostazione predefinita, rimuovi il commento dalla riga
- --nomasq-all-reserved-ranges
nella sezionearg
.
Esegui il deployment di DaemonSet:
kubectl apply -f LOCAL_FILE_PATH
Sostituisci
LOCAL_FILE_PATH
con il percorso del file che hai creato nel passaggio precedente.
Puoi aggiornare manualmente il DaemonSet ip-masq-agent
che hai creato. Per saperne di più, vedi
Aggiornamento di un DaemonSet.
Eliminazione di ip-masq-agent
in corso…
Questa sezione mostra come eliminare il DaemonSet ip-masq-agent
e il
ConfigMap ip-masq-agent
. L'eliminazione di ip-masq-agent
non ripristina le impostazioni di mascheramento IP esistenti sui nodi.
Eliminazione di DaemonSet ip-masq-agent
Se hai creato manualmente il DaemonSet ip-masq-agent
, puoi eliminarlo eseguendo il seguente comando:
kubectl delete daemonsets ip-masq-agent -n kube-system
Eliminazione di ConfigMap ip-masq-agent
Per eliminare completamente l'oggetto ConfigMap ip-masq-agent
, esegui questo comando:
kubectl delete configmap ip-masq-agent -n kube-system
Risoluzione dei problemi
Le sezioni seguenti forniscono consigli per la risoluzione dei problemi.
Risoluzione dei problemi generali
I seguenti passaggi ti aiutano a diagnosticare i problemi relativi al mascheramento dell'indirizzo IP:
- Conferma lo stato di
ip-masq-agent
. Se ConfigMap non è definito, il traffico verso tutte le destinazioni predefinite non viene mascherato e conserva l'indirizzo IP del pod. Il traffico verso altre destinazioni conserva l'indirizzo IP del nodo. - Conferma la versione dell'immagine
ip-masq-agent
specificata nel DaemonSet. Se la versione di DaemonSetip-masq-agent
non è la più recente, segui i passaggi di deployment per aggiornare DaemonSet. - Controlla se la catena IP-MASQ è compilata correttamente nelle tabelle IP NAT eseguendo il comando
sudo iptables -t nat -L IP-MASQ
nel nodo interessato. SenonMasqueradeCIDRs
definito in ConfigMap non viene visualizzato nelle tabelle IP NAT, verifica che non siano presenti errori di battitura nel file di configurazione utilizzato per creare ConfigMap. - Verifica che la destinazione consenta sia gli intervalli di indirizzi IP del nodo sia quelli del pod.
- Se il traffico non è accessibile dal nodo o dal pod, esegui un test di connettività.
Problema: l'indirizzo IP del pod cambia in indirizzo IP del nodo
Quando utilizzi un agente di mascheramento IP, potresti notare che l'indirizzo IP di origine del pod utilizza inaspettatamente l'indirizzo IP del nodo quando i pod comunicano con destinazioni esterne.
Il problema è causato da un elenco di traduzione dell'indirizzo di rete di origine (SNAT) personalizzato mancante o incompleto. Quando utilizzi un agente IP masquerade, la SNAT predefinita
del cluster viene utilizzata quando ConfigMap non è presente o non contiene un elenco di
nonMasqueradeCIDRs
. Quando un pacchetto esce da un pod, la SNAT predefinita modifica l'indirizzo IP di origine dall'indirizzo IP del pod all'indirizzo IP interno del nodo. Per saperne di più sulla SNAT, consulta la sezione
Agente di mascheramento IP.
Per risolvere il problema, configura un elenco SNAT personalizzato definendo un elenco
nonMasqueradeCIDRs
nel ConfigMap ip-masq-agent
:
Apri il ConfigMap
ip-masq-agent
:kubectl edit configmap ip-masq-agent --namespace=kube-system
Esamina l'elenco
nonMasqueradeCIDRs
all'interno di ConfigMap. L'elencononMasqueradeCIDRs
deve essere presente e completo. Ad esempio:... nonMasqueradeCIDRs: - 35.100.0.0/16 ...
Se l'elenco è mancante o incompleto, aggiungi o modifica l'elenco
nonMasqueradeCIDRs
in modo da includere gli intervalli di indirizzi IP di destinazione per i quali vuoi conservare gli indirizzi IP dei pod di origine. Questo elenco deve includere anche gli indirizzi per i quali vuoi utilizzare Cloud NAT.Se non vuoi che il traffico esterno utilizzi SNAT, imposta il campo
nonMasqueradeCIDRs
su0.0.0.0/0
. Ad esempio:... nonMasqueradeCIDRs: - 0.0.0.0/0 ...
Quando il traffico non utilizza SNAT, tutti i pacchetti inviati dai pod conservano l'indirizzo IP del pod come indirizzo IP di origine, indipendentemente dalla destinazione.
Controlla l'indirizzo IP di origine dei pacchetti in uscita dai tuoi pod. Per controllare questo indirizzo, acquisisci un pacchetto. Se non è fattibile, puoi controllare l'indirizzo IP del nodo, che dovrebbe essere l'indirizzo IP di origine dei pacchetti in uscita soggetti a SNAT, con il seguente comando:
kubectl get nodes -o wide
Passaggi successivi
- Scopri di più sugli IP alias.
- Leggi la panoramica della rete GKE.
- Scopri di più sulla configurazione delle reti autorizzate.