NCP créera un serveur virtuel et un pool d'équilibreur de charge de couche 4 pour chaque port de service.

Détails de cette fonctionnalité :
  • TCP et UDP sont pris en charge.
  • Chaque service aura une adresse IP unique.
  • Une adresse IP est allouée au service à partir d'un pool d'adresses IP externe basé sur le champ loadBalancerIP dans la définition LoadBalancer. Le champ loadBalancerIP peut être vide, avoir une adresse IP ou le nom ou l'ID d'un pool d'adresses IP. Si le champ loadBalancerIP est vide, l'adresse IP est allouée à partir du pool d'adresses IP externe spécifié par l'option external_ip_pools_lb dans la section [nsx_v3] de ncp.ini. Si l'option external_ip_pools_lb n'existe pas, le pool spécifié par external_ip_pools est utilisé. Le service de LoadBalancer est exposé sur cette adresse IP et sur le port de service.
  • Vous pouvez spécifier un pool d'adresses IP différent en modifiant la configuration et en redémarrant NCP.
  • Le pool d'adresses IP spécifié par loadBalancerIP doit avoir la balise scope: ncp/owner, tag: cluster:<cluster_name>.

  • En mode de stratégie, un service de type LoadBalancer sans sélecteur est pris en charge. Pour un tel service, l'adresse IP SNAT de l'équilibreur de charge NSX est l'adresse IP du service de type LoadBalancer. L'adresse IP SNAT de l'équilibreur de charge NSX sera mise à jour si vous mettez à jour l'adresse IP du service de type LoadBalancer. Notez qu'un service sans sélecteur ne peut pas être configuré comme point de terminaison d'un autre service sans sélecteur.
  • Dans le mode Stratégie, vous pouvez définir l'annotation ncp/transparent-lb sur true pour désactiver SNAT sur le pool d'équilibreur de charge. Cette fonctionnalité est uniquement prise en charge dans une topologie à un seul niveau.
  • NSX présente par défaut des limites sur le nombre de serveurs virtuels, de pools de serveurs et de membres du pool pour un équilibreur de charge. Vous pouvez contourner ces limites en définissant [nsx_v3] relax_scale_validation sur true.
  • Par défaut, NCP n'applique pas la limite pour le nombre de membres du pool à tous les équilibreurs de charge. Vous pouvez modifier ce comportement avec le paramètre [nsx_v3] ncp_enforced_pool_member_limit. Cette fonctionnalité est uniquement prise en charge en mode Stratégie et nécessite que le paramètre [nsx_v3] l4_lb_auto_scaling soit défini sur false. Pour ncp_enforced_pool_member_limit, les options sont les suivantes :
    • DEACTIVATE : NCP n'applique pas la limite de membres du pool.
    • ACTIVATE : NCP applique la limite de membres du pool pour empêcher que des équilibreurs de charge utilisent trop de CPU ou de mémoire. Notez que si le paramètre relax_scale_validation est défini sur false et que members_per_small_lbs ou members_per_medium_lbs est défini sur une valeur supérieure à la limite d'échelle de NSX, l'échelle NSX sera appliquée, ce qui rend cette configuration inutile.
  • Les erreurs sont annotées dans un service. L'erreur clé est ncp/error.loadbalancer. Les erreurs possibles sont :
    • ncp/error.loadbalancer : IP_POOL_NOT_FOUND

      Cette erreur indique que vous spécifiez loadBalancerIP : <nsx-ip-pool> mais <nsx-ip-pool> n'existe pas. Le service sera inactif. Pour corriger l'erreur, spécifiez un pool d'adresses IP valide, supprimez et recréez le service.

    • ncp/error.loadbalancer : IP_POOL_EXHAUSTED

      Cette erreur indique que vous spécifiez loadBalancerIP : <nsx-ip-pool> mais le pool d'adresses IP a épuisé ses adresses IP. Le service sera inactif. Pour corriger l'erreur, spécifiez un pool d'adresses IP ayant des adresses IP disponibles, supprimez et recréez le service.

    • ncp/error.loadbalancer : IP_POOL_NOT_UNIQUE

      Cette erreur indique que plusieurs pools d'adresses IP portent le nom spécifié par loadBalancerIP : <nsx-ip-pool>. Le service sera inactif.

    • ncp/error.loadbalancer : POOL_ACCESS_DENIED

      Cette erreur indique que le pool d'adresses IP spécifié par loadBalancerIP n'a pas la balise scope: ncp/owner, tag: cluster:<cluster_name> ou le cluster spécifié dans la balise ne correspond pas au nom du cluster Kubernetes.

    • ncp/error.loadbalancer : LB_VIP_CONFLICT

      Cette erreur indique que l'adresse IP dans le champ loadBalancerIP est la même que celle d'un service actif. Le service sera inactif.

  • L'équilibreur de charge de couche 4 prend en charge la mise à l'échelle automatique. Si un service LoadBalancer Kubernetes est créé ou modifié pour qu'il requiert des serveurs virtuels supplémentaires et que l'équilibreur de charge de couche 4 existant n'a pas la capacité, un nouvel équilibreur de charge de couche 4 sera créé. NCP supprimera également les équilibreurs de charge de couche 4 qui n'ont plus aucun serveur virtuel associé. Cette fonctionnalité est activée par défaut. Si vous souhaitez désactiver cette fonctionnalité, vous devez définir l4_lb_auto_scaling sur false dans le ConfigMap de NCP.
  • Lorsque vous créez un service de type LoadBalancer, vous pouvez spécifier le paramètre loadBalancerSourceRanges. Cette fonctionnalité n'est prise en charge qu'en mode de stratégie. Par exemple :
    kind: Service
    metadata:
      name: nginx-service-lb
      labels:
        app: nginx
    spec:
      type: LoadBalancer
      loadBalancerSourceRanges:
        - "10.30.88.116/24"
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
          name: tcp
    ...

    L'équilibreur de charge NSX qui est créé autorise uniquement le trafic provenant des adresses IP sources spécifiées. Vous pouvez vérifier cela dans NSX Manager en examinant le Contrôle de liste d'accès du serveur virtuel. Il permet d'accéder à un groupe spécifique. Ce groupe contiendra les adresses IP spécifiées dans loadBalancerSourceRanges. Vous pouvez consulter ce groupe en accédant à Inventaire > Groupes.