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 для:
- "открыть" (незашифровать) файл, содержащий другую файловую систему,
- наконец, смонтируйте содержимое файла, скажем,
/var/lib/postgres/data
,
После выхода из контейнера init контейнер postgres (находящийся в том же POD) будет иметь доступ к своему каталогу данных, как будто ничего не произошло.
Это всего лишь идея, но уже выглядит довольно сложно. Слои поверх слоев...
Я не уверен, насколько стабильным или даже быстрым будет это решение (оно будет работать вообще, конечно). Например, что произойдет, если я отсоединю или потеряю узел, содержащий мой контейнер postgres, без правильного "закрытия" файла, содержащего зашифрованный файл fs (что должно быть сделано в соответствии с cryptsetup)?
Я ищу идеи здесь.
PS Я слышал, ZFS на Linux получил поддержку шифрования. Будет ли целесообразно использовать iSCSI + LUN + ZFS?