Metallb можно использовать в статических кластерах (bare metal), когда нет возможности воспользоваться балансировщиком от облачного провайдера. Metallb может работать в режимах L2 или BGP.
Пример использования metallb в L2-режиме
Пример включения модуля metallb и публикации отдельно запущенного приложения (веб-сервер Nginx).
-
Задайте группы узлов (NodeGroup) для запуска приложений, к которым предоставляется доступ.
Например, Ingress-контроллеры запускаются на frontend-узлах, а веб-сервер Nginx — на worker-узле. У frontend-узлов есть лейбл
node-role.deckhouse.io/metallb=""
.apiVersion: deckhouse.io/v1 kind: NodeGroup metadata: name: frontend spec: disruptions: approvalMode: Manual nodeTemplate: labels: node-role.deckhouse.io/frontend: "" node-role.deckhouse.io/metallb: "" taints: - effect: NoExecute key: dedicated.deckhouse.io value: frontend nodeType: Static --- apiVersion: deckhouse.io/v1 kind: NodeGroup metadata: name: worker spec: disruptions: approvalMode: Manual nodeType: Static
-
Проверьте, что на узлах проставлен корректный лейбл:
kubectl get nodes -l node-role.deckhouse.io/metallb
Пример вывода:
$ kubectl get nodes -l node-role.deckhouse.io/metallb NAME STATUS ROLES AGE VERSION demo-frontend-0 Ready frontend 61d v1.21.14 demo-frontend-1 Ready frontend 61d v1.21.14
-
Включите модуль metallb и задайте параметры
nodeSelector
иtolerations
для спикеров MetalLB.Пример конфигурации модуля:
apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: metallb spec: version: 1 enabled: true settings: addressPools: - addresses: - 192.168.199.100-192.168.199.102 name: frontend-pool protocol: layer2 speaker: nodeSelector: node-role.deckhouse.io/metallb: "" tolerations: - effect: NoExecute key: dedicated.deckhouse.io operator: Equal value: frontend
-
Установите приложение (nginx) и опубликуйте на порту
8080
:kubectl create deploy nginx --image=nginx kubectl create svc loadbalancer nginx --tcp=8080:80
-
Проверьте, что сервис создан:
kubectl get svc nginx
Пример вывода:
$ kubectl get svc nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx LoadBalancer 10.222.9.190 192.168.199.101 8080:31689/TCP 3m11s
-
Проверьте доступ к приложению.
Пример:
$ curl -s -o /dev/null -w "%{http_code}" 192.168.199.101:8080 200