Cette page explique comment configurer des clusters créés en mode Google Kubernetes Engine (GKE) Standard pour effectuer un masquage d'adresses IP avec ip-masq-agent
. Pour en savoir plus sur le masquage d'adresses IP en mode GKE Autopilot, consultez la section Utiliser la règle NAT de sortie pour configurer le masquage d'adresses IP dans les clusters Autopilot.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande
gcloud components update
.
Vérifier l'état de ip-masq-agent
Cette section vous explique comment :
- Déterminer si votre cluster possède un DaemonSet
ip-masq-agent
. - Vérifier la ressource ConfigMap
ip-masq-agent
.
Vérifier le DaemonSet ip-masq-agent
Pour vérifier si votre cluster exécute le DaemonSet ip-masq-agent
, utilisez Google Cloud CLI ou la console Google Cloud .
gcloud
Récupérez les identifiants de votre cluster :
gcloud container clusters get-credentials CLUSTER_NAME
Remplacez
CLUSTER_NAME
par le nom de votre cluster.Recherchez
ip-masq-agent
dans l'espace de nomskube-system
:kubectl get daemonsets/ip-masq-agent -n kube-system
Si le DaemonSet
ip-masq-agent
existe, le résultat ressemble à ce qui suit :NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE ip-masq-agent 3 3 3 3 3 <none> 13d
Si le DaemonSet
ip-masq-agent
n'existe pas, le résultat ressemble à ce qui suit :Error from server (NotFound): daemonsets.apps "ip-masq-agent" not found
Vérifiez si le DaemonSet
ip-masq-agent
exécute la dernière version :kubectl get daemonsets/ip-masq-agent -n kube-system -o jsonpath='{.spec.template.spec.containers[].image}'
Cette commande doit renvoyer la même image de conteneur que celle spécifiée dans Déployer le DaemonSet ip-masq-agent.
Console
Accédez à la page Charges de travail dans la console Google Cloud .
Pour
Filtrer, procédez comme suit :- Cliquez sur pour effacer le filtre Is system object: False (Est un objet système : Faux).
- Filtrez les propriétés suivantes :
- Nom :
ip-masq-agent
. - Cluster : nom de votre cluster.
- Nom :
Si le DaemonSet
ip-masq-agent
existe, vous pouvez voir l'enregistrement DaemonSet dans la table. Si le DaemonSetip-masq-agent
n'existe pas, aucune ligne n'est affichée.
Pour créer le ConfigMap ip-masq-agent
et déployer le DaemonSet ip-masq-agent
, consultez la section Configurer et déployer le ip-masq-agent
.
Vérifier le ConfigMap ip-masq-agent
Pour vérifier si votre cluster exécute le ConfigMap ip-masq-agent
, utilisez Google Cloud CLI ou la console Google Cloud .
gcloud
Récupérez les identifiants de votre cluster :
gcloud container clusters get-credentials CLUSTER_NAME
Remplacez
CLUSTER_NAME
par le nom de votre cluster.Décrivez le ConfigMap
ip-masq-agent
dans l'espace de nomskube-system
:kubectl describe configmaps/ip-masq-agent -n kube-system
Si le ConfigMap
ip-masq-agent
existe, le résultat ressemble à ce qui suit :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>
Si le ConfigMap
ip-masq-agent
n'existe pas, le résultat ressemble à ce qui suit :Error from server (NotFound): configmaps "ip-masq-agent" not found
Console
Accédez à la page Configuration de la console Google Cloud .
Pour
Filtrer, procédez comme suit :- Cliquez sur pour effacer le filtre Is system object: False (Est un objet système : Faux).
- Filtrez les propriétés suivantes :
- Nom :
ip-masq-agent
. - Cluster : nom de votre cluster.
- Nom :
Si le ConfigMap
ip-masq-agent
existe, vous pouvez voir l'enregistrement ConfigMap dans la table. Si le ConfigMapip-masq-agent
n'existe pas, aucune ligne n'est affichée.
Si le cluster dispose déjà du ConfigMap ip-masq-agent
, vous pouvez le configurer et le déployer.
Configurer et déployer la ressource ip-masq-agent
Cette section explique comment créer ou modifier le ConfigMap ip-masq-agent
, et comment déployer ou supprimer le DaemonSet ip-masq-agent
. Pour déterminer les tâches à effectuer, vous devez d'abord déterminer si votre cluster dispose déjà du ConfigMap ip-masq-agent
et du DaemonSet ip-masq-agent
.
Créer le ConfigMap ip-masq-agent
Les étapes suivantes montrent comment créer le ConfigMap ip-masq-agent
. Si votre cluster dispose déjà du ConfigMap ip-masq-agent
, modifiez plutôt un ConfigMap ip-masq-agent existant.
Créez un fichier de configuration à l'aide du modèle suivant et enregistrez-le localement. Vous pouvez utiliser n'importe quel nom pour la copie locale de ce fichier de configuration.
nonMasqueradeCIDRs: - CIDR_1 - CIDR_2 masqLinkLocal: false resyncInterval: SYNC_INTERVALUNIT_OF_TIME
Remplacez les éléments suivants :
CIDR_1
etCIDR_2
: plages d'adresses IP au format CIDR 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. Si vous avez besoin de plus de deux CIDR, ajoutez d'autres entrées à la listenonMasqueradeCIDRs
en suivant le même format. Au minimum, la propriéténonMasqueradeCIDRs
doit inclure les plages d'adresses IP de nœud et de pod de votre cluster.SYNC_INTERVAL
: nombre de secondes après lesquelles chaque podip-masq-agent
vérifie le contenu du ConfigMapip-masq-agent
et écrit les modifications apportées à son fichier/etc/config/ip-masq-agent
local. Valeur par défaut :60
.UNIT_OF_TIME
: unité de temps de l'intervalle resyncInterval. Les valeurs valides incluents
(pour les secondes) oums
(pour les millisecondes). Valeur par défaut :s
.
Définissez
masqLinkLocal
sur "false" (valeur par défaut), sauf si vous devez activer le masquage des paquets envoyés pour associer des adresses IPv4 locales. Pour en savoir plus, consultez la section Masquage vers des destinations de liaisons locales.Créez la ressource ConfigMap :
kubectl create configmap ip-masq-agent \ --namespace=kube-system \ --from-file=config=LOCAL_CONFIG_FILE_PATH
Remplacez
LOCAL_CONFIG_FILE_PATH
par le chemin d'accès au fichier de configuration que vous avez créé à l'étape précédente.Décrivez le ConfigMap
ip-masq-agent
dans l'espace de nomskube-system
:kubectl describe configmaps/ip-masq-agent -n kube-system
Le résultat ressemble à ce qui suit :
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>
Ce résultat inclut le paramètre
config
avec vos modifications de configuration. Vous pouvez maintenant déployer le DaemonSetip-masq-agent
.
Modifier un ConfigMap ip-masq-agent
existant
Vous pouvez modifier le contenu d'un ConfigMap ip-masq-agent
existant en procédant comme suit :
Ouvrez le ConfigMap dans un éditeur de texte :
kubectl edit configmap ip-masq-agent --namespace=kube-system
Modifiez le contenu du fichier 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
Remplacez les éléments suivants :
CIDR_1
etCIDR_2
: plages d'adresses IP au format CIDR 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. Si vous avez besoin de plus de deux CIDR, ajoutez d'autres entrées à la listenonMasqueradeCIDRs
en suivant le même format. Au minimum, la propriéténonMasqueradeCIDRs
doit inclure les plages d'adresses IP de nœud et de pod de votre cluster.SYNC_INTERVAL
: nombre de secondes après lesquelles chaque podip-masq-agent
vérifie le contenu du ConfigMapip-masq-agent
et écrit les modifications apportées à son fichier/etc/config/ip-masq-agent
local. Valeur par défaut :60
.UNIT_OF_TIME
: unité de temps de l'intervalle resyncInterval. Les valeurs valides incluents
(pour les secondes) oums
(pour les millisecondes). Valeur par défaut :s
.
Définissez
masqLinkLocal
sur "false" (valeur par défaut), sauf si vous devez activer le masquage des paquets envoyés pour associer des adresses IPv4 locales. Pour en savoir plus, consultez la section Masquage vers des destinations de liaisons locales.Décrivez le ConfigMap
ip-masq-agent
dans l'espace de nomskube-system
:kubectl describe configmaps/ip-masq-agent -n kube-system
Le résultat ressemble à ce qui suit :
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>
Ce résultat inclut le paramètre
config
qui correspond à la valeur de configuration du fichier que vous avez créé.
Déployer le DaemonSet ip-masq-agent
Après avoir créé ou modifié votre ConfigMap ip-masq-agent
, déployez le DaemonSet ip-masq-agent
.
Enregistrez le fichier manifeste suivant en tant que fichier 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.3-gke.4@sha256:b5db41ddaf863b660da330322714f668101482b528829c50c53229d901d11af5 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"
Ce fichier manifeste crée un volume nommé
config-volume
qui est installé comme spécifié par le volumeMount du conteneur.Si vous devez modifier ce fichier manifeste, tenez compte des conditions suivantes :
Le nom du volume peut être choisi librement, mais il doit correspondre au nom
volumeMount
du conteneur.Le nom du ConfigMap doit correspondre au nom du
configMap
référencé dans le volumeconfig-volume
du pod.Le nom de la chaîne (
--masq-chain
) doit êtreIP-MASQ
. Sinon, GKE ne remplace pas les règles de masquage par défaut.Les pods DaemonSet lisent les données à partir du fichier
ip-masq-agent
. Le contenu du fichierip-masq-agent
correspond à la valeur de la cléconfig
dans le ConfigMap.Si vous utilisez des plages d'adresses IP réservées non masquées par défaut, annulez la mise en commentaire de la ligne
- --nomasq-all-reserved-ranges
dans la sectionarg
.
Déployez le DaemonSet :
kubectl apply -f LOCAL_FILE_PATH
Remplacez
LOCAL_FILE_PATH
par le chemin d'accès au fichier que vous avez créé à l'étape précédente.
Vous pouvez mettre à jour manuellement le DaemonSet ip-masq-agent
que vous avez créé. Pour en savoir plus, consultez Mettre à jour un DaemonSet.
Supprimer la ressource ip-masq-agent
Cette section explique comment supprimer le DaemonSet ip-masq-agent
et le ConfigMap ip-masq-agent
. La suppression de ip-masq-agent
ne rétablit pas les paramètres de masquage d'adresse IP existants sur les nœuds.
Supprimer le DaemonSet ip-masq-agent
Si vous avez créé manuellement le DaemonSet ip-masq-agent
, vous pouvez le supprimer en exécutant la commande suivante :
kubectl delete daemonsets ip-masq-agent -n kube-system
Supprimer le ConfigMap ip-masq-agent
Pour supprimer complètement le ConfigMap ip-masq-agent
, exécutez la commande suivante :
kubectl delete configmap ip-masq-agent -n kube-system
Dépannage
Les sections suivantes fournissent des conseils de dépannage.
Dépannage d'ordre général
Les étapes suivantes vous aident à diagnostiquer les problèmes liés au masquage d'adresse IP :
- Confirmez l'état de l'objet
ip-masq-agent
. Si le ConfigMap n'est pas défini, le trafic vers toutes les destinations par défaut n'est pas masqué et conserve l'adresse IP du pod. Le trafic vers d'autres destinations conserve l'adresse IP du nœud. - Vérifiez la version de l'image
ip-masq-agent
spécifiée dans le DaemonSet. Si la version du DaemonSetip-masq-agent
n'est pas la plus récente, suivez les étapes de déploiement pour mettre à jour le DaemonSet. - Vérifiez si la chaîne IP-MASQ est correctement renseignée dans les tables d'adresses IP NAT en exécutant la commande
sudo iptables -t nat -L IP-MASQ
dans le nœud concerné. Si la listenonMasqueradeCIDRs
définie dans le ConfigMap n'apparaît pas dans les tables d'adresses IP NAT, vérifiez que le fichier de configuration utilisé pour créer le ConfigMap ne contient pas de fautes de frappe. - Vérifiez que la destination autorise à la fois les plages d'adresses IP des nœuds et des pods.
- Si le trafic n'est pas accessible depuis le nœud ou le pod, exécutez un test de connectivité.
Problème : l'adresse IP du pod devient l'adresse IP du nœud
Lorsque vous utilisez un agent de masquage d'adresses IP, vous pouvez remarquer que l'adresse IP source du pod utilise de manière inattendue l'adresse IP du nœud lorsque vos pods communiquent avec des destinations externes.
Le problème est dû à une liste SNAT (Source Network Address Translation) personnalisée manquante ou incomplète. Lorsque vous utilisez un agent de masquage d'adresses IP, le SNAT par défaut du cluster est utilisé lorsque le ConfigMap est manquant ou qu'il ne contient pas de liste nonMasqueradeCIDRs
. Lorsqu'un paquet quitte un pod, la SNAT par défaut remplace l'adresse IP source du pod par l'adresse IP interne du nœud. Pour en savoir plus sur SNAT, consultez Agent de masquage d'adresses IP.
Pour résoudre le problème, configurez une liste SNAT personnalisée en définissant une liste nonMasqueradeCIDRs
dans le ConfigMap ip-masq-agent
:
Ouvrez le fichier ConfigMap
ip-masq-agent
:kubectl edit configmap ip-masq-agent --namespace=kube-system
Examinez la liste
nonMasqueradeCIDRs
dans le ConfigMap. La listenonMasqueradeCIDRs
doit être présente et complète. Exemple :... nonMasqueradeCIDRs: - 35.100.0.0/16 ...
Si la liste est manquante ou incomplète, ajoutez ou modifiez la liste
nonMasqueradeCIDRs
pour inclure les plages d'adresses IP de destination pour lesquelles vous souhaitez conserver les adresses IP de pod source. Cette liste doit également inclure les adresses que vous souhaitez utiliser avec Cloud NAT.Si vous ne souhaitez pas que le trafic externe utilise SNAT, définissez le champ
nonMasqueradeCIDRs
sur0.0.0.0/0
. Exemple :... nonMasqueradeCIDRs: - 0.0.0.0/0 ...
Lorsque votre trafic n'utilise pas SNAT, tous les paquets envoyés depuis les pods conservent l'adresse IP du pod comme adresse IP source, quelle que soit la destination.
Vérifiez l'adresse IP source des paquets sortants de vos pods. Pour vérifier cette adresse, effectuez une capture de paquets. Si cela n'est pas possible, vous pouvez vérifier l'adresse IP du nœud, qui doit être l'adresse IP source des paquets sortants soumis à SNAT, à l'aide de la commande suivante :
kubectl get nodes -o wide
Étapes suivantes
- Découvrez-en plus sur les adresses IP d'alias.
- Lisez la présentation du réseau GKE.
- Familiarisez-vous avec la configuration des réseaux autorisés.