Créer une règle de réseau


Cette page explique comment configurer l'application des règles de réseau dans Google Kubernetes Engine (GKE). Pour obtenir des informations générales sur la mise en réseau GKE, consultez la page Présentation du réseau.

Présentation

La fonctionnalité d'application de la règle de réseau de GKE vous permet de contrôler la communication entre les pods et les services de votre cluster. Pour définir une règle de réseau, utilisez l'API Network Policy de Kubernetes pour créer des règles de pare-feu au niveau des pods. Ces règles de pare-feu déterminent quels pods et services peuvent accéder les uns aux autres au sein du cluster.

La définition d'une règle de réseau vous permet d'activer des dispositifs tels que la défense en profondeur lorsque votre cluster diffuse une application à plusieurs niveaux. Par exemple, vous pouvez créer une règle de réseau pour empêcher un service frontal de votre application qui aurait été piraté de communiquer directement avec un service de facturation ou de comptabilité séparé de celui-ci par plusieurs niveaux.

Une règle de réseau peut également aider votre application à héberger simultanément des données de plusieurs utilisateurs. Par exemple, vous pouvez fournir une architecture mutualisée sécurisée en définissant un modèle attribuant un espace de noms à chaque locataire. Dans un tel modèle, les règles de réseau peuvent garantir que les pods et les services d'un espace de noms donné n'ont pas la possibilité d'accéder aux pods ou services d'un autre espace de noms.

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

Configurez les paramètres gcloud par défaut à l'aide de l'une des méthodes suivantes :

  • Utilisez gcloud init pour suivre les instructions permettant de définir les paramètres par défaut.
  • Utilisez gcloud config pour définir individuellement l'ID, la zone et la région de votre projet.

Utiliser gcloud init

Si le message d'erreur One of [--zone, --region] must be supplied: Please specify location s'affiche, effectuez les tâches ci-dessous.

  1. Exécutez gcloud init et suivez les instructions :

    gcloud init

    Si vous utilisez SSH sur un serveur distant, utilisez l'option --console-only pour empêcher la commande d'ouvrir un navigateur :

    gcloud init --console-only
  2. Suivez les instructions pour autoriser gcloud à utiliser votre compte Google Cloud.
  3. Créez ou sélectionnez une configuration.
  4. Choisissez un projet Google Cloud.
  5. Choisissez une zone Compute Engine par défaut pour les clusters zonaux ou une région pour les clusters régionaux ou Autopilot.

Utiliser gcloud config

  • Définissez votre ID de projet par défaut :
    gcloud config set project PROJECT_ID
  • Si vous utilisez des clusters zonaux, définissez votre zone de calcul par défaut :
    gcloud config set compute/zone COMPUTE_ZONE
  • Si vous utilisez des clusters Autopilot ou régionaux, définissez votre région de calcul par défaut :
    gcloud config set compute/region COMPUTE_REGION
  • Mettez à jour gcloud vers la dernière version :
    gcloud components update

Utiliser la fonctionnalité d'application de la règle de réseau

Vous pouvez activer l'application de la règle de réseau pour un cluster GKE en cours de création ou pour un cluster existant. Vous avez également la possibilité de désactiver la règle de réseau pour un cluster existant.

Une fois que vous avez activé les règles de réseau dans votre cluster, vous pouvez créer une règle de réseau à l'aide de l'API Network Policy de Kubernetes.

Activer l'application de la règle de réseau

L'application de la règle de réseau est intégrée à GKE Dataplane V2. Vous n'avez pas besoin d'activer l'application de la règle de réseau dans les clusters qui utilisent GKE Dataplane V2.

Lorsque vous activez l'application de la règle de réseau dans un cluster GKE qui n'utilise pas GKE Dataplane V2, GKE gère et applique les règles de réseau dans ce cluster.

Vous pouvez activer l'application de la règle de réseau dans GKE à l'aide de l'outil gcloud, de Google Cloud Console ou de l'API GKE.

gcloud

Pour activer l'application de la règle de réseau lors de la création d'un cluster, exécutez la commande suivante :

gcloud container clusters create CLUSTER_NAME --enable-network-policy

Remplacez CLUSTER_NAME par le nom du nouveau cluster.

Pour activer l'application de la règle de réseau pour un cluster existant, procédez comme suit :

  1. Exécutez la commande suivante pour activer le module complémentaire :

    gcloud container clusters update CLUSTER_NAME --update-addons=NetworkPolicy=ENABLED
    

    Remplacez CLUSTER_NAME par le nom du cluster.

  2. Exécutez la commande suivante pour activer l'application de la règle de réseau sur votre cluster, ce qui recrée les pools de nœuds de votre cluster avec l'application de la règle de réseau activée :

    gcloud container clusters update CLUSTER_NAME --enable-network-policy
    

