Règles de pare-feu gérées par l'utilisateur pour les services LoadBalancer GKE


Cette page explique comment désactiver les règles de pare-feu VPC d'autorisation d'entrée que GKE crée pour les services LoadBalancer.

Désactiver ces règles de pare-feu créées automatiquement pour les services LoadBalancer peut être utile dans les situations suivantes:

Pour désactiver les règles de pare-feu créées automatiquement pour les services LoadBalancer, vous devez spécifier l'indicateur --disable-l4-lb-firewall-reconciliation lorsque vous créez ou mettez à jour un cluster. L'indicateur --disable-l4-lb-firewall-reconciliation n'affecte pas les autres règles de pare-feu VPC créées automatiquement, telles que celles qui facilitent la communication entre les nœuds ou celles qui autorisent les vérifications de l'état de vos services.

Conditions requises

  • Pour utiliser des règles de pare-feu gérées par l'utilisateur pour les services LoadBalancer, vos clusters GKE doivent utiliser la version 1.31.3-gke.105600 ou ultérieure.

Limites

GKE permet de désactiver la création automatique de règles de pare-feu pour les types de services LoadBalancer suivants:

Vous ne pouvez pas désactiver la création automatique de règles de pare-feu pour les types de services LoadBalancer suivants:

  • Services LoadBalancer internes n'utilisant pas le sous-paramètre GKE
  • Services LoadBalancer externes basés sur un pool cible

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.

Stratégies de gestion manuelle des règles de pare-feu

Avant de désactiver la création automatique de règles de pare-feu VPC pour les services LoadBalancer dans votre cluster GKE, collaborez avec un administrateur de sécurité pour développer une stratégie de configuration manuelle des règles de pare-feu.

  1. Déterminez le type de stratégie de pare-feu à utiliser: une stratégie de pare-feu hiérarchique, une stratégie de pare-feu réseau globale ou une stratégie de pare-feu réseau régionale. Pour savoir comment créer une stratégie de pare-feu, consultez les articles suivants:

    Vous pouvez également utiliser des règles de pare-feu VPC, qui n'utilisent aucune stratégie.

  2. Les règles de pare-feu créées manuellement doivent être des règles d'entrée autorisées, car la règle de pare-feu d'entrée interdite implicite interdit le trafic entrant. Lorsque vous avez désactivé la création automatique de règles de pare-feu VPC, le trafic entrant n'atteint pas vos nœuds, sauf si vous avez créé des règles de pare-feu d'autorisation d'entrée correspondant au trafic de vos services LoadBalancer.

    En fonction des paramètres de la règle de pare-feu, une seule règle de pare-feu autorisant le trafic entrant peut s'appliquer à un ou plusieurs services LoadBalancer. Pour chaque règle de pare-feu d'entrée autorisée que vous créez, définissez les paramètres suivants:

    • Paramètre cible: assurez-vous que la règle de pare-feu inclut au moins tous les nœuds du cluster contenant les services LoadBalancer. Les cibles compatibles dépendent du type de stratégie de pare-feu dans lequel se trouve une règle ou si vous utilisez une règle de pare-feu VPC. Pour en savoir plus sur le paramètre de cible d'une règle dans une stratégie de pare-feu, consultez la section Cibles.

    • Protocoles et ports: incluez tous les protocoles et ports de destination utilisés par les services LoadBalancer auxquels la règle de pare-feu doit s'appliquer.

    • Paramètre de destination: vous pouvez utiliser l'une des stratégies suivantes pour le paramètre de destination:

      • Incluez les adresses IP de tous les services LoadBalancer auxquels la règle de pare-feu doit s'appliquer dans le paramètre de destination. Pour trouver l'adresse IP d'un service LoadBalancer, utilisez la commande suivante:
         kubectl get svc LOADBALANCER_NAME \
            -n NAMESPACE_NAME \
            -o jsonpath='{.status.loadBalancer.ingress[0].ip}
      
      • Vous pouvez choisir d'omettre le paramètre de destination. Lorsque le paramètre de destination est omis, le paramètre de cible définit les destinations implicitement. Pour en savoir plus, consultez la section Cibles et adresses IP pour les règles d'entrée.
    • Paramètre source: spécifiez les sources (par exemple, les adresses IP) utilisées par les clients qui doivent se connecter aux services d'équilibreur de charge auxquels la règle de pare-feu doit s'appliquer.

    Pour savoir comment créer des règles de pare-feu, consultez les articles suivants:

  3. Pour vous assurer que les règles de pare-feu que vous avez créées manuellement fonctionnent correctement, exécutez un test de connectivité du Network Intelligence Center (NIC). Lorsque vous exécutez le test de connectivité:

    • Définissez la destination sur l'adresse IP du service LoadBalancer.
    • Définissez la source sur l'adresse IP du client.

    Pour en savoir plus, consultez Résoudre les problèmes de connectivité.

Désactiver la création de règles de pare-feu VPC pour vos services LoadBalancer

Cette section décrit la procédure à suivre pour désactiver la création automatique de règles de pare-feu VPC pour les services LoadBalancer.

