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

Добрый день. Помогите пожалуйста выбрать правильное решение. Стоит задача написать скрипт, который

сможет поднять N ВМ в Hetzner Cloud и собрать из них k8s кластер, на основании представленных параметров.
Сами ВМ нарезаются terraform, установка k8s производится kubespray.
Возникает несколько вопросов:
1. при создании ВМ им выделяются внешние IP, которые нужны только на ingress-нодах. Кроме вопроса исчерпания пула свободных IPv4, волнует вопрос минимальной защиты кластера, а именно использование Hetzner Cloud Firewall, которым планируется закрыть все порты, кроме 80 и 443 для ingress и 22 порта с фильтрацией по IP.
—-
Собственно вопрос: какие интерфейсы использовать для установки и работы k8s. Изначально я создавал локальную подсеть, по которой ноды работают друг с другом. Возможно это избыточно и достаточно использовать те интерфейсы, которые поставляются с ВМ, пусть и на белых адресах. Тут возникает проблема - они ходят через firewall, который не разрешает трафик кроме 80 и 443 порта. Понятно, что ограничение решается добавлением правила для внешних IP нод кластера, но я хотел бы отказаться от этого шага, в том числе из-за соображений, что маршрутизация в одноранговой сети лучше. Или я не прав?
2. Kubespray имеет сущность bastion, которая как я понимаю решает задачу разворачивания k8s кластера через промежуточную ноду, которая находится в локальной сети целевых нод. Кто-то имел опыт её эксплуатации? Возможно есть какие-то нюансы?
3. Подготовка окружения для эксплуатации скрипта - рабочего места, с которого он будет запускаться: правильно ли я понимаю, что под *nix проблем особых возникать не должно, а про виндовые тачки лучше даже не задумываться. Наверное этот вопрос решается созданием pipeline в jenkins или аналогичных ci-агентах?

5 ответов

10 просмотров

Судя по чатику - hetzner это боль. 1. Стоит ли поднимать отдельную сетку для куба? Ну вопрос в нагрузке и тарификации трафика - hetzner берет деньги за трафик через белые IP? 2. через bastion прокси не прокинуть адекватно - но это не твой кейс) 3. Ну если у тебя куб будет умирать и запускаться постоянно - да лучше ci - а так пофиг на какой тачке - там же кроме ansible ничего не надо если ты kubespеем фигачишь. Ну и курла(terraforma) для апишечки hetzner

Tarakanov-Oleg Автор вопроса
Aleksey Lazarev
Судя по чатику - hetzner это боль. 1. Стоит ли п...

1. похоже берет денег, т.к. заявлено 20 TB в описании инстанса, остальное скорее всего за отдельный прайс. 2 и 3 спасибо за совет. Если не ошибаюсь, kubespray позволяет указать внешние IP для "сеансов связи" ansible, и локальные интерфейсы для нод k8s. На этом и остановлюсь.

Создаешь VPC В нем будет: 1-2 бастиона с белым IP 1-N Nginx/haproxy/etc для вытаскивания серверов наружу Все остальное в серой сети без ограничения трафика Доступ через бастион делается в ~/ssh/config Запускаешь плейбук где хочешь

А и наты забыл

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
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
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
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
Карта сайта