Console

Pour activer l'application de la règle de réseau lors de la création d'un cluster, procédez comme suit :

  1. Accédez à la page Google Kubernetes Engine dans Cloud Console.

    Accéder à Google Kubernetes Engine

  2. Cliquez sur Créer.

  3. Configurez le cluster selon vos besoins.

  4. Dans le volet de navigation, cliquez sur Réseau sous Cluster.

  5. Cochez la case Activer la règle de réseau.

  6. Cliquez sur Créer.

Pour activer l'application de la règle de réseau pour un cluster existant, procédez comme suit :

  1. Accédez à la page Google Kubernetes Engine dans Cloud Console.

    Accéder à Google Kubernetes Engine

  2. Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.

  3. Sous Mise en réseau, dans le champ Règle de réseau, cliquez sur Modifier la règle de réseau.

  4. Cochez la case Activer la règle de réseau pour le maître, puis cliquez sur Enregistrer les modifications.

  5. Attendez que les modifications s'appliquent, puis cliquez à nouveau sur Modifier la règle de réseau.

  6. Cochez la case Activer la règle de réseau pour les nœuds.

  7. Cliquez sur Save Changes (Enregistrer les modifications).

API

Pour activer l'application de la règle de réseau, procédez comme suit :

  1. Spécifiez l'objet networkPolicy au sein de l'objet cluster que vous fournissez à la méthode projects.zones.clusters.create ou projects.zones.clusters.update.

  2. L'objet networkPolicy requiert une valeur "enum" spécifiant le fournisseur de règle de réseau à utiliser, ainsi qu'une valeur booléenne indiquant s'il faut activer l'application de la règle de réseau. Si vous activez l'application de la règle de réseau sans définir de fournisseur, les commandes create et update renvoient une erreur.

Désactiver l'application de la règle de réseau

Vous pouvez désactiver l'application de la règle de réseau à l'aide de l'outil gcloud, de Google Cloud Console ou de l'API GKE. L'application de la règle de réseau ne peut pas être désactivée dans les clusters qui utilisent GKE Dataplane V2.

gcloud

Pour désactiver l'application de la règle de réseau pour un cluster existant, exécutez la commande suivante :

gcloud container clusters update CLUSTER_NAME --no-enable-network-policy

Remplacez CLUSTER_NAME par le nom du cluster.

Console

Pour désactiver l'application de la règle de réseau pour un cluster existant, procédez comme suit :

  1. Accédez à la page Google Kubernetes Engine dans Cloud Console.

    Accéder à Google Kubernetes Engine

  2. Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.

  3. Sous Mise en réseau, dans le champ Règle de réseau, cliquez sur Modifier la règle de réseau.

  4. Décochez la case Activer la règle de réseau pour les nœuds, puis cliquez sur Enregistrer les modifications.

  5. Attendez que les modifications s'appliquent, puis cliquez à nouveau sur Modifier la règle de réseau.

  6. Décochez la case Activer la règle de réseau pour le maître.

  7. Cliquez sur Save Changes (Enregistrer les modifications).

API

Pour désactiver l'application de la règle de réseau pour un cluster existant, procédez comme suit :

  1. Spécifiez l'objet networkPolicy dans l'objet cluster que vous fournissez à projects.zones.clusters.update.
  2. Dans cet objet networkPolicy, définissez la valeur booléenne enabled sur false.

Si vous désactivez l'application de la règle de réseau, assurez-vous également de mettre à jour les modules complémentaires (par exemple, Calico DaemonSet) pour indiquer que la règle de réseau est désactivée pour les modules complémentaires :

gcloud container clusters update CLUSTER_NAME --update-addons=NetworkPolicy=DISABLED

Remplacez CLUSTER_NAME par le nom du cluster.

Créer une règle de réseau

Une fois que vous avez activé l'application de la règle de réseau pour votre cluster, vous devez définir la règle de réseau proprement dite. La définition de la règle de réseau fait appel à l'API Network Policy de Kubernetes.

Pour plus d'informations sur la création d'une règle de réseau, consultez les rubriques suivantes dans la documentation de Kubernetes :

Utiliser PodSecurityPolicy

Si vous utilisez une règle NetworkPolicy et que vous avez un pod soumis à une règle PodSecurityPolicy, créez un objet RBAC Role ou ClusterRole autorisé à utiliser une règle PodSecurityPolicy. Liez ensuite l'objet Role ou ClusterRole au compte de service du pod. Lorsque vous utilisez conjointement les règles NetworkPolicy et PodSecurityPolicy, accorder des autorisations aux comptes utilisateur n'est pas suffisant. Vous devez associer le rôle au compte de service. Pour en savoir plus, consultez la section Autoriser les règles.

