Selenite - простая иммутабельная серверная ОС для контейнеров

Всем привет, хотел бы поделиться своим проектом.

Selenite — минималистичная серверная ОС для запуска контейнеров в формате compose-стеков.

Во многом проект был вдохновлён Talos Linux, который предназначен исключительно для запуска Kubernetes. Selenite, в свою очередь, реализует похожие идеи, но предназначен для запуска контейнерных приложений, описанных в compose.yaml, средствами Podman Compose.

Идея проекта в том, чтобы максимально сократить необходимость администрирования ОС, повысить безопасность и оставить системе одну основную задачу — запуск контейнерных приложений.

Управление

Управления сервером происходит через ssh, но ssh через предоставляется ограниченный набор команд, доступ к которым регулируется через RBAC.

Например, стек можно развернуть, передав compose.yaml:

ssh server stack deploy myapp < compose.yaml

Основные особенности

Система достаточно минимальна

В ней находится только необходимое для выполнения своей задачи — запуска контейнеров.

Система обновляется атомарно одним цельным образом

Благодаря этому:

  • обновление не может остановиться на середине и оставить систему в потенциально сломанном состоянии;
  • состав компонентов фиксирован, поэтому проще отслеживать уязвимости и понимать, какие версии пакетов входят в конкретный образ;
  • можно удобно откатить обновление при необходимости.

Конфигурация системы декларативна

Конфигурация системы описывается одним YAML-файлом и применяется целиком.

Например, конфигурация может выглядеть так:

access:
  users:
    - name: alice
      roles: [root]
      keys:
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... alice@example.com

    - name: bob
      roles: [viewer]
      keys:
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... bob@example.com

  roles:
    - name: viewer
      rules:
        - resources: ["stack"]
          verbs: ["list"]
        - resources: ["stack/*"]
          verbs: ["get"]
        - resources: ["machine/info"]
          verbs: ["get"]

netbird:
  enabled: true
  setup_key: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"

sysctl:
  params:
    net.ipv4.ip_unprivileged_port_start: 80

memory:
  zram:
    enabled: true
    size: ram/4
    compression: zstd
    swap_priority: 100

В конфигурации описаны пользователи и их роли, параметры подключения к NetBird, sysctl-параметры и настройки zram.

Применить эту конфигурацию можно простой командой:

ssh server machine config apply < config.yml

Минимальная поверхность атаки

Вместо полноценного интерактивного shell используется ограниченный API через SSH. Доступ к операциям регулируется через RBAC, а контейнеры запускаются через rootless Podman (что в некоторых ситуациях имеет свои особенности).

Статус проекта

Проект пока находится в разработке. На данный момент есть только редакция cloud для запуска в виртуальных машинах — то есть Selenite можно запустить в Proxmox или на VPS/VDS-сервере. В будущем, возможно, появится версия для запуска на железе, но пока особой необходимости в этом не вижу.

В ближайшее время, скорее всего, получится закончить установщик и описать различные способы установки в документации.

Из планов на будущее:

  • вынести некоторые функции (NetBird, Grafana Loki) в опциональные расширения, так как они явно нужны не всем;
  • добавить больше опций в конфигурацию, поскольку текущих явно маловато.

Итого

Хотелось бы получить мнение сообщества и обратную связь. Насколько вообще интересна подобная ОС вместо классического Linux? Какого функционала, на ваш взгляд, не хватает?

1 лайк