Créer une règle de réseau pour un cluster

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 intitulée 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.

Utiliser gcloud config

  • Définissez votre ID de projet par défaut :
    gcloud config set project project-id
  • Si vous travaillez avec des clusters zonaux, définissez votre zone de calcul par défaut :
    gcloud config set compute/zone compute-zone
  • Si vous utilisez des clusters 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

Lorsque vous activez l'application de la règle de réseau dans un cluster GKE, 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 REST de 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

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
  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 au menu Google Kubernetes Engine de Cloud Console.

    Accéder au menu "Google Kubernetes Engine"

  2. Cliquez sur le bouton Créer un cluster.

  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 au menu Google Kubernetes Engine de Cloud Console.

    Accéder au menu Google Kubernetes Engine

  2. Cliquez sur le cluster pour lequel vous souhaitez appliquer la règle de réseau.

  3. Cliquez sur le bouton Modifier (icône en forme de crayon).

  4. Dans le menu déroulant Règle de réseau pour le maître, sélectionnez Activée.

  5. Cliquez sur Enregistrer, puis à nouveau sur Modifier une fois le cluster mis à jour.

  6. Dans le menu déroulant Règle de réseau pour les nœuds, sélectionnez Activée.

  7. Cliquez sur Save.

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.

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

Console

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

  1. Accédez au menu Google Kubernetes Engine de Cloud Console.

    Accéder au menu "Google Kubernetes Engine"

  2. Cliquez sur le bouton Modifier du cluster (icône en forme de crayon).

  3. Dans le menu déroulant Règle de réseau pour les nœuds, sélectionnez Désactivée.

  4. Cliquez sur Enregistrer. Ensuite, cliquez à nouveau sur Modifier.

  5. Dans le menu déroulant Règle de réseau pour le maître, sélectionnez Désactivée.

  6. Cliquez sur Enregistrer.

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

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.

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

Utiliser des vérifications d'état d'équilibreur de charge HTTP(S)

Lorsqu'un objet Entrée est appliqué à un objet Service pour créer un équilibreur de charge HTTP(S), la règle de réseau appliquée aux pods derrière cet objet Service doit également autoriser les plages d'adresses IP de vérification d'équilibreur de charge HTTP(S) appropriées.

De plus, les ports de nœud d'un objet Service peuvent transférer les connexions aux pods d'autres nœuds, à moins que cela ne soit empêché en déterminant externalTrafficPolicy sur "Local" dans la définition de l'objet 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.

Sachez que ces considérations ne s'appliquent pas à l'utilisation de l'équilibrage de charge natif en conteneurs avec des groupes de points de terminaison du réseau.

Étapes suivantes