Sous-réseaux d'équilibreur de charge

Cette page décrit comment GKE sur AWS fonctionne avec AWS pour choisir les sous-réseaux des équilibreurs de charge du Service et comment ajouter des tags aux sous-réseaux pour la découverte automatique lors de la création de l'équilibreur de charge du Service.

Pourquoi spécifier des sous-réseaux ?

Lors de la création d'équilibreurs de charge, AWS doit savoir dans quels sous-réseaux les placer. Le sous-réseau détermine les zones de disponibilité, les adresses IP et les points de terminaison de l'équilibreur de charge.

Normalement, les équilibreurs de charge sont alloués à un sous-réseau pour chaque zone de disponibilité contenant un pool de nœuds. AWS nécessite au moins un sous-réseau pour créer un équilibreur de charge réseau (NLB) et au moins deux sous-réseaux pour un équilibreur de charge d'application (ALB).

Tous les sous-réseaux AWS sont soit publics (avec des adresses IP publiques et une route vers la passerelle Internet du VPC), soit privés (sans ces fonctionnalités). Les équilibreurs de charge Web doivent être situés sur des sous-réseaux publics. Les équilibreurs de charge internes peuvent résider sur des sous-réseaux publics ou privés.

Si aucun sous-réseau avec tag n'est disponible

Si GKE sur AWS doit créer un équilibreur de charge et qu'aucun sous-réseau avec tag n'est disponible ou n'a pas de capacité suffisante, il peut créer l'équilibreur de charge dans un autre sous-réseau. Pour éviter cela et contrôler les sous-réseaux dans lesquels vos équilibreurs de charge sont placés, vous devez ajouter un tag à tous vos sous-réseaux.

Détection automatique de sous-réseaux

GKE sur AWS détecte automatiquement les sous-réseaux à utiliser pour un équilibreur de charge en répertoriant tous les sous-réseaux du VPC et en sélectionnant jusqu'à un sous-réseau dans chaque zone de disponibilité.

Pour que GKE sur AWS détecte automatiquement un sous-réseau, celui-ci doit:

  • Être étiqueté avec kubernetes.io/role/elb (pour un équilibreur de charge Web)
  • Être associé au tag kubernetes.io/role/internal-elb (pour un équilibreur de charge interne)
  • Ne contenir aucun tag avec le préfixe kubernetes.io/cluster/ ou contenir le tag kubernetes.io/cluster/CLUSTER_UID, où CLUSTER_UID est l'ID unique du cluster actuel

En outre, un sous-réseau destiné à être utilisé avec un équilibreur de charge Internet doit disposer d'une route vers la passerelle Internet du VPC.

Si plusieurs sous-réseaux d'une zone de disponibilité répondent aux exigences de l'équilibreur de charge, GKE sur AWS classe les sous-réseaux par ordre d'ID de sous-réseau.

Ajouter des tags aux sous-réseaux pour l'utilisation prévue

Pour que GKE sur AWS détecte automatiquement un sous-réseau pour un équilibreur de charge, vous devez appliquer l'un des deux tags au sous-réseau pour signaler sa disponibilité. Il s'agit des suivants :

  • kubernetes.io/role/elb : appliquez ce tag à votre sous-réseau pour le marquer comme disponible pour un équilibreur de charge Web. Il doit s'agir d'un sous-réseau public avec une route vers la passerelle Internet de votre VPC. Définissez le tag sur 1. Pour appliquer ce tag, exécutez la commande suivante :

    aws ec2 create-tags \
      --resources SUBNET_ID \
      --tags "Key=kubernetes.io/role/elb,Value=1"
    
  • kubernetes.io/role/internal-elb : appliquez ce tag à votre sous-réseau pour le marquer comme disponible pour un équilibreur de charge interne. Définissez la valeur du tag sur 1. Pour appliquer ce tag, exécutez la commande suivante :

    aws ec2 create-tags \
      --resources SUBNET_ID \
      --tags Key=kubernetes.io/role/internal-elb,Value=1
    

Remplacez les éléments suivants :

  • SUBNET_ID : ID du sous-réseau auquel vous ajoutez un tag

Après avoir attribué un tag kubernetes.io/role à votre sous-réseau, vous pouvez également lui attribuer un ou plusieurs tags kubernetes.io/cluster/CLUSTER_UID, où CLUSTER_UID correspond à l'UID d'un cluster GKE sur AWS. Cela empêche les clusters non répertoriés dans l'un de ces tags de détecter automatiquement le sous-réseau à utiliser par ses équilibreurs de charge.

Consultez la documentation d'Amazon sur la commande aws ec2 create-tags pour plus d'informations sur la commande aws ec2 create-tags.

Dépannage

Le problème le plus courant lié à la configuration de l'équilibreur de charge consiste à ajouter des tags incorrects aux sous-réseaux. L'algorithme de détection automatique peut alors sélectionner les mauvais sous-réseaux. Pour diagnostiquer et résoudre ce problème, procédez comme suit :

  • Si vous créez un équilibreur de charge Internet, assurez-vous qu'il existe au moins un sous-réseau public dans chacune des zones de disponibilité contenant un pool de nœuds, et que les sous-réseaux sont dotés du tag kubernetes.io/role/elb.

  • Si vous créez un équilibreur de charge interne, assurez-vous qu'il existe au moins un sous-réseau dans chacune des zones de disponibilité contenant un pool de nœuds, et que les sous-réseaux sont dotés du tag kubernetes.io/role/internal-elb.

  • Vérifiez si les sous-réseaux que vous souhaitez détecter automatiquement comportent des tags au format kubernetes.io/cluster/CLUSTER_UID. Si un sous-réseau comporte de tels tags désignant un cluster, il ne peut être détecté automatiquement que par les clusters désignés. Pour résoudre ce problème, supprimez tous les tags de nom de cluster (pour permettre au sous-réseau d'être détecté automatiquement depuis n'importe quel cluster) ou ajoutez un tag de nom de cluster avec votre UID de cluster GKE sur AWS et une valeur de shared.

  • Vérifiez l'historique des événements Kubernetes à l'aide de la commande suivante :

    kubectl get events -A | grep LoadBalancer
    

    Par exemple, le message d'événement could not find any suitable subnets for creating the ELB indique qu'aucun sous-réseau n'a pu être détecté automatiquement. Si vous recevez cet avertissement, assurez-vous que vos sous-réseaux et leurs tags sont corrects et complets.

  • Pour répertorier les sous-réseaux pouvant être détectés automatiquement pour les équilibreurs de charge Web, exécutez la commande suivante :

    aws ec2 describe-subnets \
      --filters "Name=vpc-id,Values=VPC_ID" "Name=tag:kubernetes.io/role/elb,Values=*"
    

    Remplacez VPC_ID par l'ID de votre VPC.

  • Pour répertorier les sous-réseaux pouvant être détectés automatiquement pour les équilibreurs de charge internes, exécutez la commande suivante :

    aws ec2 describe-subnets \
      --filters "Name=vpc-id,Values=VPC_ID" "Name=tag:kubernetes.io/role/internal-elb,Values=*"
    

Étapes suivantes