172 похожих чатов

Всем привет! У меня возник вопрос по Linux ip routes. Вчера ставил

MetalLB себе в домашний кластер Kubernetes который развернут на 3-х виртуалках (KVM, 1 master, 1 etcd, 2 worker, CNI - flannel), у него есть address_pool из которого он выдает IP адреса для сервисов типа LoadBalancer.

Подсеть виртуалок 200.0.0.0/24, а для MetalLB я выдал pool из 10.5.0.50-10.5.0.200. Как я прочитал в одном из гайдов, в такой ситуации (не совпадение подсетей) требуется добавить ip route с одной сети, на другую. Но мне, если честно, не понятно как это работает.

По идеи у нас есть набор адресов 1 (200....) и 2 (10.0.5......), они отличны по размеру. Как я понимаю, если мы сделаем ip route на каждой ноде (руками/скриптом/не важно) со 2-го пула на подсеть (допутсим, ens3), то мы сможем достучаться до этих адресов через некий gateway, как это работает?

Проблему я решил тупо поставив пулл в рамках виртуальной подсети 200.0.0.50-200.0.0.100

P.S. OS на нодах ubuntu 20.04

Меня в гугле забанили, извините, и заранее спасибо неравнодушным)))

19 ответов

40 просмотров

ip route не нужен

Daniiλ-Shreyder Автор вопроса
George Gaál
ip route не нужен

Хм... Вчера читал вот эту статью https://itnext.io/configuring-routing-for-metallb-in-l2-mode-7ea26e19219e Говорят делать через ip route / iptables Не подскажешь пожалуйста, как быть если возникнет подобная ситуация в будущем? Спасибо

ip route нужен для того чтобы твои ноды могли роутить в эту подсеть.

George Gaál
а зачем

Всё что делает metallb - просто вешает /32 айпишник на интерфейс, если там нет айпишника из той же подсети на интерфейсе нужно добавить роут

𝚔𝚟𝚊𝚙𝚜
Всё что делает metallb - просто вешает /32 айпишни...

Да, ток если речь не идет про bpf-маскарад на нодах

Антон Саросек
Да, ток если речь не идет про bpf-маскарад на нода...

объясню по другому, когда ты делаешь ip addr add 1.2.3.4/24 dev eth1 то у тебя автоматически появляется роут, как если бы ты сделал: ip route add 1.2.3.0/24 dev eth1 таким образом добавление новых айпишников из тойже подсети будет работать без проблем: ip addr add 1.2.3.7/24 dev eth1 Теперь о том, как работает metallb, он делает примерно следующее: ip addr add 1.2.3.8/32 dev eth1 таким образом у тебя появляется айпишник на интерфейсе, но не появляется роут в подсеть 1.2.3.0/24, чтобы это "исправить" нужно сделать: ip route add 1.2.3.0/24 dev eth1

𝚔𝚟𝚊𝚙𝚜
объясню по другому, когда ты делаешь ip addr add ...

Это хорошо когда немного серверов а когда их даже 5 а адресов например 20 на каждом, и нужен фуллмеш как то упороться можно

𝚔𝚟𝚊𝚙𝚜
объясню по другому, когда ты делаешь ip addr add ...

Та я ж не спорю с этим. Говорю лишь о том, что ты можешь прописать маршрут, но bpf/xdp-программа, которая к твоему интерфейсу привязана может его проигнорить в конечном итоге

Daniiλ-Shreyder Автор вопроса
𝚔𝚟𝚊𝚙𝚜
объясню по другому, когда ты делаешь ip addr add ...

То есть, если мы повесили IP на устройство (создали роут) то стучась по этому IP мы можем дойти до наших сервисов, "игнорируя" пул адрессов внешней подсети? upd: или нужен какой-то гейтвей который будет слушать внешний IP?

zeleniumex
Это хорошо когда немного серверов а когда их даже ...

когда у меня стояла такая задача мы просто init-containerом к metallb раскатывали на ноды что-то типа ip route add 1.2.3.0/24 dev eth0.100 а дальше айпишниками рулил уже metallb

Daniiλ Shreyder
То есть, если мы повесили IP на устройство (создал...

Если у тебя за этим устройством сети твоих сервисов и обратный маршрут есть то да ))

Daniiλ-Shreyder Автор вопроса
zeleniumex
Если у тебя за этим устройством сети твоих сервисо...

ну nginx-ingress-controller крутится, вроде как за reverse-proxy сойдет) Дилетант в плане сетей, извини, и спасибо)))

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

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта