Задать вопрос
@trickster2019

Почему не получается запустить MetalLB в кластере k3s?

Добрый день, я столкнулся с проблемой того что невозможно подключить MetalLB к K3S, у меня есть кластер с 3 masters и 3 workers
NAME            STATUS   ROLES                       AGE    VERSION
master-node-1   Ready    control-plane,etcd,master   4d2h   v1.30.5+k3s1
master-node-2   Ready    control-plane,etcd,master   4d1h   v1.31.1+k3s1
master-node-3   Ready    control-plane,etcd,master   4d1h   v1.31.1+k3s1
worker-node-1   Ready    <none>                      4d1h   v1.31.1+k3s1
worker-node-2   Ready    <none>                      4d     v1.31.1+k3s1
worker-node-3   Ready    <none>                      4d     v1.31.1+k3s1

я устанавливаю MetalLB manifests
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.5/config/manifests/metallb-native.yaml

и применяю следующую конфигурацию
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: k3s-lb-pool
  namespace: metallb
spec:
  addresses:
  - 192.168.0.170-192.168.0.180
  autoAssign: true
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: k3s-lb-pool
  namespace: metallb

но получаю ошибку
Error from server (InternalError): error when creating "metalLB-config.yaml": Internal error occurred: failed calling webhook "ipaddresspoolvalidationwebhook.metallb.io": failed to call webhook: Post "https://metallb-webhook-service.metallb.svc:443/validate-metallb-io-v1beta1-ipaddresspool?timeout=10s": no endpoints available for service "metallb-webhook-service"
Error from server (InternalError): error when creating "metalLB-config.yaml": Internal error occurred: failed calling webhook "l2advertisementvalidationwebhook.metallb.io": failed to call webhook: Post "https://metallb-webhook-service.metallb.svc:443/validate-metallb-io-v1beta1-l2advertisement?timeout=10s": no endpoints available for service "metallb-webhook-service"

при условии того что на всех нодах matalLB поднялся
root@master-node-1:~# kubectl get pod -n=metallb-system
NAME                          READY   STATUS    RESTARTS        AGE
controller-86f5578878-9ddsr   1/1     Running   2 (3m31s ago)   4m57s
speaker-5j47x                 1/1     Running   0               4m56s
speaker-6drpd                 1/1     Running   0               4m56s
speaker-ccpmq                 1/1     Running   0               4m56s
speaker-jfpch                 1/1     Running   1 (3m12s ago)   4m56s
speaker-mps8b                 1/1     Running   0               4m57s
speaker-t9lx2                 1/1     Running   0               4m56s


я также попробовал использовать версию MetalLB 0.12.1, но она работает уж больно не стабильно (дай бог 1 из 3 раз что то загрузиться).
Скажу заранее
встроенный load balancer от k3s я отключил
версия ubuntu
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.5 LTS
Release:        22.04
Codename:       jammy
  • Вопрос задан
  • 189 просмотров
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    DevOps для эксплуатации и разработки
    6 месяцев
    Далее
  • Skillfactory
    DevOps-инженер
    6 месяцев
    Далее
  • Хекслет
    DevOps-инженер с нуля
    14 месяцев
    Далее
Решения вопроса 1
@trickster2019 Автор вопроса
наконец решил это проблему.
сначала ставим сам metalLB (будьте внимательны в зависимости от версии будет меняться файл конфига)
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.5/config/manifests/metallb-native.yaml

потом запускаем список ip адресов
pool-ip.yml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: pool-ip
  namespace: metallb-system
spec:
  addresses:
  - 192.168.0.170-192.168.0.200


kubectl -n metallb-system apply -f pool-ip.yml

потом обязательно проверяем создался ли список ip адресов
kubectl -n metallb-system get IPAddressPool

если вылетает подобная ошибка
Error from server (InternalError): error when creating "metalLB-config.yaml": Internal error occurred: failed calling webhook "ipaddresspoolvalidationwebhook.metallb.io": failed to call webhook: Post "https://metallb-webhook-service.metallb.svc:443/validate-metallb-io-v1beta1-ipaddresspool?timeout=10s": no endpoints available for service "metallb-webhook-service"

то запускает эту команду, и после ошибки не будет
kubectl delete validatingwebhookconfigurations metallb-webhook-configuration

после чего запускает что то типа провайдера до этих ip адресов
l2-advertisement.yml

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: k3s-lb-pool
  namespace: metallb-system
spec:
  ipAddressPools:
  - pool-ip

kubectl apply -f l2-advertisement.yml
после чего проверяем подсосал ли он ip адреса
kubectl get l2advertisement -A
После всего этого Load Balancer должен быть доступен
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@vitaly_il1
DevOps Consulting
Проверьте namespace - я не работал с MetalLB, но в примерах конфигурации IPAddressPool используется metallb-system, не metallb как у вас.
Ответ написан
@Lifailon
Я заметил проблему в рабе speaker-ов у metallb как только одна из нод меняется на поде, эта информация не обновляется в спикере и он просто залипает (если я правильно понимаю VIP привязывается к конкретной ноде, и в этом вся проблема)... Это может произойти 10 раз на дню и помогает только пересоздание (путем удаления) спикеров.

Настроено кстати все как в комменатрии выше и работал, но возможно кто-то знает, как решить проблему с обнаружением переездов подов по нодам?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы