Configurer l'équilibrage de charge TCP/UDP


Présentation

Vous pouvez créer un équilibreur de charge TCP/UDP en créant un service avec type: LoadBalancer dans sa spécification. Cette page décrit les paramètres que vous pouvez utiliser pour configurer les services LoadBalancer. Pour plus d'informations spécifiques aux équilibreurs de charge internes, consultez la page Utiliser un équilibreur de charge réseau interne à stratégie directe. Pour plus d'informations spécifiques aux équilibreurs de charge externes, consultez la page Exposer des applications à l'aide de services.

Paramètres de l'objet Service

Les paramètres suivants sont compatibles avec les services LoadBalancer de Google Kubernetes Engine (GKE).

Caractéristique Résumé Champ de service Compatibilité de la version de GKE
Règle de trafic interne Permet aux restrictions de trafic interne de n'acheminer que le trafic interne vers les points de terminaison du nœud d'origine du trafic. Ce paramètre n'est pas compatible avec les clusters exécutant GKE Dataplane V2. spec:internalTrafficPolicy GKE 1.22+
Règle de trafic externe Détermine si la charge du trafic externe est équilibrée ou non sur les nœuds GKE. spec:externalTrafficPolicy GKE 1.14+ (1.23.4-gke.400+ pour le pool de nœuds Windows)
Plages sources d'équilibreur de charge Configure des règles de pare-feu facultatives dans GKE et dans le VPC pour n'autoriser que certaines plages sources. spec:loadBalancerSourceRanges Toutes les versions compatibles
Adresse IP d'équilibreur de charge Spécifie une adresse IP pour les équilibreurs de charge. spec:loadBalancerIP Toutes les versions compatibles
Tous les ports Permet à l'équilibreur de charge TCP/UDP de transférer tous les ports plutôt que des ports spécifiques Non disponible Pour les équilibreurs de charge réseau internes à stratégie directe, compatible avec le sous-paramètre. Pour les équilibreurs de charge externes, cette fonctionnalité est compatible avec toutes les versions.
Niveaux de service réseau Indiquez le niveau de réseau qu'un équilibreur de charge Google Cloud doit utiliser. Les valeurs valides sont Standard et Premium (par défaut). metadata:annotations:cloud.google.com/network-tier GKE 1.19+

Règle de trafic externe

externalTrafficPolicy est une option de l'objet Service standard qui définit comment et si la charge du trafic entrant sur un nœud GKE est équilibrée. Cluster est la règle par défaut, mais Local est souvent utilisée pour conserver l'adresse IP source du trafic entrant dans un nœud de cluster. En effet, Local désactive l'équilibrage de charge sur le nœud du cluster afin que le trafic reçu par un pod local voie l'adresse IP source d'origine.

externalTrafficPolicy est compatible avec les services LoadBalancer internes (via l'équilibreur de charge TCP/UDP), mais le comportement de l'équilibrage de charge dépend de l'origine du trafic et de la règle de trafic configurée.

Le trafic provenant de l'extérieur du cluster vers un équilibreur de charge TCP/UDP présente le comportement suivant s'il y a au moins un pod opérationnel du service dans le cluster :

  • Règle Cluster : la charge du trafic sera équilibrée sur n'importe quel nœud GKE opérationnel du cluster, puis le service kube-proxy l'enverra à un nœud avec le pod.
  • Règle Local : les nœuds qui ne possèdent pas l'un des pods de backend apparaissent comme non opérationnels vers l'équilibreur de charge TCP/UDP. Le trafic ne sera envoyé qu'à l'un des nœuds de cluster opérationnels restants qui disposent du pod. Le trafic n'est pas acheminé à nouveau par le service kube-proxy et sera envoyé directement au pod local avec ses informations d'en-tête d'adresse IP intactes.

Si le trafic vers une adresse IP de service LoadBalancer donnée provient d'un nœud GKE à l'intérieur du cluster, son comportement est différent. Le tableau suivant récapitule le comportement du trafic provenant d'un nœud ou d'un pod à l'intérieur du cluster et destiné à un pod membre d'un service LoadBalancer :

externalTrafficPolicy Le pod membre de l'objet Service s'exécute-t-il sur le même nœud que celui d'où provient le trafic ? Comportement du trafic
Cluster Oui Les paquets sont transmis à tout pod membre, soit sur le même nœud, soit sur un nœud différent.
Cluster Non Les paquets sont transmis à tout pod membre, qui doit se trouver sur un nœud différent.
Local Oui Les paquets sont transmis à tout pod membre sur le même nœud.
Local Non

Kubernetes 1.14 et versions antérieures : les paquets sont supprimés.

Kubernetes 1.15 et versions ultérieures : les paquets sont transmis à tout pod membre, qui doit se trouver sur un nœud différent.

Plages sources d'équilibreur de charge

Le tableau spec: loadBalancerSourceRanges spécifie une ou plusieurs plages d'adresses IP internes ou externes. loadBalancerSourceRanges limite le trafic qui transite par l'équilibreur de charge aux adresses IP spécifiées dans ce champ. Avec cette configuration, kube-proxy crée les règles iptables correspondantes dans les nœuds Kubernetes. GKE crée également automatiquement une règle de pare-feu dans votre réseau VPC. Si vous omettez de renseigner ce champ, votre objet Service accepte le trafic provenant de n'importe quelle adresse IP (0.0.0.0/0).

Pour en savoir plus sur la spécification de l'objet Service, consultez la documentation de référence de l'API Service.

Adresse IP d'équilibreur de charge

Le paramètre spec: loadBalancerIP vous permet de choisir une adresse IP spécifique pour l'équilibreur de charge. L'adresse IP ne doit pas être en cours d'utilisation par un autre service ou équilibreur de charge réseau interne à stratégie directe. Par défaut, une adresse IP éphémère est attribuée. Pour plus d'informations, consultez la page Réserver une adresse IP interne statique.

Si l'adresse IP dans spec: loadBalancerIP est une adresse IP de niveau standard, l'annotation cloud.google.com/network-tier avec la valeur Standard est obligatoire, car Google Kubernetes Engine doit créer une règle de transfert avec le même niveau de réseau que l'adresse IP spécifiée. Depuis Google Kubernetes Engine 1.17+, le niveau de réseau par défaut pour la création de règles de transfert est Premium, quel que soit le niveau de réseau par défaut du projet.

Tous les ports

Le contrôleur GKE définit automatiquement le champ "allPorts" dans la règle de transfert si la spécification de service comporte au moins cinq ports dans les versions 1.20.6 et ultérieures, ou les versions 1.21 et ultérieures, de GKE. Ce comportement est également disponible dans les versions 1.18 et ultérieures de GKE, ainsi que dans les versions 1.19 et ultérieures si vous activez le sous-paramètre d'équilibreur de charge réseau interne à stratégie directe sur le cluster.

Si vous créez manuellement un équilibreur de charge réseau interne à stratégie directe, vous pouvez choisir le groupe d'instances de vos nœuds Google Kubernetes Engine comme backend. Les services Kubernetes de type: NodePort sont disponibles via l'équilibreur de charge réseau interne à stratégie directe.

Niveaux de service réseau

L'annotation cloud.google.com/network-tier spécifie le niveau de service réseau à utiliser pour la règle de transfert externe et l'adresse IP dans les versions 1.19 et ultérieures de GKE. Standard et Premium sont des valeurs valides. La valeur par défaut est Premium.

Cette annotation n'est compatible qu'avec les équilibreurs de charge externes.

Étape suivante