Auf dieser Seite werden die Funktionsweise der IP-Maskierung in GKE und die Konfigurationsoptionen für den IP-Masquerade-Agent erläutert.
Überblick
Die IP-Maskierung ist eine Form von Network Address Translation (NAT), die verwendet wird, um n:1-IP-Adressübersetzungen durchzuführen. So können mehrere Clients über eine einzige IP-Adresse auf ein Ziel zugreifen. Ein GKE-Cluster verwendet IP-Maskierung, damit Ziele außerhalb des Clusters nur Pakete von Knoten-IP-Adressen anstelle von Pod-IP-Adressen empfangen. Das ist in Umgebungen nützlich, in denen nur Pakete von Knoten-IP-Adressen empfangen werden sollen.
In den folgenden Abschnitten wird beschrieben, wie Sie die IP-Maskierung in Ihrem GKE-Cluster konfigurieren.
Vorbereitung
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Achten Sie darauf, dass die Google Kubernetes Engine API aktiviert ist. Aktivieren Sie Google Kubernetes Engine API
- Prüfen Sie, ob das Cloud SDK installiert ist.
Mit den folgenden Methoden können Sie die gcloud
-Einstellungen festlegen:
- Verwenden Sie
gcloud init
, wenn Sie die Standardeinstellungen ansehen möchten. - Verwenden Sie
gcloud config
, um Ihre Projekt-ID, Zone und Region individuell festzulegen.
gcloud init verwenden
Wenn Sie die Fehlermeldung One of [--zone, --region] must be supplied: Please specify
location
erhalten, führen Sie diesen Abschnitt aus.
-
Führen Sie
gcloud init
aus und folgen Sie der Anleitung:gcloud init
Wenn Sie SSH auf einem Remote-Server verwenden, können Sie mit dem Flag
--console-only
verhindern, dass mit dem Befehl ein Browserfenster geöffnet wird:gcloud init --console-only
- Folgen Sie der Anleitung, um
gcloud
zur Verwendung Ihres Google Cloud-Kontos zu autorisieren. - Erstellen Sie eine neue Konfiguration oder wählen Sie eine vorhandene aus.
- Wählen Sie ein Google Cloud-Projekt aus.
- Wählen Sie eine Compute Engine-Standardzone aus.
gcloud config verwenden
- Legen Sie Ihre standardmäßige Projekt-ID fest:
gcloud config set project project-id
- Wenn Sie mit zonalen Clustern arbeiten, legen Sie die Compute-Standardzone fest:
gcloud config set compute/zone compute-zone
- Wenn Sie mit regionalen Clustern arbeiten, legen Sie die Standardregion für Compute Engine fest:
gcloud config set compute/region compute-region
- Aktualisieren Sie
gcloud
auf die neueste Version:gcloud components update
Maskierung in GKE
GKE verwendet iptables
-Regeln zusammen mit dem DaemonSet ip-masq-agent
, um die Quell-IP-Adresse von Paketen zu ändern, die von Pods an bestimmte Ziele gesendet werden. Wenn ein Pod ein Paket an eine Ziel-IP-Adresse in einem angegebenen Maskierungsbereich sendet, wird die IP-Adresse des Knotens als Quelladresse des Pakets (anstelle der IP-Adresse des Pods) verwendet.
GKE führt wie in dieser Tabelle eine IP-Maskierung durch:
Clusterkonfiguration | SNAT-Verhalten |
---|---|
GKE behält die Quell-Pod-IP-Adressen für Pakete bei, die an Ziele in der GKE ändert die Quell-Pod-IP-Adressen in Quellknoten-IP-Adressen für Pakete an Ziele, die nicht in der |
|
|
GKE behält die Quell-Pod-IP-Adressen für Pakete bei, die an eine Reihe von Standardzielen ohne Maskierung gesendet werden. Diese Standardeinstellungen hängen von der GKE-Version und dem Image-Typ des Knotens ab. GKE ändert Quell-Pod-IP-Adressen in Quellknoten-IP-Adressen für Pakete, die an Ziele außerhalb der Standardziele ohne Maskierung gesendet werden. |
|
GKE behält die Quell-Pod-IP-Adressen für Pakete bei, die an alle Ziele gesendet werden. Ändern Sie dieses Verhalten, indem Sie dafür sorgen, dass |
Weitere Informationen finden Sie im Nutzerhandbuch zum IP-Masquerade-Agent in der Kubernetes-Dokumentation.
Wenn ip-masq-agent
eingeschlossen ist
Das DaemonSet ip-masq-agent
wird automatisch als Add-on mit dem Argument --nomasq-all-reserved-ranges
im GKE-Cluster installiert, wenn eine oder mehrere der folgenden Bedingungen zutreffen:
- Der Cluster hat eine Netzwerkrichtlinie.
- Der CIDR-Bereich des Pods liegt nicht innerhalb von
10.0.0.0/8
. - Der Cluster wurde ohne das Flag
--disable-default-snat
erstellt und Workload Identity ist aktiviert.
Sie können die Zielbereiche ändern. Geben Sie dazu nonMasqueradeCIDRs
in der ConfigMap ip-masq-agent
an. Wenn Ihr Cluster ip-masq-agent
nicht enthält, können Sie ip-masq-agent
manuell installieren.
Standardziele ohne Maskierung
In der folgenden Tabelle werden die GKE-Standardzielbereiche ohne Maskierung für Cluster erstellt, die ohne das Flag --disable-default-snat
erstellt wurden, sofern einer der folgenden Punkte zutrifft:
ip-masq-agent
wurde nicht bereitgestellt odernonMasqueradeCIDRs
ist nicht in der ConfigMapip-masq-agent
angegeben.
GKE-Versionen | Imagetyp des Knotens | Zielbereiche | Hinweise |
---|---|---|---|
Alle Versionen | Alle Image-Typen | 169.254.0.0/16 (Link-Local-Bereich) |
Sie können dieses Verhalten ändern. Setzen Sie dazu in der ConfigMap ip-masq-agent masqLinkLocal auf True . |
Versionen vor 1.14 |
Container-Optimized OS mit "containerd" (cos_containerd)
oder ip-masq-agent startete mit dem Argument --nomasq-all-reserved-ranges
|
10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 |
Sie können dieses Verhalten ändern. Geben Sie dazu in der ConfigMap ip-masq-agent eine Liste von CIDRs in nonMasqueradeCIDRs an.
Weitere Informationen zur Verwendung reservierter Adressbereiche außerhalb des RFC 1918-Bereichs finden Sie unter den gültigen Bereichen von VPC-Netzwerken. |
Andere Image-Typen ohne ip-masq-agent aktiviert |
10.0.0.0/8 | ||
Versionen 1.14.1-gke.14, 1.14.2-gke.1 und höher | Alle Image-Typen |
10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 100.64.0.0/10 192.0.0.0/24 192.0.2.0/24 192.88.99.0/24 198.18.0.0/15 198.51.100.0/24 203.0.113.0/24 240.0.0.0/4 |
Maskierungsregeln in iptables
prüfen
Stellen Sie eine SSH-Verbindung zu einem der Knoten her und führen Sie den folgenden Befehl aus:
iptables -t nat -L IP-MASQ
Hier ist eine Beispielausgabe von einem Cluster, auf dem das Daemonset ip-masq-agent
nicht ausgeführt wird. Die Knotenpoolversion ist älter als 1.14 und es wird ein cos_coinainerd-Image verwendet (siehe Tabelle im Bereich oben):
RETURN all -- anywhere 169.254.0.0/16 /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN all -- anywhere 10.0.0.0/8 /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN all -- anywhere 172.16.0.0/12 /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN all -- anywhere 192.168.0.0/16 /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
MASQUERADE all -- anywhere anywhere /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE match dst-type !LOCAL
ConfigMap-Parameter ip-masq-agent
Mit den folgenden Schlüsseln in der ConfigMap ip-masq-agent
können Sie Zielbereiche ohne Maskierung angeben und das Verhalten von ip-masq-agent
ändern.
Die ConfigMap-Datei muss in YAML oder JSON geschrieben und config
genannt werden.
- nonMasqueradeCIDRs: Eine Liste von Strings in CIDR-Schreibweise, die die Ziel-IP-Adressbereiche zum Beibehalten von Pod-IP-Adressen angeben.
- masqLinkLocal: Ein boolescher Wert, der angibt, ob Traffic als Link-Local-Präfix (
169.254.0.0/16
) maskiert wird. Der Standardwert istfalse
. - resyncInterval: Stellt die Zeitspanne dar, bevor
ip-masq-agent
seine Konfiguration wieder lädt (wobei in/etc/config/ip-masq-agent
aus ConfigMap geschrieben wird). Das Format istNx
, wobeiN
eine Ganzzahl undx
eine Zeiteinheit wies
oderms
ist. Wenn nicht angegeben, ist der Standardwert60
Sekunden.
nonMasqueradeCIDRs
angeben
Die folgende ConfigMap, config
, bewahrt die Quelladresse für an 10.0.0.0/8
gesendete Pakete:
nonMasqueradeCIDRs:
- 10.0.0.0/8
resyncInterval: 60s
Link-Local-Bereich ignorieren
Wenn ip-masq-agent
die IP-Maskierung für den Link-Local-Bereich aktivieren soll, setzen Sie den Wert des Schlüssels masqLinkLocal
in der ConfigMap-Datei auf true
.
Beispiel:
nonMasqueradeCIDRs:
- 10.0.0.0/8
resyncInterval: 60s
masqLinkLocal: true
ConfigMap dem Cluster hinzufügen
Führen Sie im Shell- oder Terminalfenster den folgenden Befehl aus, um dem Cluster eine ConfigMap hinzuzufügen:
kubectl create configmap configmap-name \
--from-file config \
--namespace kube-system
Dabei ist configmap-name der Name, den Sie für die ConfigMap-Ressource auswählen, z. B. ip-masq-agent
.
Beispiel:
kubectl create configmap ip-masq-agent --from-file config --namespace kube-system
Nach der Synchronisierung sollten die Änderungen unter iptables
angezeigt werden:
iptables -t nat -L IP-MASQ
Chain IP-MASQ (1 references)
target prot opt source destination
RETURN all -- anywhere 169.254.0.0/16 /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN all -- anywhere 10.0.0.0/8 /* ip-masq-agent: cluster-local */
MASQUERADE all -- anywhere anywhere /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE match dst-type !LOCAL
Eine ip-masq-agent
-Ressource manuell erstellen (optional)
Sie müssen ip-masq-agent
gegebenenfalls manuell erstellen und konfigurieren. Dazu müssen Sie die Ressource ip-masq-agent
in Ihrem Cluster bereitstellen.
Speichern Sie das folgende Manifest lokal in einer Datei mit dem Namen
ip-masq-agent.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: gcr.io/google-containers/ip-masq-agent-amd64:v2.4.1 args: - --masq-chain=IP-MASQ # To non-masquerade reserved IP ranges by default, uncomment the line below. # - --nomasq-all-reserved-ranges securityContext: privileged: true volumeMounts: - name: config mountPath: /etc/config volumes: - name: config configMap: # Note this ConfigMap must be created in the same namespace as the # daemon pods - this spec uses kube-system name: ip-masq-agent optional: true items: # The daemon looks for its config in a YAML file at /etc/config/ip-masq-agent - key: config path: ip-masq-agent tolerations: - effect: NoSchedule operator: Exists - effect: NoExecute operator: Exists - key: "CriticalAddonsOnly" operator: "Exists"
Führen Sie diesen Befehl aus:
kubectl apply -f ip-masq-agent.yaml
Dadurch sollte ein DaemonSet namens ip-masq-agent
erstellt werden, das auf allen Knoten in Ihrem Cluster ausgeführt wird.
Weitere Informationen zum Konfigurieren des Tools ip-masq-agent
finden Sie unter Agent mithilfe einer ConfigMap konfigurieren.
Beschränkungen
Für Cluster, auf denen ip-masq-agent
ausgeführt wird, gelten die folgenden Einschränkungen:
- Wenn Sie die knoteninterne Sichtbarkeit aktivieren und
ip-masq-agent
mit dem konfigurierten ParameternonMasqueradeCIDRs
verwenden, mussnonMasqueradeCIDRs
die Pod-CIDR enthalten. Andernfalls können Verbindungsprobleme zwischen den Knoten auftreten.
Nächste Schritte
- Informationen zu Alias-IP-Adressen
- GKE-Netzwerkübersicht
- Autorisierte Netzwerke für Masterzugriff erstellen