Kubernetes, iSCSI и дилемма шифрования

TL; DR. Как заставить кластер Kubernetes использовать зашифрованный постоянный том?

У меня есть развертывание Kubernetes в частной сети. Мои узлы Kubernetes и устройство iSCSI находятся в одной сети и доступны друг другу.

У меня нет контроля над самим устройством iSCSI (например, я не могу отсоединить его от стойки или перепрограммировать), но я могу подключиться к нему по ssh и выполнить программный контроль. Терминал, который я получаю после ssh-вхождения в iSCSI, очень ограничен, хотя доступно следующее:

  • Я могу разбить iSCSI на части (например, инициаторы установки, группы, LUN и т. Д.),
  • создать и экспортировать NFS с устройства iSCSI,
  • создать и экспортировать CIFS из устройства iSCSI.

С учетом вышесказанного у меня есть две вещи, которые я пытаюсь сделать:

  • все фотоаппараты Kubernetes должны как-то поддерживаться устройством iSCSI,
  • все постоянные данные должны быть зашифрованы.

Чтобы выполнить первое требование, у меня есть хорошие варианты:

  • экспортировать некоторые LUN ​​из iSCSI и создавать PV в Kubernetes при поддержке этих LUN iSCSI,
  • экспорт NFS,
  • экспорт CIFS.

Однако я изо всех сил пытаюсь выполнить второе требование, например, для шифрования данных.


Проблема заключается в том, что iSCSI должен быть подключен к "хорошей работе" файловой системы. Поэтому я думаю следующее:

подготовка

  • Я могу сделать LUN на iSCSI, а затем создать файловую систему ext4 на LUN iSCSI,
  • в этой файловой системе ext4 создайте большой файл - "изображение" с размером, равным всей файловой системе ext4 (или, возможно, немного меньше...),
  • зашифруйте этот файл изображения с помощью cryptsetup и подготовьте другую файловую систему ext4 внутри файла изображения.

выполнение

Теперь я могу создать PV из iSCSI в обычном режиме. PV увидит файловую систему (поддерживаемую LUN) и один зашифрованный файл. Теперь я могу подключить PV к своему POD (через PVC), а через контейнер init сделать POD для:

  1. "открыть" (незашифровать) файл, содержащий другую файловую систему,
  2. наконец, смонтируйте содержимое файла, скажем, /var/lib/postgres/data,

После выхода из контейнера init контейнер postgres (находящийся в том же POD) будет иметь доступ к своему каталогу данных, как будто ничего не произошло.


Это всего лишь идея, но уже выглядит довольно сложно. Слои поверх слоев...

Я не уверен, насколько стабильным или даже быстрым будет это решение (оно будет работать вообще, конечно). Например, что произойдет, если я отсоединю или потеряю узел, содержащий мой контейнер postgres, без правильного "закрытия" файла, содержащего зашифрованный файл fs (что должно быть сделано в соответствии с cryptsetup)?

Я ищу идеи здесь.

PS Я слышал, ZFS на Linux получил поддержку шифрования. Будет ли целесообразно использовать iSCSI + LUN + ZFS?

0 ответов

Другие вопросы по тегам