Vous trouverez sur cette page des informations sur le fonctionnement du masquage d'adresses IP dans Google Kubernetes Engine (GKE) et sur les options de configuration pour différents scénarios.
Présentation du masquage d'adresses IP
Le masquage d'adresses IP est une forme de traduction d'adresses réseau source (SNAT, Source Network Address Translation) qui permet de traduire plusieurs adresses IP en une seule. GKE peut utiliser le masquage d'adresses IP pour modifier les adresses IP sources des paquets envoyés depuis les pods.
Pour obtenir une présentation plus générale du masquage d'adresses IP dans toute mise en œuvre de Kubernetes, consultez le guide de l'utilisateur de l'agent de masquage d'adresses IP.
Masquage d'adresses IP GKE
Lorsque le masquage d'adresses IP s'applique à un paquet émis par un pod, GKE modifie l'adresse IP source du paquet en remplaçant l'adresse IP du pod par l'adresse IP du nœud sous-jacent. Le masquage de l'adresse IP source d'un paquet est utile lorsqu'un destinataire est configuré pour recevoir des paquets provenant uniquement des adresses IP des nœuds du cluster.
Sur les nœuds Linux, GKE configure les règles iptables
.
GKE utilise le DaemonSet ip-masq-agent
pour configurer le plan de données approprié.
Le masquage d'adresses IP n'est pas compatible avec les pools de nœuds Windows Server.
Masquage d'adresses IP pour les clusters Standard
Dans les clusters Standard, le comportement du masquage d'adresses IP du cluster est régi par trois facteurs :
- Selon que vous avez déployé le DaemonSet
ip-masq-agent
ou qu'il a été déployé automatiquement dans le cluster par GKE. Pour en savoir plus sur les scénarios dans lesquels GKE déploie automatiquement le DaemonSetip-masq-agent
, consultez la section Quandip-masq-agent
est déployé automatiquement. - Selon si vous avez créé une liste
nonMasqueradeCIDRs
personnalisée dans le ConfigMapip-masq-agent
. - Dans les cas où aucun DaemonSet
ip-masq-agent
n'est déployé dans le cluster, selon si vous avez créé le cluster avec l'option--disable-default-snat
. Pour en savoir plus sur cette option, consultez la section Effet de l'option--disable-default-snat
.
Le tableau suivant récapitule les configurations de masquage d'adresses IP pour les clusters GKE Standard :
Configuration du cluster | Comportement SNAT résultant |
---|---|
Le DaemonSet |
GKE conserve les adresses IP des pods sources pour les paquets envoyés aux destinations spécifiées dans la liste GKE remplace les adresses IP des pods sources par les adresses IP des nœuds sources pour les paquets envoyés aux destinations non spécifiées dans la liste |
Le DaemonSet |
GKE conserve les adresses IP des pods sources pour les paquets envoyés à un ensemble de destinations non masquées par défaut. GKE remplace les adresses IP des pods sources par les adresses IP des nœuds sources pour les paquets envoyés vers des destinations en dehors des destinations non masquées par défaut. |
Le DaemonSet |
GKE conserve les adresses IP des pods sources pour les paquets envoyés à un ensemble de destinations non masquées par défaut. GKE remplace les adresses IP des pods sources par les adresses IP des nœuds sources pour les paquets envoyés vers des destinations en dehors des destinations non masquées par défaut. |
Le DaemonSet |
GKE conserve les adresses IP des pods sources pour les paquets envoyés à toutes les destinations. Consultez la section Conserver les sources d'adresses IPv4 des pods vers les destinations Internet pour connaître les points importants à prendre en compte concernant le routage lorsque vous conservez les adresses sources IPv4 des pods et que vous devez acheminer des paquets vers Internet. |
Masquage d'adresses IP pour les clusters Autopilot
Dans les clusters Autopilot, GKE déploie toujours un DaemonSet ip-masq-agent
. À l'exception des paquets envoyés par des pods vers les plages de nœuds, de pods ou de services du cluster, vous pouvez contrôler le comportement de masquage d'adresses IP à l'aide d'une règle EgressNATPolicy
. Pour utiliser une règle EgressNATPolicy
, votre cluster Autopilot doit répondre aux deux exigences suivantes :
- Le cluster doit utiliser GKE version 1.23.4-gke.1600 ou ultérieure, ou version 1.22.7-gke.1500 ou ultérieure.
- Le cluster doit avoir été créé avec GKE Dataplane V2 activé.
Le tableau suivant récapitule les configurations de masquage d'adresses IP pour les clusters GKE Autopilot :
Configuration du cluster Autopilot | Comportement SNAT résultant |
---|---|
Le cluster inclut une règle |
GKE conserve les adresses IP des pods sources pour les paquets envoyés aux destinations spécifiées dans GKE remplace les adresses IP des pods sources par les adresses IP des nœuds sources pour les paquets envoyés aux destinations non spécifiées dans |
Le cluster n'inclut pas de règle |
Les règles
|
Exemples de configuration
Développez les sections suivantes pour afficher des exemples de masquage d'adresses IP et de configuration en fonction du type de cluster.
Documentation de référence sur la configuration avancée
Lorsque ip-masq-agent
est déployé automatiquement
Dans les clusters en mode Autopilot, GKE déploie toujours un DaemonSet ip-masq-agent
.
Dans les clusters Standard, GKE déploie un DaemonSet ip-masq-agent
lorsque l'option --disable-default-snat
n'est pas définie et que le cluster utilise l'une des combinaisons de configuration suivantes :
Le cluster n'utilise pas GKE Dataplane V2 et l'application des règles de réseau est activée.
Le cluster utilise une plage d'adresses IP de pods qui ne correspond pas à
10.0.0.0/8
.
Pour que le DaemonSet ip-masq-agent
soit efficace, vous devez également spécifier la liste nonMasqueradeCIDRs
dans le ConfigMap de ip-masq-agent
. Pour en savoir plus, consultez la section Comment configurer un agent de masquage d'adresses IP.
Lorsqu'un DaemonSet ip-masq-agent
est présent dans un cluster, GKE met à jour et rapproche un pod de diffusion sur chaque nœud du cluster.
Destinations non masquées par défaut
Les destinations non masquées par défaut sont les suivantes :
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
Les destinations non masquées par défaut s'appliquent aux clusters ayant les configurations suivantes :
Votre cluster a un DaemonSet
ip-masq-agent
, mais aucune listenonMasqueradeCIDRs
spécifiée dans son ConfigMapip-masq-agent
. Cela inclut le cas où votre cluster a un DaemonSetip-masq-agent
mais n'a pas du tout de ConfigMapip-masq-agent
.Votre cluster n'a pas de DaemonSet
ip-masq-agent
, et l'option--disable-default-snat
n'est pas définie.
Les destinations non masquées par défaut ne s'appliquent pas aux clusters ayant les configurations suivantes :
Votre cluster a un DaemonSet
ip-masq-agent
, et vous avez une listenonMasqueradeCIDRs
personnalisée spécifiée dans le ConfigMapip-masq-agent
. Une listenonMasqueradeCIDRs
personnalisée remplace toujours les destinations non masquées par défaut lorsque le cluster comporte un DaemonSetip-masq-agent
.Votre cluster n'a pas de DaemonSet
ip-masq-agent
, et l'option--disable-default-snat
est définie. Pour en savoir plus sur cette configuration, consultez la section Effet de l'option--disable-default-snat
.
Effet de l'option --disable-default-snat
L'option --disable-default-snat
modifie le comportement SNAT par défaut de GKE de manière à ce que les adresses IP des pods sources soient conservées pour les paquets envoyés à toutes les destinations.
GKE implémente le comportement SNAT par défaut en ne déployant aucun DaemonSet ip-masq-agent
dans le cluster.
L'option --disable-default-snat
n'a aucun effet lorsqu'un cluster inclut un DaemonSet ip-masq-agent
:
- Comme les clusters Autopilot incluent toujours un DaemonSet
ip-masq-agent
, l'option--disable-default-snat
n'a aucun effet sur les clusters Autopilot.
- Pour les clusters standards : si vous déployez un DaemonSet
ip-masq-agent
ou si GKE déploie automatiquement un DaemonSetip-masq-agent
,--disable-default-snat
n'a aucune signification pour le cluster, même si--disable-default-snat
est défini. Lorsqu'un DaemonSetip-masq-agent
est présent dans le cluster, les destinations non masquées sont explicitement spécifiées dans une listenonMasqueradeCIDRs
du ConfigMapip-masq-agent
ou à partir de destinations non masquées par défaut lorsqu'aucune listenonMasqueradeCIDRs
n'est définie.
Vous pouvez définir l'option --disable-default-snat
en mettant à jour un cluster après sa création. Si aucun DaemonSet ip-masq-agent
n'est déployé dans le cluster, la désactivation du SNAT par défaut prend effet une fois que le cluster a remplacé tous ses nœuds, ce qui peut parfois prendre plusieurs heures. Ceci est dû au fait que GKE respecte les intervalles de maintenance que vous avez configurées lorsqu'il remplace les nœuds du cluster. Si vous n'avez configuré aucun intervalle de maintenance, vous devez remplacer manuellement les nœuds du cluster avant que l'option --disable-default-snat
n'ait un effet.
Masquage de liaison locale
La plage 169.254.0.0/16
est utilisée pour les adresses IP de liaison locale. Le masquage de liaison locale consiste à remplacer une adresse IP de pod source par une adresse IP de nœud source pour les paquets envoyés aux destinations 169.254.0.0/16
.
Les clusters Autopilot conservent toujours les adresses IP des pods sources pour les paquets envoyés aux destinations 169.254.0.0/16
.
Par défaut, les clusters standards conservent également les adresses IP des pods sources pour les paquets envoyés aux destinations 169.254.0.0/16
.
Vous pouvez activer le masquage d'adresses IP de liaison locale dans un cluster standard en effectuant les deux opérations suivantes :
- Assurez-vous que le paramètre
masqLinkLocal
existe et qu'il est défini surTrue
dans le configMapip-masq-agent
. Lorsque le paramètremasqLinkLocal
n'est pas présent dans le ConfigMapip-masq-agent
, la valeur par défaut estFalse
. Pour obtenir des conseils, consultez les pages Vérifier le ConfigMapip-masq-agent
, Créer le ConfigMapip-masq-agent
et Modifier un ConfigMapip-masq-agent
existant. - Assurez-vous que le DaemonSet
ip-masq-agent
est déployé dans votre cluster. Pour obtenir des conseils, consultez Vérifier le DaemonSetip-masq-agent
et Déployer le DaemonSetip-masq-agent
.
Conteneurs et pods de diagnostic avec hostNetwork: true
À moins que vous ne spécifiez une adresse IP source personnalisée pour les paquets, les pods exécutés avec hostNetwork: true
et les conteneurs de diagnostic envoient des paquets dont les sources correspondent à l'adresse IP du nœud. Pour les pods exécutés avec hostNetwork: true
, GKE attribue au pod l'adresse IP du nœud. GKE ne gère pas les adresses IP pour les conteneurs de diagnostic, y compris les conteneurs permettant de déboguer les problèmes de nœuds à l'aide de la boîte à outils.
Les clusters Autopilot n'acceptent pas l'exécution de pods avec spec.hostNetwork: true
. Comme les nœuds d'un cluster Autopilot ne sont pas accessibles via SSH, vous ne pouvez pas exécuter de conteneurs de diagnostic sur ces nœuds.
Conserver les sources d'adresses IPv4 des pods vers les destinations Internet
Si la configuration du masquage d'adresses IP de votre cluster est l'une des suivantes, GKE conserve les sources des adresses IP des pods pour les paquets envoyés à toutes les destinations, y compris les destinations Internet :
- Dans les clusters standards avec un DaemonSet
ip-masq-agent
, si vous avez défininonMasqueradeCIDRs
sur0.0.0.0
dans le ConfigMapip-masq-agent
. - Dans les clusters standards sans DaemonSet
ip-masq-agent
, si vous avez défini l'option--disable-default-snat
.
- Dans les clusters Autopilot, si vous modifiez la règle de sortie EgressNATPolicy par défaut de sorte que
spec.action
soitNoSNAT
et quespec.destinations
contienneCidr: 0.0.0.0/0
.
Dans les clusters publics et privés, les sources IPv4 des pods sont des adresses IPv4 internes, ce qui signifie qu'elles ne sont pas routables sur Internet. Par conséquent, lorsque vous conservez les adresses IPv4 des pods sources pour les paquets envoyés sur Internet, vous devez utiliser une technique comme celle-ci afin d'acheminer les paquets après qu'ils ont quitté les nœuds du cluster :
- Assurez-vous que votre réseau VPC dispose d'une route par défaut avec le saut suivant de la passerelle Internet par défaut et configurez une passerelle Cloud NAT pour fournir des services NAT publics au moins aux plages d'adresses IPv4 secondaires du sous-réseau utilisées par les pods de votre cluster. Pour en savoir plus, consultez la section Interaction GKE dans la présentation de Cloud NAT.
- Configurez votre réseau VPC pour utiliser une route par défaut personnalisée dont le saut suivant est une instance de VM ou un équilibreur de charge réseau passthrough interne, où la VM ou les backends de l'équilibreur de charge ont été configurés pour acheminer les paquets vers Internet pour le compte des pods.
Restaurer le comportement SNAT par défaut
Pour restaurer le comportement SNAT par défaut lorsqu'un DaemonSet ip-masq-agent
est présent dans un cluster, supprimez le ConfigMap ip-masq-agent
associé. Le DaemonSet ip-masq-agent
rétablit le comportement de masquage d'adresses IP par défaut sur les nœuds qu'il gère.
Pour restaurer le comportement SNAT par défaut lorsqu'un DaemonSet ip-masq-agent
n'est pas présent dans un cluster, vous devez mettre à niveau le pool de nœuds (assurez-vous que --disable-default-snat
n'est pas défini sur le cluster).
Effet de la règle NAT de sortie dans les clusters Autopilot
La règle NAT de sortie de GKE vous permet de configurer le masquage d'adresses IP sur les clusters Autopilot. Vous pouvez utiliser la définition de ressource personnalisée (CRD) de la règle NAT de sortie GKE pour modifier les adresses IP sources des paquets envoyés depuis les pods.
Pour des raisons de sécurité ou d'épuisement des adresses IP, vous pouvez masquer les adresses IP des pods vers les plages d'adresses IP des nœuds pour le trafic sortant vers les réseaux sur site. Par exemple, vous pouvez utiliser une plage non-RFC-1918 pour les clusters Autopilot et une plage RFC-1918 pour les nœuds. Toutefois, si les pods doivent communiquer avec des réseaux sur site qui utilisent également la plage non-RFC-1918, les adresses IP peuvent se chevaucher. Pour éviter les pertes de trafic, vous pouvez configurer une règle NAT de sortie pour ne pas annoncer les plages non-RFC-1918 des pods sur les réseaux sur site. La règle NAT de sortie masque la plage non-RFC-1918 des pods pour utiliser la plage RFC-1918 du nœud à la place. Assurez-vous qu'aucune plage de nœuds ne chevauche une plage sur site, car cela peut entraîner une boucle de trafic.
GKE applique le comportement de masquage d'adresses IP pour les clusters Autopilot en procédant comme suit :
- GKE déploie le contrôleur NAT de sortie et le
ip-masq-agent
. - Vous créez la règle NAT de sortie.
- Le contrôleur GKE traduit la règle dans le ConfigMap de
ip-masq-agent
. - Le DaemonSet
ip-masq-agent
lit le ConfigMap, puis GKE applique le comportement de masquage d'adresses IP.
Règles générées automatiquement
GKE accepte deux règles NAT de sortie générées automatiquement :
- Par défaut : ces règles sont modifiables.
- Gérées par GKE : ces règles sont fixes et ne peuvent pas être modifiées.
Règle par défaut
GKE prédéfinit un ensemble de plages d'adresses IP par défaut. Lorsque des paquets sont envoyés à ces destinations, votre cluster ne masque pas les sources d'adresses IP et conserve les adresses IP des pods sources. Pour modifier ces plages d'adresses IP par défaut, consultez la section Modifier et déployer la règle NAT de sortie.
Le fichier manifeste suivant décrit une règle NAT de sortie par défaut :
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>
Les plages CIDR sont identiques aux plages de destination non masquées par défaut.
Règle gérée par GKE
La règle NAT de sortie de GKE réserve une plage statique d'adresses IP requises pour préserver le fonctionnement du cluster. Cette plage statique contient les plages d'adresses IP des pods, des services et des nœuds du cluster, et peut chevaucher la règle par défaut.
Vous pouvez identifier cette règle par un hachage dynamique de 8 octets (gke-{CLUSTER_SHORT_HASH}
) que GKE attribue. Vous ne pouvez pas modifier cette règle.
Le fichier manifeste suivant décrit une règle gérée par GKE nommée 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>
Étapes suivantes
- Apprenez à utiliser la règle NAT de sortie pour configurer le masquage d'adresses IP dans les clusters Autopilot.
- Lisez la présentation du réseau GKE.
- Familiarisez-vous avec la configuration des réseaux autorisés.