Surcharge, limites et mises en garde

  • L'activation de l'application de la règle de réseau consomme des ressources supplémentaires dans les nœuds. Plus précisément, elle augmente l'espace mémoire utilisé par le processus kube-system d'environ 128 Mo et requiert environ 300 millicores de processeur.

  • L'activation de la règle de réseau nécessite la recréation de vos nœuds. Si votre cluster a un intervalle de maintenance actif, la recréation automatique de vos nœuds n'interviendra qu'au prochain intervalle de maintenance. Si vous préférez, vous avez la possibilité de mettre à jour manuellement votre cluster à tout moment.

Limites et exigences

  • Votre cluster doit comporter au moins deux nœuds de type e2-medium ou d'un type supérieur. La taille de cluster minimale recommandée pour l'application de la règle de réseau est de trois instances e2-medium.
  • La règle de réseau n'est pas acceptée pour les clusters dont les nœuds sont des instances du type f1-micro ou g1-small, car les besoins en ressources sont trop élevés pour les instances de cette taille.
  • Si vous utilisez une règle de réseau avec Workload Identity de GKE, vous devez autoriser la sortie vers les adresses IP et les numéros de port suivants afin que vos pods puissent communiquer avec le serveur de métadonnées GKE. Pour les clusters exécutant une version GKE 1.21.0-gke.1000 ou ultérieure, autorisez la sortie vers 169.254.169.252/32 sur le port 988. Pour les clusters exécutant une version GKE antérieure à 1.21.0-gke.1000, autorisez la sortie vers 127.0.0.1/32 sur le port 988. Afin d'éviter toute interruption lors des mises à niveau automatiques, autorisez la sortie vers toutes ces adresses IP et ces ports.

Pour plus d'informations sur les types de machines nœud et les ressources pouvant être allouées, voir Architecture des clusters standard : les nœuds.

Migrer depuis Calico vers GKE Dataplane V2

Si vous migrez vos règles de réseau de Calico vers GKE Dataplane V2, tenez compte des limites suivantes :

  • Vous ne pouvez pas utiliser une adresse IP de pod ou de service dans le champ ipBlock.cidr d'un fichier manifeste NetworkPolicy. Vous devez référencer les charges de travail à l'aide d'étiquettes. Par exemple, la configuration suivante n'est pas valide :

    - ipBlock:
        cidr: 10.8.0.6/32
    
  • Vous ne pouvez pas spécifier de champ ports.port vide dans un fichier manifeste NetworkPolicy. Si vous spécifiez un port, vous devez également spécifier un protocole. Par exemple, la configuration suivante n'est pas valide :

    ingress:
    - ports:
      - protocol: TCP
    

Utiliser l'équilibrage de charge HTTP(S)

Lorsqu'un objet Ingress est appliqué à un objet Service pour créer un équilibreur de charge HTTP(S), vous devez configurer la règle de réseau appliquée aux pods derrière cet objet Service pour autoriser les plages d'adresses IP pour les vérifications d'état de l'équilibreur de charge appropriées. Si vous utilisez un équilibreur de charge HTTP(S) interne, vous devez également configurer la règle de réseau afin d'autoriser le sous-réseau proxy réservé.

Si vous n'utilisez pas l'équilibrage de charge natif en conteneurs avec des groupes de points de terminaison du réseau, les ports de nœud d'un objet Service peuvent transférer les connexions vers les pods d'autres nœuds, à moins que vous n'empêchiez ce comportement en définissant externalTrafficPolicyexternalTrafficPolicy sur Local dans la définition du service. Si externalTrafficPolicy n'est pas défini sur Local, la règle de réseau doit également autoriser les connexions à partir d'autres adresses IP de nœud dans le cluster.

Problèmes connus

Arrêt des pods StatefulSet avec Calico

Les clusters GKE avec la règle de réseau Calico activée peuvent rencontrer un problème où un pod StatefulSet supprime les connexions existantes lors de la suppression du pod. Une fois qu'un pod passe à l'état Terminating, la configuration terminationGcePeriodSeconds dans la spécification de pod n'est pas respectée et entraîne des perturbations pour les autres applications ayant une connexion existante avec le pod StatefulSet. Pour en savoir plus sur ce problème, consultez le problème Calico nº4710.

Ce problème affecte les versions GKE suivantes :

  • 1.18
  • 1.19
  • 1.20 à 1.20.11-gke.1299
  • 1.21 à 1.21.4-gke.1499

Pour résoudre ce problème, mettez à niveau votre plan de contrôle GKE vers la version 1.21.4-gke.1500 ou ultérieure.

Étape suivante