Skip to main content

Associer une IP virtuelle à un service LoadBalancer avec MetalLB

Il arrive que vous ayez besoin de publier un service Kubernetes sur une adresse IP virtuelle et un port afin de le rendre accessible depuis l’extérieur du cluster.

Étapes

1 : vérifier l’adresse IP des autres services LoadBalancer Kubernetes

kubectl get services -A | grep LoadBalancer
NAMESPACE  NAME     type          CLUSTER-IP       EXTERNAL-IP   PORT(S)                     AGE
traefik traefik LoadBalancer 100.126.223.128 10.23.36.226 80:31943/TCP,443:32125/TCP 13d

Vous devez observer l’adresse EXTERNAL-IP des services de type LoadBalancer.

2 : créer une ressource IPAddressPool pour déclarer l’adresse VIP

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: my-vip
namespace: metallb-system
spec:
addresses:
- 10.23.36.227/32

Avec cette ressource, un pool d’IP nommé my-vip est créé. Il contient une seule adresse IP (10.23.36.227).

3 : créer une ressource Service de type LoadBalancer pour utiliser l’adresse VIP dans le service

apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: my-namespace
annotations:
metallb.universe.tf/address-pool: my-vip
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
type: LoadBalancer
selector:
app: my-app

Le service LoadBalancer fait référence au pool d’adresses my-vip via l’annotation metallb.universe.tf/address-pool.

4 : vérifier l’adresse EXTERNAL-IP du nouveau service LoadBalancer

kubectl get services -A | grep LoadBalancer
NAMESPACE     NAME        type          CLUSTER-IP       EXTERNAL-IP   PORT(S)       AGE
my-namespace my-service LoadBalancer 100.126.223.129 10.23.36.227 80:31944/TCP 1m

On peut voir que l’adresse IP externe 10.23.36.227 a bien été attribuée.