Créer un cluster GKE avec la création de règles de pare-feu VPC désactivée

  1. Pour désactiver les règles de pare-feu VPC créées automatiquement pour les services LoadBalancer dans un cluster nouvellement créé, créez le cluster avec l'indicateur --disable-l4-lb-firewall-reconciliation:

    gcloud

    Autopilot :

    gcloud container clusters create-auto CLUSTER_NAME \
      --disable-l4-lb-firewall-reconciliation \
      --cluster-version=VERSION
    

    Standard:

    gcloud container clusters create CLUSTER_NAME \
      --disable-l4-lb-firewall-reconciliation \
      --enable-l4-ilb-subsetting \
      --cluster-version=VERSION
    

    Remplacez les éléments suivants :

    • CLUSTER_NAME : nom du nouveau cluster
    • VERSION: version de GKE.

    Terraform

    Pour créer un cluster avec la création de règles de pare-feu VPC désactivée à l'aide de Terraform, reportez-vous à l'exemple suivant:

    resource "google_container_cluster" "primary" {
      provider = google-beta
      name = CLUSTER_NAME
      location = ZONE
    
      enable-l4-ilb-subsetting = true
      disable_l4_lb_firewall_reconciliation = true
    }
    
  2. Créez un service LoadBalancer externe ou interne:

  3. Vérifiez que GKE ne crée pas de règle de pare-feu autorisant l'entrée pour le service LoadBalancer. (Les règles de pare-feu d'entrée autorisée créées automatiquement ont des noms de la forme suivante: k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash].)

    La commande suivante ne renvoie rien:

    gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
    

Mettre à jour un cluster GKE existant pour désactiver la création de règles de pare-feu VPC

Avant de désactiver la création de règles de pare-feu VPC, tenez compte des points suivants concernant la mise à jour d'un cluster existant:

  • Lorsque vous mettez à jour un cluster existant pour désactiver la création de règles de pare-feu VPC, GKE ne supprime aucune règle de pare-feu existante créée automatiquement par GKE pour vos services LoadBalancer.
  • GKE arrête de mettre à jour les règles existantes et ne crée plus de règles pour les nouveaux services LoadBalancer.
  • Pour réactiver la création de règles de pare-feu VPC, vous pouvez utiliser l'indicateur --enable-l4-lb-firewall-reconciliation avec la commande gcloud_name container clusters update.

Pour désactiver la création automatique de règles de pare-feu sur un cluster existant:

  1. Mettez à jour le cluster pour désactiver la création et la gestion automatiques des règles de pare-feu pour les services LoadBalancer:

    gcloud container clusters update CLUSTER_NAME \
    --disable-l4-lb-firewall-reconciliation \
    --cluster-version=supported_version
    

    Remplacez les éléments suivants :

    • CLUSTER_NAME : nom du nouveau cluster
    • VERSION: version de GKE.
  2. Créez un service LoadBalancer externe ou interne:

  3. Vérifiez que GKE ne crée pas de règle de pare-feu d'entrée autorisant le trafic entrant pour le service LoadBalancer. (Les règles de pare-feu d'entrée autorisée créées automatiquement portent le nom suivant: k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash].)

    La commande suivante ne renvoie rien:

    gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
    

Résoudre les problèmes de connectivité

Les exemples suivants illustrent comment utiliser les tests de connectivité de Network Intelligence Center pour tester la connectivité à un cluster LoadBalancer Service externe :

  • Network Intelligence Center:

    1. Dans la console Google Cloud, accédez au Network Intelligence Center et lancez un nouveau test de connectivité.
    2. Dans le menu déroulant, sélectionnez Toute adresse IP publique externe comme source, puis votre équilibreur de charge dans la destination.
    3. Réexécutez le test de connectivité.
  • gcloud CLI :

    L'exemple de commande suivant crée et exécute un test avec l'adresse IP publique de votre station de travail locale comme source et l'adresse IP externe de l'équilibreur de charge externe comme destination:

    gcloud network-management connectivity-tests create TEST_NAME \
    --source-ip-address=SOURCE_IP_ADDRESS \
    --source-network-type=NON_GCP_NETWORK \
    --destination-ip-address=$(kubectl get svc LOADBALANCER_NAME -o jsonpath='{.status.loadBalancer.ingress[0].ip}') \
    --destination-port=$(kubectl get svc LOADBALANCER_NAME -o jsonpath='{.spec.ports[0].targetPort}') \
    --destination-network=projects/PROJECT_ID/global/networks/NETWORK_NAME
    

    Remplacez les éléments suivants :

    • TEST_NAME: nom du test de connectivité.
    • SOURCE_IP_ADDRESS: adresse IP du système qui doit se connecter au service LoadBalancer externe. Exemple :
    • LOADBALANCER_NAME: nom du service LoadBalancer externe.
    • PROJECT_ID: ID du projet qui contient le réseau VPC du cluster. Si votre cluster utilise un réseau VPC partagé, utilisez l'ID du projet hôte.
    • NETWORK_NAME: nom du réseau VPC de votre cluster.

    Vérifiez les résultats du test:

    gcloud network-management connectivity-tests describe TEST_NAME
    

Étape suivante