По умолчанию Kubernetes в локальной среде (minikube, kind, kubeadm и т.п.) не предоставляет реализацию LoadBalancer для сервисов. Чтобы протестировать балансировку и работу сервисов так, как это происходит в облачных кластерах, используется MetalLB — лёгкий балансировщик нагрузки для bare-metal и локальных кластеров.
Устанавливаем MetalLB
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.15.2/config/manifests/metallb-native.yaml
Проверяем успешный запуск:
kubectl get pods -n metallb-system
Создаём конфигурацию
Создаём файл metallb-config.yaml со следующим содержимым:
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: default-pool
namespace: metallb-system
spec:
addresses:
- 192.168.1.240-192.168.1.250 # Указываем пул адресов
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2-advertisement
namespace: metallb-system
IPAddressPool — это список IP-адресов, которые MetalLB может выдавать сервисам типа LoadBalancer.
L2Advertisement — это объект MetalLB, который указывает, какие IP-адреса из заданного пула должны быть объявлены в локальной сети на канальном уровне (L2). Благодаря этому остальные устройства в сети понимают, что данные IP принадлежат узлам кластера Kubernetes, и могут направлять на них трафик.
Применяем манифест
kubectl apply -f metallb-config.yaml