Cette page décrit les exigences liées à l'équilibrage de charge lorsque vous utilisez l'équilibrage de charge manuel. Contrairement à l'équilibrage de charge groupé, où GKE sur Bare Metal déploie des équilibreurs de charge sur les nœuds de cluster pour le trafic des plans de contrôle et de données, l'équilibrage de charge manuel vous permet de configurer vos propres solutions d'équilibrage de charge pour le trafic des plans de contrôle et des plans de données.
Vous devez configurer un équilibreur de charge externe pour le plan de contrôle avant de créer un cluster Bare Metal. L'équilibreur de charge du plan de contrôle externe peut également être utilisé pour le trafic du plan de données, ou vous pouvez configurer un équilibreur de charge distinct pour le plan de données. Par exemple, vous pouvez utiliser un équilibreur de charge à l'intérieur du cluster comme MetalLB pour le trafic du plan de données.
Cette page fournit une description des exigences de l'équilibrage de charge, mais explique également comment configurer l'équilibrage de charge manuel à l'aide de F5 BIG-IP.
Prérequis
Les sections suivantes décrivent les conditions préalables à la configuration de l'équilibrage de charge manuel.
Adresse IP requise
Vous devez planifier vos adresses IP virtuelles avant de créer un cluster. Tous les clusters nécessitent une adresse IP virtuelle pour le plan de contrôle. Tous les clusters d'utilisateur ont besoin d'une deuxième adresse IP virtuelle pour le service d'entrée.
Ces adresses IP virtuelles peuvent se trouver dans n'importe quel sous-réseau routable IPv4 de l'équilibreur de charge. L'adresse IP virtuelle du plan de contrôle doit être accessible depuis tous les nœuds de cluster et depuis le poste de travail administrateur sur lequel vous exécutez bmctl
.
Lorsque vous créez le cluster, le service d'entrée est déployé à l'aide de l'adresse IP virtuelle que vous spécifiez dans le fichier de configuration de cluster. Vous pouvez configurer l'équilibrage de charge pour cette adresse IP après la création du cluster.
Vous devez connaître les adresses IP que vous utiliserez pour les nœuds qui seront utilisés comme nœuds de plan de contrôle.
Exigences de l'équilibreur de charge du plan de contrôle externe
L'équilibreur de charge du plan de contrôle doit être configuré avant de créer le cluster. L'équilibreur de charge du plan de contrôle doit répondre aux exigences suivantes :
- Un service virtuel (interface) pour l'adresse IP virtuelle du plan de contrôle. Le port d'écoute par défaut du plan de contrôle est 443. Toutefois, si vous spécifiez un autre port, le champ
loadBalancer.ports.controlPlaneLBPort
du fichier de configuration de cluster utilise ce port pour le service virtuel. - Un groupe backend contenant toutes les adresses IP des nœuds du plan de contrôle du cluster. Le port backend sur lequel le plan de contrôle écoute est 6444.
- Une vérification de l'état qui surveille les nœuds de backend. La vérification de l'état doit utiliser HTTPS et vérifier le point de terminaison
/readyz
sur le port 6444. La vérification de l'état doit vérifier que ce point de terminaison renvoie le code d'état 200 pour considérer que l'état du nœud est "sain".
Si l'équilibreur de charge externe n'est pas configuré correctement, l'amorçage du cluster risque d'échouer. Une vérification préalable vérifie que l'équilibreur de charge externe est correctement configuré, et qu'il vérifie l'état du point de terminaison /readyz
.
Réinitialiser les connexions à des nœuds défaillants (recommandé)
Outre les exigences précédentes, nous vous recommandons de configurer l'équilibreur de charge pour réinitialiser les connexions client lorsqu'il détecte une défaillance du nœud de backend. Sans cette configuration, les clients du serveur d'API Kubernetes peuvent arrêter de répondre pendant plusieurs minutes lorsqu'une instance de serveur tombe en panne, ce qui peut provoquer une instabilité au niveau du plan de contrôle Kubernetes.
- Avec F5 BIG-IP, ce paramètre s'appelle Action On Service Down sur la page de configuration du pool de backend.
- Avec HAProxy, ce paramètre est appelé "on-marked-down shutdown-sessions" dans la configuration du serveur backend.
- Si vous utilisez un autre équilibreur de charge, consultez la documentation pour trouver le paramètre équivalent.
Configurer le cluster
Avant de créer un cluster GKE sur Bare Metal, vous devez créer un fichier de configuration de cluster avec bmctl
. Modifiez ce fichier pour activer l'équilibrage de charge manuel dans le cluster:
- Définissez le champ
loadBalancer.mode
surmanual
. - Définissez le champ
loadBalancer.vips.controlPlaneVIP
sur l'adresse IP virtuelle que vous avez configurée sur l'équilibreur de charge. - Supprimez ou passez en commentaire la section
loadBalancer.addressPools
.
Une fois que vous avez fini de modifier le fichier de configuration, y compris les champs non liés à l'équilibrage de charge, vérifiez que l'adresse IP virtuelle du plan de contrôle est correctement configurée sur l'équilibreur de charge en exécutant les vérifications préalables :
bmctl check preflight -c CLUSTER_NAME
Remplacez CLUSTER_NAME
par le nom du cluster.
Compatibilité avec les services LoadBalancer dans les clusters d'utilisateur
Vous devez configurer l'équilibrage de charge pour qu'il soit compatible avec les services d'équilibrage de charge Kubernetes. En mode d'équilibrage de charge manuel, GKE sur Bare Metal ne provisionne pas automatiquement les équilibreurs de charge. Les services LoadBalancer ne fonctionnent donc pas, sauf si vous provisionnez et configurez des équilibreurs de charge pour qu'ils pointent vers les services.
De plus, GKE sur Bare Metal déploie automatiquement un service d'entrée dans tous les clusters d'utilisateur à l'aide d'un service LoadBalancer. Pour être accessible depuis l'extérieur, ce service LoadBalancer nécessite un équilibreur de charge configuré pour pointer vers le service.
Les options permettre l'utilisation des services LoadBalancer sont les suivantes :
- Configurer manuellement l'équilibreur de charge pour chaque service LoadBalancer du cluster. Consultez la section Configurer la compatibilité avec les services LoadBalancer pour obtenir un exemple d'utilisation de F5 BIG-IP.
- Installer un contrôleur d'équilibreur de charge dans le cluster, qui configure l'équilibreur de charge externe lors de la création des services LoadBalancer.
- Installer une solution d'équilibrage de charge au sein du cluster, telle que MetalLB.
Équilibrage de charge manuel avec F5 BIG-IP
Cette section explique comment configurer l'équilibrage de charge manuel avec F5 BIG-IP en tant qu'équilibreur de charge externe. Si vous utilisez un autre équilibreur de charge, consultez la documentation concernant cet équilibreur de charge et suivez ces étapes en tant que modèle.
Configurer l'équilibreur de charge du plan de contrôle
Vous devez configurer l'équilibreur de charge du plan de contrôle avant de créer un cluster. Une fois ces étapes effectuées, vous pouvez configurer votre cluster et le créer.
Créer une partition pour votre cluster
Chaque cluster doit posséder sa propre partition. Utilisez l'utilitaire de configuration BIG-IP pour créer une partition :
- Accédez à Système > Utilisateurs > Liste des partitions.
- Cliquez sur Créer.
- Saisissez un nom pour la partition.
- Cliquez sur Terminé.
Au cours des étapes suivantes, vous allez créer des objets dans cette partition. Assurez-vous que cette partition est sélectionnée dans le menu déroulant situé dans l'angle supérieur droit de l'UI pour chacune des tâches suivantes, afin que chaque objet soit créé dans cette partition.
Créer une surveillance
Créez une surveillance pour effectuer des vérifications de l'état sur les nœuds du plan de contrôle :
- Accédez à Trafic local > Surveillances.
- Cliquez sur Créer.
- Saisissez un nom pour la surveillance (par exemple, https_readyz).
- Définissez le Type sur HTTPS.
- Pour Chaîne d'envoi, saisissez
GET /readyz HTTP/1.1\r\nHost: \r\nConnection: close
. - Pour Chaîne de réception, saisissez
HTTP/1.1 200
. - Cliquez sur Terminé.
Créer des nœuds
Créez un nœud qui pointe vers les nœuds du plan de contrôle. Si votre cluster possède un plan de contrôle de haute disponibilité (HA) avec plusieurs nœuds de plan de contrôle, créez un objet de nœud pour chaque nœud du plan de contrôle.
- Accédez à Trafic local > Nœuds > Liste des nœuds.
- Cliquez sur Créer.
- Saisissez un nom pour le nœud.
- Saisissez l'adresse IP du nœud dans le champ "Adresse".
- Cliquez sur Terminé.
Créer un pool de backend
Créez un pool pour les nœuds du plan de contrôle :
- Accédez à Trafic local > Pools > Liste des pools.
- Cliquez sur Créer.
- Sélectionnez Avancé dans la liste déroulante Configuration.
- Attribuez un nom au pool.
- Sélectionnez la surveillance d'état créée précédemment.
- Définissez Action On Service Down sur Rejeter (consultez les informations relatives à ce paramètre dans la section Réinitialiser les connexions à des nœuds défaillants).
- Ajoutez le nœud du plan de contrôle au pool. Si votre cluster comporte plusieurs nœuds de plan de contrôle, répétez ces étapes pour chaque nœud :
- Dans la section Nouveaux membres, cliquez sur Liste des nœuds, puis sélectionnez le nœud du plan de contrôle créé précédemment.
- Dans le champ Port du service, saisissez 6444.
- Cliquez sur Ajouter.
Créer un serveur virtuel
Créez un serveur virtuel pour le plan de contrôle :
- Accédez à Trafic local > Serveurs virtuels > Liste des serveurs virtuels.
- Cliquez sur Créer.
- Saisissez un nom pour le serveur virtuel.
- Définissez le Type sur Standard.
- Saisissez 0.0.0.0/0 dans le champ Adresse source pour autoriser le trafic depuis n'importe quelle source.
- Saisissez l'adresse IP virtuelle du plan de contrôle en tant qu'adresse de destination.
- Saisissez le port du plan de contrôle dans le champ Port du service. La valeur par défaut est 443, mais elle est configurable et doit correspondre à ce que vous configurez dans la configuration de votre cluster pour
loadBalancer.ports.controlPlaneLBPort
. - Dans le champ Traduction d'adresse source, sélectionnez Carte automatique.
- Dans Pool par défaut, sélectionnez le pool créé précédemment dans la liste déroulante.
- Cliquez sur Terminé.
Configurer la compatibilité des services LoadBalancer
En mode d'équilibrage de charge manuel, GKE sur Bare Metal ne provisionne pas automatiquement les équilibreurs de charge pour les services LoadBalancer. Pour en savoir plus, consultez la section Compatibilité avec les services LoadBalancer dans les clusters d'utilisateur.
Cette section explique comment configurer manuellement un équilibreur de charge F5 BIG-IP pour un service LoadBalancer. Répétez ces étapes pour chaque service LoadBalancer que vous souhaitez exposer.
Prérequis
Pour configurer un service LoadBalancer, vous devez connaître l'adresse IP virtuelle que vous souhaitez exposer via l'équilibreur de charge, le port sur lequel vous souhaitez l'exposer et le NodePort utilisé par le service LoadBalancer dans Kubernetes.
Après avoir déployé un service LoadBalancer dans votre cluster, déterminez le NodePort utilisé pour le service LoadBalancer. La commande suivante affiche les ports du service :
kubectl --kubeconfig KUBECONFIG get service SERVICE_NAME -oyaml
Remplacez les éléments suivants :
KUBECONFIG
par le chemin d'accès au fichier kubeconfig à utiliser.SERVICE_NAME
par le nom du service LoadBalancer.
La sortie de kubctl get service
inclut une section ports
. Chaque entrée de port indique le nodePort exposé pour le port sur le service, et ce nodePort est l'élément vers lequel vous configurez le backend de l'équilibreur de charge pour qu'il pointe. L'exemple de résultat suivant montre la structure de la section ports
:
spec:
clusterIP: 172.26.232.107
externalTrafficPolicy: Cluster
loadBalancerIP: 21.0.101.77
ports:
- name: status-port
nodePort: 30281
port: 15021
protocol: TCP
targetPort: 15021
- name: http
nodePort: 30124
port: 80
protocol: TCP
targetPort: 80
- name: https
nodePort: 31858
port: 443
protocol: TCP
targetPort: 443
Il existe des ports pour le trafic HTTP et HTTPS. Vous pouvez exposer l'un de ces ports, ou les deux, via votre équilibreur de charge.
Si vous exposez le service d'entrée qui est déployé automatiquement dans tous les clusters, le service LoadBalancer est nommé istio-ingress
et se trouve dans l'espace de noms gke-system
. Recherchez ses ports à l'aide de la commande suivante :
kubectl --kubeconfig KUBECONFIG -n gke-system get service istio-ingress -oyaml
Le service d'entrée est configuré avec une adresse loadBalancerIP, qui correspond à l'adresse IP indiquée dans le champ loadBalancer.vips.ingressVIP
de la configuration initiale du cluster. Vous devez exposer cette adresse IP virtuelle pour exposer le service d'entrée sur l'équilibreur de charge externe.
Créer un pool de backend
- Accédez à Trafic local > Pools > Liste des pools.
- Cliquez sur Créer.
- Attribuez un nom au pool.
- Sélectionnez tcp comme surveillance d'état.
- Ajoutez des nœuds de calcul au pool de nœuds. Répétez ces étapes pour chaque nœud. Vous pouvez ajouter des plans de contrôle et des nœuds de calcul, car les NodePorts Kubernetes sont accessibles sur n'importe quel nœud du cluster.
- Dans la section Nouveaux membres, cliquez sur Liste des nœuds, puis sélectionnez l'un des nœuds créés précédemment.
- Dans le champ Port du service, saisissez la valeur NodePort du service.
- Cliquez sur Ajouter.
Créer un serveur virtuel
- Accédez à Trafic local > Serveurs virtuels > Liste des serveurs virtuels.
- Cliquez sur Créer.
- Saisissez un nom pour le serveur virtuel.
- Définissez le Type sur Standard.
- Saisissez 0.0.0.0/0 dans le champ Adresse source pour autoriser le trafic depuis n'importe quelle source.
- Saisissez l'adresse IP virtuelle du service de l'équilibreur de charge en tant qu'adresse de destination.
- Saisissez le port exposé pour le service d'équilibreur de charge en tant que port de service.
- Dans le champ Traduction d'adresse source, sélectionnez Carte automatique.
- Dans Pool par défaut, sélectionnez le pool créé précédemment dans la liste déroulante.
- Cliquez sur Terminé.