Questa pagina spiega come configurare i cluster creati in Google Kubernetes Engine (GKE)
modalità Standard per eseguire il mascheramento degli indirizzi IP
con ip-masq-agent. Per ulteriori informazioni sul mascheramento degli indirizzi IP in
GKE modalità Autopilot,
consulta Utilizzare la policy NAT in uscita per configurare il mascheramento degli indirizzi IP nei cluster Autopilot.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
- Assicurati di avere un cluster Standard esistente. Se ne hai bisogno, crea un cluster Standard.
Controllare lo stato di ip-masq-agent
Questa sezione mostra come:
- Determinare se il cluster ha un DaemonSet
ip-masq-agent. - Controllare la risorsa
ip-masq-agentConfigMap.
Controllare il DaemonSet ip-masq-agent
Per verificare se il cluster esegue il ip-masq-agent DaemonSet, utilizza la
Google Cloud CLI o la Google Cloud console.
gcloud
Recupera le credenziali per il tuo cluster:
gcloud container clusters get-credentials CLUSTER_NAMESostituisci
CLUSTER_NAMEcon il nome del cluster.Cerca
ip-masq-agentnello spazio dei nomikube-system:kubectl get daemonsets/ip-masq-agent -n kube-systemSe il DaemonSet
ip-masq-agentesiste, 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> 13dSe il DaemonSet
ip-masq-agentnon esiste, l'output è simile al seguente:Error from server (NotFound): daemonsets.apps "ip-masq-agent" not foundVerifica se il DaemonSet
ip-masq-agentesegue 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 Eseguire il deployment del DaemonSet ip-masq-agent.
Console
Vai alla pagina Carichi di lavoro nella Google Cloud console.
Per Filter, procedi come segue:
- Fai clic su per cancellare il filtroIs system object: False.
- Filtra le seguenti proprietà:
- Nome:
ip-masq-agent. - Cluster: il nome del cluster.
- Nome:
Se il DaemonSet
ip-masq-agentesiste, puoi visualizzare il record del DaemonSet nella tabella. Se il DaemonSetip-masq-agentnon esiste, non vengono visualizzate righe.
Per creare il ConfigMap ip-masq-agent ed eseguire il deployment del DaemonSet ip-masq-agent,
consulta Configurare ed eseguire il deployment di ip-masq-agent.
Controllare il ConfigMap ip-masq-agent
Per verificare se il cluster esegue il ip-masq-agent ConfigMap, utilizza
Google Cloud CLI o la Google Cloud console.
gcloud
Recupera le credenziali per il tuo cluster:
gcloud container clusters get-credentials CLUSTER_NAMESostituisci
CLUSTER_NAMEcon il nome del cluster.Descrivi il ConfigMap
ip-masq-agentnello spazio dei nomikube-system:kubectl describe configmaps/ip-masq-agent -n kube-systemSe il ConfigMap
ip-masq-agentesiste, 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 il ConfigMap
ip-masq-agentnon esiste, l'output è simile al seguente:Error from server (NotFound): configmaps "ip-masq-agent" not found
Console
Vai alla pagina Configurazione nella Google Cloud console.
Per Filter, procedi come segue:
- Fai clic su per cancellare il filtroIs system object: False.
- Filtra le seguenti proprietà:
- Nome:
ip-masq-agent. - Cluster: il nome del cluster.
- Nome:
Se il ConfigMap
ip-masq-agentesiste, puoi visualizzare il record del ConfigMap nella tabella. Se il ConfigMapip-masq-agentnon esiste, non vengono visualizzate righe.
Se il cluster ha già il ConfigMap ip-masq-agent, puoi configurarlo ed eseguirne il deployment.
Configurare ed eseguire il 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 eseguire, devi prima stabilire se il tuo
cluster ha già il ip-masq-agent ConfigMap e ip-masq-agent
DaemonSet.
Creare il ConfigMap ip-masq-agent
I seguenti passaggi mostrano come creare il ConfigMap ip-masq-agent. Se
il cluster ha già il ConfigMap ip-masq-agent, modifica un ConfigMap ip-masq-agent esistente invece.
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_TIMESostituisci quanto segue:
CIDR_1eCIDR_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'elencononMasqueradeCIDRsseguendo lo stesso formato. Come minimo, la proprietànonMasqueradeCIDRsdeve includere gli intervalli di indirizzi IP dei nodi e dei pod del cluster.SYNC_INTERVAL: la quantità di tempo dopo la quale ogniip-masq-agentpod controlla i contenuti delip-masq-agentConfigMap e scrive le modifiche nel file locale/etc/config/ip-masq-agentfile. Il valore predefinito è60.UNIT_OF_TIME: l'unità di tempo per resyncInterval. I valori validi includonos(per secondi) oms(per millisecondi). Il valore predefinito ès.
Imposta
masqLinkLocalsu false (valore predefinito) a meno che tu non debba abilitare il mascheramento per i pacchetti inviati agli indirizzi IPv4 locali del link. Per ulteriori informazioni, consulta Mascheramento verso destinazioni locali del link.Crea la risorsa ConfigMap:
kubectl create configmap ip-masq-agent \ --namespace=kube-system \ --from-file=config=LOCAL_CONFIG_FILE_PATHSostituisci
LOCAL_CONFIG_FILE_PATHcon il percorso del file di configurazione creato nel passaggio precedente.Descrivi il ConfigMap
ip-masq-agentnello spazio dei nomikube-system:kubectl describe configmaps/ip-masq-agent -n kube-systemL'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
configcon le modifiche alla configurazione. Ora puoi eseguire il deployment delip-masq-agentDaemonSet.
Modificare un ConfigMap ip-masq-agent esistente
Puoi modificare i contenuti di un ConfigMap ip-masq-agent esistente completando i seguenti passaggi:
Apri il ConfigMap in un editor di testo:
kubectl edit configmap ip-masq-agent --namespace=kube-systemModifica 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-systemSostituisci quanto segue:
CIDR_1eCIDR_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'elencononMasqueradeCIDRsseguendo lo stesso formato. Come minimo, la proprietànonMasqueradeCIDRsdeve includere gli intervalli di indirizzi IP dei nodi e dei pod del cluster.SYNC_INTERVAL: la quantità di tempo dopo la quale ogniip-masq-agentpod controlla i contenuti delip-masq-agentConfigMap e scrive le modifiche nel file locale/etc/config/ip-masq-agentfile. Il valore predefinito è60.UNIT_OF_TIME: l'unità di tempo per resyncInterval. I valori validi includonos(per secondi) oms(per millisecondi). Il valore predefinito ès.
Imposta
masqLinkLocalsu false (valore predefinito) a meno che tu non debba abilitare il mascheramento per i pacchetti inviati agli indirizzi IPv4 locali del link. Per ulteriori informazioni, consulta Mascheramento verso destinazioni locali del link.Descrivi il ConfigMap
ip-masq-agentnello spazio dei nomikube-system:kubectl describe configmaps/ip-masq-agent -n kube-systemL'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 creato.
Eseguire il 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.6-gke.15@sha256:c51e89bdc5073fdbaaff8bf42b32765f7f1eb0fec7d6189de5f14c48ac489448 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
volumeMountdel container.Il nome del ConfigMap deve corrispondere al nome di
configMapa cui viene fatto riferimento nel volumeconfig-volumenel 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 leggono dal file
ip-masq-agent. I contenuti del fileip-masq-agentsono il valore della chiaveconfignel ConfigMap.Se utilizzi gli intervalli IP riservati non mascherati per impostazione predefinita, rimuovi il commento dalla riga
- --nomasq-all-reserved-rangesnella sezionearg.
Esegui il deployment del DaemonSet:
kubectl apply -f LOCAL_FILE_PATHSostituisci
LOCAL_FILE_PATHcon il percorso del file creato nel passaggio precedente.
Puoi aggiornare manualmente il DaemonSet ip-masq-agent che hai creato. Per saperne di più, consulta
Aggiornare un DaemonSet.
Eliminare ip-masq-agent
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 degli indirizzi IP esistenti sui nodi.
Eliminare il 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
Eliminare il ConfigMap ip-masq-agent
Per eliminare completamente il ConfigMap ip-masq-agent, esegui il seguente comando:
kubectl delete configmap ip-masq-agent -n kube-system
Risoluzione dei problemi
Le seguenti sezioni forniscono suggerimenti per la risoluzione dei problemi.
Risoluzione dei problemi generali
I seguenti passaggi ti aiutano a diagnosticare i problemi relativi al mascheramento degli indirizzi IP:
- Verifica lo stato di
ip-masq-agent. Se il 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. - Verifica la versione dell'immagine
ip-masq-agentspecificata nel DaemonSet. Se la versione del DaemonSetip-masq-agentnon è la più recente, segui i passaggi di deployment per aggiornare il DaemonSet. - Verifica se la catena IP-MASQ è compilata correttamente nelle tabelle IP NAT eseguendo il comando
sudo iptables -t nat -L IP-MASQnel nodo interessato. SenonMasqueradeCIDRsdefinito nel ConfigMap non viene visualizzato nelle tabelle IP NAT, verifica che non ci siano errori di battitura nel file di configurazione utilizzato per creare il ConfigMap. - Verifica che la destinazione consenta gli intervalli di indirizzi IP dei nodi e dei 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 degli indirizzi IP, potresti notare che l'indirizzo IP di origine del pod utilizza in modo imprevisto l'indirizzo IP del nodo quando i pod comunicano con destinazioni esterne.
Il problema è causato da un elenco di traduzione degli indirizzi di rete di origine (SNAT) personalizzato mancante o incompleto. Quando utilizzi un agente di mascheramento degli indirizzi IP, viene utilizzato l'SNAT predefinito del cluster se il ConfigMap è mancante o non contiene un elenco nonMasqueradeCIDRs. Quando un pacchetto lascia un pod, l'SNAT predefinito modifica l'indirizzo IP di origine dall'indirizzo IP del pod all'indirizzo IP interno del nodo. Per saperne di più su SNAT, consulta
Agente di mascheramento degli indirizzi 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-systemEsamina l'elenco
nonMasqueradeCIDRsall'interno del ConfigMap. L'elencononMasqueradeCIDRsdeve essere presente e completo. Ad esempio:... nonMasqueradeCIDRs: - 35.100.0.0/16 ...Se l'elenco è mancante o incompleto, aggiungi o modifica l'elenco
nonMasqueradeCIDRsin modo da includere gli intervalli IP di destinazione per i quali vuoi conservare gli indirizzi IP dei pod di origine. Questo elenco deve includere anche gli indirizzi che vuoi utilizzare Cloud NAT.Se non vuoi che il traffico esterno utilizzi SNAT, imposta il campo
nonMasqueradeCIDRssu0.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 pod. Per controllare questo indirizzo, esegui un'acquisizione di pacchetti. Se non è fattibile, puoi controllare l'indirizzo IP del nodo, che deve 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 come utilizzare la policy NAT in uscita per configurare il mascheramento degli indirizzi IP nei cluster Autopilot.
- Scopri come creare un cluster nativo di VPC.
- Leggi la panoramica della rete GKE.
- Scopri come configurare le reti autorizzate.