32.9. Configuration des services pour l'utilisation de MetalLB
En tant qu'administrateur de cluster, lorsque vous ajoutez un service de type LoadBalancer
, vous pouvez contrôler la manière dont MetalLB attribue une adresse IP.
32.9.1. Demander une adresse IP spécifique
Comme d'autres implémentations de load-balancer, MetalLB accepte le champ spec.loadBalancerIP
dans la spécification du service.
Si l'adresse IP demandée se trouve dans une plage d'un pool d'adresses, MetalLB attribue l'adresse IP demandée. Si l'adresse IP demandée ne se trouve dans aucune plage, MetalLB signale un avertissement.
Exemple de service YAML pour une adresse IP spécifique
apiVersion: v1 kind: Service metadata: name: <service_name> annotations: metallb.universe.tf/address-pool: <address_pool_name> spec: selector: <label_key>: <label_value> ports: - port: 8080 targetPort: 8080 protocol: TCP type: LoadBalancer loadBalancerIP: <ip_address>
Si la MetalLB ne peut pas attribuer l'adresse IP demandée, le site EXTERNAL-IP
pour les rapports de service <pending>
et l'exécution de oc describe service <service_name>
comprend un événement comme dans l'exemple suivant.
Exemple d'événement lorsque MetalLB ne peut pas attribuer une adresse IP demandée
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning AllocationFailed 3m16s metallb-controller Failed to allocate IP for "default/invalid-request": "4.3.2.1" is not allowed in config
32.9.2. Demande d'une adresse IP à partir d'un pool spécifique
Pour attribuer une adresse IP à partir d'une plage spécifique, mais sans vous préoccuper de l'adresse IP en question, vous pouvez utiliser l'annotation metallb.universe.tf/address-pool
pour demander une adresse IP à partir du pool d'adresses spécifié.
Exemple de service YAML pour une adresse IP d'un pool spécifique
apiVersion: v1 kind: Service metadata: name: <service_name> annotations: metallb.universe.tf/address-pool: <address_pool_name> spec: selector: <label_key>: <label_value> ports: - port: 8080 targetPort: 8080 protocol: TCP type: LoadBalancer
Si le pool d'adresses que vous spécifiez pour <address_pool_name>
n'existe pas, MetalLB tente d'attribuer une adresse IP à partir de n'importe quel pool autorisant l'attribution automatique.
32.9.3. Accepter n'importe quelle adresse IP
Par défaut, les pools d'adresses sont configurés pour permettre une attribution automatique. MetalLB attribue une adresse IP à partir de ces pools d'adresses.
Pour accepter n'importe quelle adresse IP de n'importe quel pool configuré pour l'attribution automatique, aucune annotation ou configuration spéciale n'est nécessaire.
Exemple de service YAML pour l'acceptation de n'importe quelle adresse IP
apiVersion: v1 kind: Service metadata: name: <service_name> spec: selector: <label_key>: <label_value> ports: - port: 8080 targetPort: 8080 protocol: TCP type: LoadBalancer
32.9.5. Configurer un service avec MetalLB
Vous pouvez configurer un service de répartition de charge pour qu'il utilise une adresse IP externe provenant d'un pool d'adresses.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). - Installez l'opérateur MetalLB et démarrez MetalLB.
- Configurez au moins un pool d'adresses.
- Configurez votre réseau pour acheminer le trafic des clients vers le réseau hôte du cluster.
Procédure
Créez un fichier
<service_name>.yaml
. Dans le fichier, assurez-vous que le champspec.type
est défini surLoadBalancer
.Reportez-vous aux exemples pour savoir comment demander l'adresse IP externe que MetalLB attribue au service.
Créer le service :
oc apply -f <service_name>.yaml
Exemple de sortie
service/-YRFFGUNA nom_du_service> créé
Vérification
Décrivez le service :
oc describe service <service_name> $ oc describe service <service_name>
Exemple de sortie
Name: <service_name> Namespace: default Labels: <none> Annotations: metallb.universe.tf/address-pool: doc-example <.> Selector: app=service_name Type: LoadBalancer <.> IP Family Policy: SingleStack IP Families: IPv4 IP: 10.105.237.254 IPs: 10.105.237.254 LoadBalancer Ingress: 192.168.100.5 <.> Port: <unset> 80/TCP TargetPort: 8080/TCP NodePort: <unset> 30550/TCP Endpoints: 10.244.0.50:8080 Session Affinity: None External Traffic Policy: Cluster Events: <.> Type Reason Age From Message ---- ------ ---- ---- ------- Normal nodeAssigned 32m (x2 over 32m) metallb-speaker announcing from node "<node_name>"
<.> L'annotation est présente si vous demandez une adresse IP à partir d'un pool spécifique. <.> Le type de service doit indiquer
LoadBalancer
. <.> Le champ d'entrée de l'équilibreur de charge indique l'adresse IP externe si le service est correctement attribué. <.> Le champ des événements indique le nom du nœud affecté à l'annonce de l'adresse IP externe. En cas d'erreur, le champ events indique la raison de l'erreur.