Questa pagina spiega come configurare i cluster creati in Google Kubernetes Engine (GKE)
in modalità standard per eseguire la mascheratura IP
con il 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à,
installa e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo
gcloud components update
.
Controllo dello stato di ip-masq-agent
Questa sezione illustra come:
- Determina se il tuo cluster ha un DaemonSet
ip-masq-agent
. - Controlla la risorsa
ip-masq-agent
ConfigMap.
Controllo del DaemonSet ip-masq-agent
Per verificare se nel cluster è in esecuzione 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 il DaemonSet
ip-masq-agent
esiste, 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
Console
Vai alla pagina Carichi di lavoro nella console Google Cloud.
Per
Filtro:- Fai clic su per cancellare il filtro È oggetto di sistema: False.
- Filtra le seguenti proprietà:
- Nome:
ip-masq-agent
. - Cluster: il nome del cluster.
- Nome:
Se esiste
ip-masq-agent
DaemonSet, puoi vedere il record DaemonSet nella tabella. Se il DaemonSetip-masq-agent
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 del 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 il ConfigMap
ip-masq-agent
nello spazio dei nomikube-system
:kubectl describe configmaps/ip-masq-agent -n kube-system
Se il ConfigMap
ip-masq-agent
esiste, 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-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
Filtro:- Fai clic su per cancellare il filtro È oggetto di sistema: False.
- Filtra le seguenti proprietà:
- Nome:
ip-masq-agent
. - Cluster: il nome del cluster.
- Nome:
Se esiste ConfigMap
ip-masq-agent
, puoi vedere il record ConfigMap nella tabella. Se il ConfigMapip-masq-agent
non esiste, non vengono visualizzate righe.
Se il cluster ha già il ConfigMap ip-masq-agent
, puoi configurarlo e
implementarlo.
Configurazione e deployment di ip-masq-agent
Questa sezione spiega come creare o modificare il ConfigMap ip-masq-agent
e come eseguire il deployment o l'eliminazione del DaemonSet ip-masq-agent
. Per
determinare quali attività devi eseguire, devi prima stabilire se il tuo
cluster ha già il ConfigMap ip-masq-agent
e il ip-masq-agent
DaemonSet.
Creazione del ConfigMap ip-masq-agent
I passaggi riportati di seguito mostrano come creare il 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 un nome qualsiasi 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 dei nodi e dei pod del cluster.SYNC_INTERVAL
: il periodo di tempo dopo il quale ogniip-masq-agent
pod controlla i contenuti delip-masq-agent
ConfigMap e scrive eventuali 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 secondi) oms
(per millisecondi). Il valore predefinito ès
.
Imposta
masqLinkLocal
su false (il valore predefinito) a meno che tu non debba attivare il mascheramento per i pacchetti inviati per collegare gli indirizzi IPv4 locali. Per ulteriori informazioni, consulta Masquerading 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 creato nel passaggio precedente.Descrivi il 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
DeamonSet.
Modifica di 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-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'nonMasqueradeCIDRs
elenco seguendo lo stesso formato. Come minimo, la proprietànonMasqueradeCIDRs
deve includere gli intervalli di indirizzi IP dei nodi e dei pod del cluster.SYNC_INTERVAL
: il periodo di tempo dopo il quale ogniip-masq-agent
pod controlla i contenuti delip-masq-agent
ConfigMap e scrive eventuali 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 secondi) oms
(per millisecondi). Il valore predefinito ès
.
Imposta
masqLinkLocal
su false (il valore predefinito) a meno che tu non debba attivare il mascheramento per i pacchetti inviati per collegare gli indirizzi IPv4 locali. Per ulteriori informazioni, consulta Masquerading per destinazioni link-local.Descrivi il 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.
Esegui 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.11.0-gke.23@sha256:f50757332ee45c0fb9f5856552a3ed16548c1de3c33c4e520a02d22e30af96ae args: # 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 presenti le seguenti condizioni:
Il nome del volume può essere qualsiasi, ma deve corrispondere al nome
volumeMount
del contenitore.Il nome del ConfigMap deve corrispondere al nome del
configMap
a cui si fa riferimento nel volumeconfig-volume
nel pod.Il nome della catena (
--masq-chain
) deve essereIP-MASQ
. In caso contrario, GKE non sostituisce le regole di masquerading predefinite.I pod DaemonSet leggono dal file
ip-masq-agent
. Il contenuto del fileip-masq-agent
è il valore della chiaveconfig
nel ConfigMap.Se per impostazione predefinita utilizzi intervalli IP riservati senza mascheramento, rimuovi il commento dalla riga
- --nomasq-all-reserved-ranges
nella sezionearg
.
Esegui il deployment del 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ù, consulta
Aggiornare un DaemonSet.
Eliminazione del ip-masq-agent
Questa sezione mostra come eliminare il DaemonSet ip-masq-agent
e il ConfigMap ip-masq-agent
. L'eliminazione del ip-masq-agent
non ripristina le impostazioni esistenti di masquerading IP sui nodi.
Eliminazione del 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 del 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
I passaggi riportati di seguito forniscono informazioni per la risoluzione dei problemi:
- Verifica lo stato del
ip-masq-agent
. Se il ConfigMap non è definito, il traffico verso tutte le destinazioni predefinite non viene mascherato e viene mantenuto l'indirizzo IP del pod. Il traffico verso altre destinazioni conserva l'indirizzo IP del nodo. - 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 nel ConfigMap non viene visualizzato nelle tabelle IP NAT, verifica che non siano presenti errori ortografici nel file di configurazione utilizzato per creare il ConfigMap. - Verifica che la destinazione che il pod sta tentando di raggiungere sia inclusa in
nonMasqueradeCIDRs
nel ConfigMap. Se la destinazione non è innonMasqueradeCIDRs
, il traffico conserva l'indirizzo IP del nodo. - 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à.
Passaggi successivi
- Scopri di più sugli indirizzi IP alias.
- Leggi la panoramica della rete GKE.
- Scopri di più sulla configurazione delle reti autorizzate.