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 Google Cloud Console.
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
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 Google Cloud Console.
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 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 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.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"
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 la section 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 du pool d'adresses IP ip-masq-agent
ne rétablit pas les paramètres de masquage d'adresses 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 étapes suivantes fournissent des informations de dépannage :
- 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 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 que le pod tente d'atteindre est incluse dans l'objet
nonMasqueradeCIDRs
du ConfigMap. Si la destination ne se trouve pas dansnonMasqueradeCIDRs
, le trafic conserve l'adresse IP du nœud. - 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é.
Étape suivante
- 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.