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.