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 autorisant le trafic entrant que GKE crée pour les services LoadBalancer.

La désactivation de 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 le flag --disable-l4-lb-firewall-reconciliation lorsque vous créez ou mettez à jour un cluster. Le flag --disable-l4-lb-firewall-reconciliation n'a pas d'incidence sur les autres règles de pare-feu VPC créées automatiquement, telles que celles facilitant la communication entre les nœuds ou celles autorisant 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 est compatible avec la désactivation de 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 la gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la gcloud components update commande. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.

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 la sécurité pour élaborer une stratégie de configuration manuelle des règles de pare-feu.

  1. Choisissez 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 mondiale ou une stratégie de pare-feu réseau régionale. Pour savoir comment créer une stratégie de pare-feu, consultez les pages suivantes :

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

  2. Les règles de pare-feu que vous créez manuellement doivent être des règles autorisant le trafic entrant, car la règle de pare-feu implicite refusant le trafic entrant rule 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 autorisant le trafic entrant qui correspondent 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 autorisant le trafic entrant que vous créez, définissez les paramètres suivants :

    • Paramètre de cible : assurez-vous que la règle de pare-feu inclut au moins tous les nœuds de le cluster contenant les services LoadBalancer. Les cibles compatibles dépendent du type de stratégie de pare-feu dans laquelle 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, exécutez 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 implicitement les destinations. 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 LoadBalancer auxquels la règle de pare-feu doit s'appliquer.

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

  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é 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 la section Résoudre les problèmes de connectivité issues.

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

Cette section décrit les étapes à 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 le flag --disable-l4-lb-firewall-reconciliation :

    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
  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 le trafic entrant pour le service LoadBalancer. (Les règles de pare-feu autorisant le trafic entrant créées automatiquement ont des noms au format suivant : k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash].)

    La commande suivante renvoie une liste de règles de pare-feu contenant k8s2 :

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

    La réponse ne doit renvoyer que la règle de pare-feu de vérification de l'état au format k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw si le paramètre externalTrafficPolicy est défini sur Local. Il utilise le port TCP défini par le paramètre spec.healthCheckNodePort. Si aucune valeur n'est spécifiée, le plan de contrôle Kubernetes attribue un port de vérification de l'état à partir de la plage de ports du nœud.

    k8s2-rkdld6go-default-ilb-svc-dluvsefq-fw  default  INGRESS  1000  tcp:30868  False
    

    Si le paramètre externalTrafficPolicy est défini sur Cluster, la règle de pare-feu de vérification de l'état suivante est renvoyée à la place.

    k8s2-rkdld6go-l4-shared-hc-fw  default  INGRESS  1000  tcp:10256  False
    

    Pour en savoir plus sur les règles de pare-feu générées pour les services GKE, consultez la section Règles de pare-feu créées automatiquement.

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 que GKE a créée automatiquement pour vos services LoadBalancer.
  • GKE cesse de mettre à jour les règles existantes et n'en crée pas de nouvelles pour les nouveaux services LoadBalancer.
  • Pour réactiver la création de règles de pare-feu VPC, vous pouvez utiliser le --enable-l4-lb-firewall-reconciliation flag avec la gcloud_name container clusters update commande.

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 autorisant le trafic entrant pour le service LoadBalancer. (Les règles de pare-feu autorisant le trafic entrant créées automatiquement ont des noms au format suivant : k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash].)

    La commande suivante renvoie une liste de règles de pare-feu contenant k8s2 :

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

    La réponse ne doit renvoyer que la règle de pare-feu de vérification de l'état au format k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw si le paramètre externalTrafficPolicy est défini sur Local. Il utilise le port TCP défini par le paramètre spec.healthCheckNodePort. Si aucune valeur n'est spécifiée, le plan de contrôle Kubernetes attribue un port de vérification de l'état à partir de la plage de ports du nœud.

    k8s2-rkdld6go-default-ilb-svc-dluvsefq-fw  default  INGRESS  1000  tcp:30868  False
    

    Si le paramètre externalTrafficPolicy est défini sur Cluster, la règle de pare-feu de vérification de l'état suivante est renvoyée à la place.

    k8s2-rkdld6go-l4-shared-hc-fw  default  INGRESS  1000  tcp:10256  False
    

    Pour en savoir plus sur les règles de pare-feu générées pour les services GKE, consultez la section Règles de pare-feu créées automatiquement.

Résoudre les problèmes de connectivité

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

  • Network Intelligence Center:

    1. Dans la Cloud de Confiance console, accédez à Network Intelligence Center et démarrez un nouveau test de connectivité.
    2. Dans le menu déroulant, choisissez N'importe quelle adresse IP publique externe comme source et sélectionnez votre équilibreur de charge comme destination.
    3. Exécutez à nouveau 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 poste de travail local 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 contenant 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