Auf dieser Seite wird erläutert, wie die IP-Maskierung in Google Kubernetes Engine (GKE) funktioniert. Außerdem werden Konfigurationsoptionen für verschiedene Szenarien angegeben.
Übersicht über die IP-Maskierung
IP-Maskierung ist eine Form von Quellnetzwerkadressübersetzung (SNAT), die n:1-IP-Adressübersetzungen durchführt. GKE kann die IP-Maskierung verwenden, um die Quell-IP-Adressen von Pods gesendeter Pakete zu ändern.
Eine allgemeine Übersicht über die IP-Maskierung in beliebigen Kubernetes-Implementierungen finden Sie im Nutzerhandbuch des IP-Masquerade-Agenten.
GKE-IP-Maskierung
Wenn IP-Maskierung für ein von einem Pod ausgegebenes Paket gilt, ändert GKE die IP-Quelladresse des Pakets von der Pod-IP-Adresse in die IP-Adresse des zugrunde liegenden Knotens. Die Maskierung der Quell-IP-Adresse eines Pakets ist hilfreich, wenn ein Empfänger so konfiguriert ist, dass er nur Pakete von den Knoten-IP-Adressen des Clusters empfängt.
Auf Linux-Knoten konfiguriert GKE iptables
-Regeln.
GKE verwendet das DaemonSet ip-masq-agent
, um die entsprechende Datenebene zu konfigurieren.
Die IP-Maskierung wird in Windows Server-Knotenpools nicht unterstützt.
IP-Maskierung für Standardcluster
In Standard-Clustern wird das Verhalten der IP-Maskierung des Clusters von drei Faktoren gesteuert:
- Unabhängig davon, ob Sie das
ip-masq-agent
-DaemonSet Cluster bereitgestellt haben oder ob GKE es automatisch bereitgestellt hat. Weitere Informationen zu den Szenarien, in denen GKE das DaemonSetip-masq-agent
automatisch bereitstellt, finden Sie unter Wann dieip-masq-agent
automatisch bereitgestellt wird. - Ob Sie eine benutzerdefinierte Liste
nonMasqueradeCIDRs
in der configMapip-masq-agent
erstellt haben. - Wenn kein
ip-masq-agent
-DaemonSet im Cluster bereitgestellt wird, ist es egal, ob Sie den Cluster mit dem Flag--disable-default-snat
erstellt haben. Weitere Informationen zu diesem Flag finden Sie unter Auswirkungen des Flags--disable-default-snat
.
In der folgenden Tabelle sind die IP-Maskierungskonfigurationen für GKE-Standardcluster zusammengefasst:
Clusterkonfiguration | Daraus resultierendes SNAT-Verhalten |
---|---|
Das |
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, die an Ziele gesendet werden, die nicht in der |
Das |
GKE behält die Quell-Pod-IP-Adressen für Pakete bei, die an eine Reihe von Standardzielen ohne Maskierung gesendet werden. GKE ändert Quell-Pod-IP-Adressen in Quellknoten-IP-Adressen für Pakete, die an Ziele außerhalb der Standardziele ohne Maskierung gesendet werden. |
Das |
GKE behält die Quell-Pod-IP-Adressen für Pakete bei, die an eine Reihe von Standardzielen ohne Maskierung gesendet werden. GKE ändert Quell-Pod-IP-Adressen in Quellknoten-IP-Adressen für Pakete, die an Ziele außerhalb der Standardziele ohne Maskierung gesendet werden. |
Das |
GKE behält die Quell-Pod-IP-Adressen für Pakete bei, die an alle Ziele gesendet werden. Unter Pod-IPv4-Adressquellen an Internetziele beibehalten finden Sie wichtige Überlegungen zum Routing, wenn Pod-IPv4-Quelladressen beibehalten werden und Pakete an das Internet weitergeleitet werden müssen. |
IP-Maskierung für Autopilot-Cluster
In Autopilot-Clustern stellt GKE immer ein ip-masq-agent
-DaemonSet bereit. Mit Ausnahme von Paketen, die von Pods an die Knoten-, Pod- oder Servicebereiche des Clusters gesendet werden, können Sie das Verhalten der IP-Maskierung mit einer EgressNATPolicy
steuern. Damit Sie eine EgressNATPolicy
verwenden können, muss der Autopilot-Cluster die beiden folgenden Anforderungen erfüllen:
- Der Cluster muss die GKE-Version 1.23.4-gke.1600 oder höher oder die Version 1.22.7-gke.1500 oder höher verwenden.
- Der Cluster muss mit aktiviertem GKE Dataplane V2 erstellt worden sein.
In der folgenden Tabelle sind die IP-Maskierungskonfigurationen für Autopilot GKE-Cluster zusammengefasst:
Autopilot-Clusterkonfiguration | Daraus resultierendes SNAT-Verhalten |
---|---|
Der Cluster enthält eine benutzerdefinierte |
GKE behält die Quell-Pod-IP-Adressen für Pakete bei, die an Ziele in GKE ändert die Quell-Pod-IP-Adressen in Quellknoten-IP-Adressen für Pakete, die an Ziele gesendet werden, die nicht in |
Der Cluster enthält keine benutzerdefinierte |
Sowohl die Standard-
|
Konfigurationsbeispiele
Maximieren Sie die folgenden Abschnitte, um Beispiele für die IP-Maskierung und -Konfiguration basierend auf dem Clustertyp anzuzeigen.
Erweiterte Konfigurationsreferenz
Wenn der ip-masq-agent
automatisch bereitgestellt wird
In Autopilot-Modus-Clustern stellt GKE immer ein ip-masq-agent
-DaemonSet bereit.
In Standardclustern stellt GKE ein ip-masq-agent
-DaemonSet bereit, wenn das Flag --disable-default-snat
nicht festgelegt ist und der Cluster eine der folgenden Konfigurationskombinationen verwendet:
Der Cluster verwendet GKE Dataplane V2 nicht und die Durchsetzung von Netzwerkrichtlinien ist aktiviert.
Der Cluster verwendet einen Pod-IP-Adressbereich, der nicht in
10.0.0.0/8
passt.
Damit das DaemonSet ip-masq-agent
wirksam ist, müssen Sie auch die Liste nonMasqueradeCIDRs
in der ConfigMap ip-masq-agent
angeben. Weitere Informationen finden Sie unter IP-Masquerade-Agent konfigurieren.
Wenn ein ip-masq-agent
-DaemonSet in einem Cluster vorhanden ist, aktualisiert GKE einen Bereitstellungs-Pod auf jedem Knoten des Clusters und gleicht ihn ab.
Standardziele ohne Maskierung
Das Standardziel ohne Maskierung ist:
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
Die Standardziele ohne Maskierung gelten für Cluster mit den folgenden Konfigurationen:
Ihr Cluster hat ein
ip-masq-agent
-DaemonSet, aber keinenonMasqueradeCIDRs
-Liste in seinerip-masq-agent
-ConfigMap angegeben. Dies gilt auch, wenn Ihr Cluster einip-masq-agent
-DaemonSet, aber keineip-masq-agent
-ConfigMap hat.Ihr Cluster hat kein
ip-masq-agent
-DaemonSet und das Flag--disable-default-snat
ist nicht festgelegt.
Die Standardziele ohne Maskierung gelten nicht für Cluster mit den folgenden Konfigurationen:
Ihr Cluster hat ein
ip-masq-agent
-DaemonSet und Sie haben eine benutzerdefiniertenonMasqueradeCIDRs
-Liste, die in derip-masq-agent
-ConfigMap angegeben ist. Eine benutzerdefiniertenonMasqueradeCIDRs
-Liste überschreibt immer die Standardziele ohne Maskierung, wenn der Cluster einip-masq-agent
-DaemonSet hat.Ihr Cluster hat kein
ip-masq-agent
-DaemonSet und das Flag--disable-default-snat
ist festgelegt. Weitere Informationen zu dieser Konfiguration finden Sie unter Auswirkungen des Flags--disable-default-snat
.
Auswirkungen des Flags --disable-default-snat
Das Flag --disable-default-snat
ändert das standardmäßige GKE-SNAT-Verhalten, sodass die Quell-Pod-IP-Adressen für Pakete beibehalten werden, die an alle Ziele gesendet werden.
GKE implementiert das Standard-SNAT-Verhalten, indem kein ip-masq-agent
-DaemonSet im Cluster bereitgestellt wird.
Das Flag --disable-default-snat
hat keine Auswirkungen, wenn ein Cluster ein ip-masq-agent
-DaemonSet enthält:
- Da Autopilot-Cluster immer ein
ip-masq-agent
-DaemonSet enthalten, hat das Flag--disable-default-snat
keine Auswirkungen auf Autopilot-Cluster.
- Für Standardcluster: Wenn Sie ein
ip-masq-agent
-DaemonSet bereitstellen oder wenn GKE automatisch einip-masq-agent
-DaemonSet bereitstellt, hat das Flag--disable-default-snat
keine Bedeutung für den Cluster, auch wenn--disable-default-snat
festgelegt ist. Wenn einip-masq-agent
-DaemonSet im Cluster vorhanden ist, werden Nicht-Masquerade-Ziele entweder explizit in einernonMasqueradeCIDRs
-Liste derip-masq-agent
-ConfigMap angegeben oder aus den standardmäßigen Nicht-Masquerade-Zielen ausgewählt, wenn keinenonMasqueradeCIDRs
-Liste definiert ist.
Sie können das Flag --disable-default-snat
festlegen, indem Sie einen Cluster aktualisieren, nachdem er erstellt wurde. Wenn für den Cluster kein ip-masq-agent
-DaemonSet bereitgestellt ist, wird die Deaktivierung des Standard-SNAT wirksam, nachdem der Cluster alle Knoten ersetzt hat – in manchen Fällen erst Stunden später. Dies liegt daran, dass GKE Ihre konfigurierten Wartungsfenster berücksichtigt, wenn Knoten im Cluster ersetzt werden. Wenn Sie kein Wartungsfenster konfiguriert haben, müssen Sie die Knoten im Cluster manuell rotieren, bevor das Flag --disable-default-snat
Auswirkungen hat.
Link-Local-Maskierung
Der Bereich 169.254.0.0/16
wird für Link-Local-IP-Adressen verwendet. Die Link-Local-Maskierung bezieht sich auf das Ändern einer Quell-Pod-IP-Adresse in eine Quellknoten-IP-Adresse für Pakete, die an die 169.254.0.0/16
-Ziele gesendet werden.
Autopilot-Cluster behalten immer Quell-Pod-IP-Adressen für Pakete bei, die an 169.254.0.0/16
-Ziele gesendet werden.
Standardmäßig behalten Standardcluster auch die Quell-Pod-IP-Adressen für Pakete bei, die an 169.254.0.0/16
-Ziele gesendet werden.
Sie können die Link-Local-IP-Maskierung in einem Standard-Cluster aktivieren. Gehen Sie dazu so vor:
- Prüfen Sie, ob der Parameter
masqLinkLocal
vorhanden und in der ConfigMapip-masq-agent
aufTrue
gesetzt ist. Wenn der ParametermasqLinkLocal
nicht in derip-masq-agent
-ConfigMap vorhanden ist, ist der StandardwertFalse
. Weitere Informationen finden Sie unterip-masq-agent
-ConfigMap prüfen,ip-masq-agent
-ConfigMap erstellen und Vorhandene ConfigMapip-masq-agent
bearbeiten. - Achten Sie darauf, dass in Ihrem Cluster das DaemonSet
ip-masq-agent
bereitgestellt ist. Weitere Informationen finden Sie unterip-masq-agent
-DaemonSet prüfen undip-masq-agent
-DaemonSet bereitstellen.
Diagnosecontainer und Pods mit hostNetwork: true
Solange Sie keine benutzerdefinierte Quell-IP-Adresse für Pakete angeben, senden Pods, die mit hostNetwork: true
und Diagnosecontainer ausgeführt werden, Pakete mit Quellen, die mit der IP-Adresse des Knotens übereinstimmen. Bei Pods, die mit hostNetwork: true
ausgeführt werden, weist GKE dem Pod die IP-Adresse des Knotens zu. GKE verwaltet keine IP-Adressen für Diagnosecontainer, einschließlich Containern zum Beheben von Knotenproblemen mit der Toolbox.
Autopilot-Cluster unterstützen die Ausführung von Pods mit spec.hostNetwork: true
nicht. Da auf die Knoten eines Autopilot-Clusters nicht über SSH zugegriffen werden kann, können Sie keine Diagnosecontainer darauf ausführen.
Pod-IPv4-Adressquellen an Internetziele beibehalten
Wenn die IP-Masquerade-Konfiguration Ihres Clusters eine der folgenden ist, behält GKE Pod-IP-Adressquellen für Pakete bei, die an alle Ziele gesendet werden, einschließlich Internetziele:
- In Standardclustern mit einem
ip-masq-agent
-DaemonSet, wenn SienonMasqueradeCIDRs
in derip-masq-agent
-ConfigMap auf0.0.0.0
festgelegt haben. - In Standardclustern ohne das DaemonSet
ip-masq-agent
, wenn Sie das Flag--disable-default-snat
festgelegt haben.
- Wenn Sie in Autopilot-Clustern die Standard-Egress-NAT-Richtlinie bearbeiten, sodass
spec.action
NoSNAT
ist undspec.destinations
Cidr: 0.0.0.0/0
enthält.
Sowohl in öffentlichen als auch in privaten Clustern sind Pod-IPv4-Quellen interne IPv4-Adressen. Das bedeutet, dass sie im Internet nicht routingfähig sind. Wenn Sie Quell-Pod-IPv4-Adressen für an das Internet gesendete Pakete beibehalten, müssen Sie daher eine Technik wie eine der folgenden verwenden, um Pakete weiterzuleiten, nachdem sie die Knoten des Clusters verlassen haben:
- Achten Sie darauf, dass Ihr VPC-Netzwerk eine Standardroute mit dem Standard-Internetgateway als nächsten Hop hat und konfigurieren Sie ein Cloud NAT-Gateway, um öffentliche NAT-Dienste für mindestens die sekundären Subnetz-IPv4-Adressbereiche bereitzustellen, die von Pods in Ihrem Cluster verwendet werden. Weitere Informationen finden Sie unter GKE-Interaktion in der Cloud NAT-Übersicht.
- Konfigurieren Sie Ihr VPC-Netzwerk für die Verwendung einer benutzerdefinierten Standardroute, deren nächster Hop eine VM-Instanz oder ein interner Passthrough-Netzwerk-Load-Balancer ist, wobei die VM oder die Back-Ends des Load-Balancers so konfiguriert wurden, dass Pakete im Namen der Pods an das Internet weitergeleitet werden.
Standard-SNAT-Verhalten wiederherstellen
Wenn Sie das Standard-SNAT-Verhalten wiederherstellen möchten, wenn sich ein ip-masq-agent
-DaemonSet in einem Cluster befindet, löschen Sie die zugehörige ip-masq-agent
-ConfigMap. Das ip-masq-agent
-DaemonSet stellt das standardmäßige IP-Masquerading-Verhalten auf den verwalteten Knoten wieder her.
Wenn Sie das Standard-SNAT-Verhalten wiederherstellen möchten, wenn kein ip-masq-agent
-DaemonSet in einem Cluster vorhanden ist, müssen Sie den Knotenpool aktualisieren. Achten Sie darauf, dass --disable-default-snat
nicht für den Cluster festgelegt ist.
Wirkungen der NAT-Richtlinie für ausgehenden Traffic in Autopilot-Clustern
Mit der GKE-NAT-Richtlinie für ausgehenden Traffic können Sie die IP-Maskierung für Autopilot-Cluster konfigurieren. Sie können die benutzerdefinierte Ressourcendefinition (CRD) der GKE-NAT-Richtlinie für ausgehenden Traffic verwenden, um die Quell-IP-Adressen der von Pods gesendeten Pakete zu ändern.
Aus Sicherheits- oder IP-Adressüberlastungsgründen können Sie IP-Adressen von Pod-zu-Knoten-IP-Adressbereichen für ausgehenden Traffic zu lokalen Netzwerken maskieren. Beispiel: Sie können einen Bereich außerhalb von RFC 1918 für Autopilot-Cluster und einen RFC-1918-Bereich für die Knoten verwenden. Wenn Pods jedoch mit lokalen Netzwerken kommunizieren müssen, die auch einen Bereich außerhalb von RFC 1918 verwenden, können sich die IP-Adressen überschneiden. Um Trafficverluste zu vermeiden, können Sie eine NAT-Richtlinie für ausgehenden Traffic konfigurieren, um lokalen Netzwerken die Pod-Bereiche außerhalb von RFC-1918 nicht anzubieten. Die NAT-Richtlinie für ausgehenden Traffic maskiert den Bereich außerhalb des RFC-1918-Bereichs der Pods, damit der RFC-1918-Bereich des Knotens verwendet wird. Achten Sie darauf, dass sich kein Knotenbereich mit einem lokalen Bereich überschneidet, da dies eine Trafficschleife verursachen kann.
GKE erzwingt das IP-Maskierungsverhalten für Autopilot-Cluster so:
- GKE stellt den NAT-Controller für ausgehenden Traffic und das
ip-masq-agent
. - Sie erstellen die NAT-Richtlinie für ausgehenden Traffic.
- Der GKE-Controller übersetzt die Richtlinie in die
ip-masq-agent
-ConfigMap. - Das DaemonSet
ip-masq-agent
liest die ConfigMap und GKE erzwingt dann das IP-Maskierungsverhalten.
Automatisch generierte Richtlinien
GKE unterstützt die folgenden zwei automatisch generierten NAT-Richtlinien für ausgehenden Traffic:
- Standard: Diese Richtlinien können bearbeitet werden.
- Von GKE verwaltet: Diese Richtlinien sind fixiert und können nicht bearbeitet werden.
Standardrichtlinie
GKE definiert eine Reihe von Standard-IP-Adressbereichen. Wenn Pakete an diese Ziele gesendet werden, maskiert Ihr Cluster keine IP-Adressquellen und behält Quell-Pod-IP-Adressen bei. Informationen zum Ändern dieser Standard-IP-Adressbereiche finden Sie unter NAT-Richtlinie für ausgehenden Traffic bearbeiten und bereitstellen.
Das folgende Manifest beschreibt eine Standard-NAT-Richtlinie für ausgehenden Traffic:
Name: default
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: EgressNATPolicy
Metadata:
Creation Timestamp: 2022-03-16T21:05:45Z
Generation: 2
Managed Fields:
API Version: networking.gke.io/v1
Fields Type: FieldsV1
fieldsV1:
f:spec:
.:
f:action:
f:status:
Manager: egress-nat-controller
Operation: Update
Time: 2022-03-16T21:05:45Z
API Version: networking.gke.io/v1
Fields Type: FieldsV1
fieldsV1:
f:spec:
f:destinations:
Manager: kubectl
Operation: Update
Time: 2022-03-17T01:58:13Z
Resource Version: 189346
UID: 06acbb5a-23ba-4c2a-bb34-9b6ed8c4a87f
Spec:
Action: NoSNAT
Destinations:
Cidr: 10.0.0.0/8
Cidr: 172.16.0.0/12
Cidr: 192.168.0.0/16
Cidr: 240.0.0.0/4
Cidr: 192.0.2.0/24
Cidr: 198.51.100.0/24
Cidr: 203.0.113.0/24
Cidr: 100.64.0.0/10
Cidr: 198.18.0.0/15
Cidr: 192.0.0.0/24
Cidr: 192.88.99.0/24
Status:
Events: <none>
Die CIDR-Bereiche sind mit den Standardzielbereichen ohne Maskierung identisch.
Von der GKE-Richtlinie verwaltet
Die NAT-Richtlinie für ausgehenden Traffic reserviert einen statischen Bereich von IP-Adressen, der für den Betrieb des Clusters erforderlich ist. Dieser statische Bereich enthält die Pod-, Dienst- und Knoten-IP-Adressbereiche des Clusters und kann sich mit der Standardrichtlinie überschneiden.
Sie können diese Richtlinie durch einen dynamischen 8-Byte-Hash (gke-{CLUSTER_SHORT_HASH}
) identifizieren, der von GKE zugewiesen wird. Sie können diese Richtlinie nicht bearbeiten.
Das folgende Manifest definiert eine von GKE verwaltete Richtlinie namens gke-bbfa6c0e-1
:
Name: gke-bbfa6c0e-1
Namespace:
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1
Kind: EgressNATPolicy
Metadata:
Creation Timestamp: 2022-03-16T21:05:46Z
Generation: 1
Managed Fields:
API Version: networking.gke.io/v1
Fields Type: FieldsV1
fieldsV1:
f:spec:
.:
f:action:
f:destinations:
f:status:
Manager: egress-nat-controller
Operation: Update
Time: 2022-03-16T21:05:46Z
Resource Version: 11699
UID: 0201b5de-a6f6-4926-822b-31ed7cdee2c6
Spec:
Action: NoSNAT
Destinations:
Cidr: 10.119.128.0/17
Cidr: 10.120.0.0/22
Cidr: 10.128.0.0/20
Status:
Events: <none>
Nächste Schritte
- Informationen zum Konfigurieren der IP-Maskierung in Autopilot-Clustern mithilfe der NAT-Richtlinie für ausgehenden Traffic
- Netzwerkübersicht
- Autorisierte Netzwerke für Masterzugriff erstellen