-
Notifications
You must be signed in to change notification settings - Fork 0
Home
-
База данных - СУБД на базе MySQL/PostgresQL, основная база run-bhyve core, хранящая информацию о виртуальных машинах, их конфигурации, их пользователях, контактная (биллинг) информация
-
Controller - высокоуровневый сервис, выполняющий и контроллирующий весь процессинг в run-bhyve core: прием запросов от API endpoint, генерация задач в Hypervisor, их постановка, обработка результата. Обработка метрик загруженности нод, балансировка нагрузки (DRS) путем анализа perfomance метрик и предсказаний на основе одной из выбранных политик (аналог watcher OpenStack: https://github.com/openstack/watcher/tree/master/watcher/decision_engine/strategy/strategies - кастомный набор политик по выбору подходящего сервера )
-
Broker bus (порт)- основная шина данных общения Controller и Hypervisor
-
Hypervisor - физическая нода под управлением FreeBSD OS. Количество нод неограничено. Каждый гипервизор имеет как минимум 1 ZPOOL. Каждый пул обслуживается процессом cbsd_mq, подписывающимся за персональной pool-очередью обработки инструкций CBSD
-
API - сервис (public), предоставляющий RestAPI, json-rpc для взаимоимодействия конечных пользвателей ( curl/UI frontend ) с виртуальными окружениями и облаком. Endpoints:
-
curl -H "cid:<cid>" https://127.0.0.1/api/v1/cluster
- получить информацию о кластере. -
curl -X POST -H "Content-Type: application/json" -d @payload.json https://127.0.0.1/api/v1/create/centos7
- создать VM или jail с именем 'centos7'. -
curl -H "cid:<cid>" https://127.0.0.1/api/v1/status/centos7
- получить информацию об окружении 'centos7'. -
curl -H "cid:<cid>" https://127.0.0.1/api/v1/start/centos7
- запустить окружение 'centos7'. -
curl -H "cid:<cid>" https://127.0.0.1/api/v1/stop/centos7
- остановить окружение 'centos7'. -
curl -H "cid:<cid>" https://127.0.0.1/api/v1/destroy/centos7
- уничтожить окружение 'centos7'.
-
Пример payload.json для /create/:
{
"type": "bhyve",
"img": "centos7",
"imgsize": "10g",
"ram": "1g",
"cpus": "2",
"pubkey": "ssh-ed25519 AA...Em comment@area"
}
где:
- type: тип окружения, может быть: "bhyve" или "jail".
- img: образ окружения. Для bhyve это варианты: "centos7","centos8","ubuntu","debian","freebsd_ufs","freebsd_zfs".
- ram: Объем оперативной памяти окружения.
- cpus: Количество vCPU/ядер, максимум: '16'.
- pubkey: " " - стандартная строчка pubkey SSH.
Во всех endpoint кроме /create, фигурирует токен - это md5 от строчки pubkey.
- CBSD - фреймворк на нижнем слое Гипервизора, выполняющий низкоуровневые операции над виртуальными окружениями ( создать вм, удалить, создать снапшот, откатить чекпоинт, выполнить добавление или ресайзин диска и тп )
Egor Kuzmichev, [18.06.21 18:46]
удобнее наверное так
ipv4:
- external
- none
- internal
- etc
ipv6:
- external
- none
тогда как хочешь, так и комбинируй значения, не плодя булевы параметры с дурацкими именами
и дополнительные значения можно легко вводить, не нарушая обратной совместимости
хоть ставь { ipv4: none, ipv6: none }
Oleg Ginzburg, [18.06.21 18:58]
вот я и думаю, можно ли сделать сразу универсально без хардкодов. Те, иметь возможность в payload юзать конструкции:
<item1>:
- val1
- val2
..
<item2>:
- val1
- val2
..
а на стороне API иметь конфигу вида:
allowed_op="item1"
или
deny_op="item2"
и главное - какая-то мапа этих <item> и их значений на нечто, что не потребует хака golang API, что-то типа писать маппинг:
item1_module="/root/bin/set_ip.py <args>"
item2_module="/root/bin/set_balancer_vhost.py <args>"
Egor Kuzmichev, [18.06.21 19:04]
мэпить наверное лучше а-ля руби он рейлс - convention over configuration (https://en.wikipedia.org/wiki/Convention_over_configuration) (CoC)
Oleg Ginzburg, [12.08.2021 14:56]
Еще кстати по поводу внешних IPv4 потенциальная лажа ( @aeifn FYI тоже ) - если мы даем IPv6 external, а IPv4 только приватный и идущий в инет через NAT, становится жопой если к нам придет абьюз. А это всего лишь дело времени.
Никаких snort-ов и прочих IDS и антиспам-антидос приблуд на хостере мы не ставим, выявить среди пачки приватных адресов кто там завалил сайт правительства или наркоту толкает или спам шлет - будет проблематично