Назад | Перейти на главную страницу

SSL на пути управления для * уникальной * настройки GlusterFS

Привет, у меня есть два файловых сервера, назовем их g1 @ 10.13.13.201 и g2 @ 10.13.13.202. Мне удалось успешно объединить оба в том glusterfs, монтируемый 10.13.13.201:/mnt/glusterfs. Так что технически у меня есть один ящик, который является исключительно сервером glusterd, а другой - одновременно сервером и клиентом. Я решил сделать это так, потому что каждый файловый сервер - это 24 диска, только один диск - это ОС, остальные - LSOD в массиве raidz2 zfs. Итак, я подумал, зачем нужен отдельный контроллер, если у одной из машин было достаточно мяса, чтобы взять на себя эти обязанности.

До этого момента эта настройка работала нормально, однако у меня возникли некоторые проблемы с настройкой SSL / TLS для работы с этой конфигурацией. Итак, начиная с нуля, я создаю пулы zfs и устанавливаю серверное программное обеспечение glusterfs. Перед настройкой любых одноранговых узлов gluster я запускаю следующий сценарий для генерации сертификатов и CA на обоих устройствах:

#!/bin/bash

#temp user directory for generation of keys
mkdir ~/temp_ssl
cd ~/temp_ssl

#generating self-signed keys
openssl genrsa -out $HOSTNAME.key 2048
openssl req -new -x509 -key "$HOSTNAME".key -subj "/CN=$HOSTNAME" -out "$HOSTNAME".pem

#grab both keys
sshpass -p 1 scp user@10.13.13.201:~/temp_ssl/g1.key . 
sshpass -p 1 scp user@10.13.13.202:~/temp_ssl/g2.key . 
#concatenate both keys to generate CA
for f in *key; do
 cat $f >> gluster.ca;
done;
#cp CA and key and CA to /etc/ssl, change ownership and access priveledges to only root read / write.
sudo cp $HOSTNAME* gluster.ca /etc/ssl
sudo chown root:root /etc/ssl/$HOSTNAME* gluster.ca
sudo chmod 0600 /etc/ssl/$HOSTNAME* gluster.ca

#remove the unsecured keys
cd 
sudo rm -rf temp_ssl

#generate file flag for ssl secured maintenance between glusters
sudo touch /var/lib/glusterd/secure-access

#restart glusterd
sudo system systemctl restart glusterfs-server.service

exit 0

Однако прикосновение файла с защищенным доступом к пути обслуживания glusterd приводит к поломке сервера:

$ sudo systemctl restart glusterfs-server.service
Job for glusterfs-server.service failed because the control process exited with error code. See "systemctl status glusterfs-server.service" and "journalctl -xe" for details.
$ sudo systemctl status glusterfs-server.service
glusterfs-server.service - LSB: GlusterFS server
   Loaded: loaded (/etc/init.d/glusterfs-server; bad; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2017-03-15 18:50:17 CDT; 1min 0s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 6482 ExecStop=/etc/init.d/glusterfs-server stop (code=exited, status=0/SUCCESS)
  Process: 6526 ExecStart=/etc/init.d/glusterfs-server start (code=exited, status=1/FAILURE)

Mar 15 18:50:17 g1 systemd[1]: Starting LSB: GlusterFS server...
Mar 15 18:50:17 g1 glusterfs-server[6526]:  * Starting glusterd service glusterd
Mar 15 18:50:17 g1 glusterfs-server[6526]:    ...fail!
Mar 15 18:50:17 g1 systemd[1]: glusterfs-server.service: Control process exited, code=exited status=1
Mar 15 18:50:17 g1 systemd[1]: Failed to start LSB: GlusterFS server.
Mar 15 18:50:17 g1 systemd[1]: glusterfs-server.service: Unit entered failed state.
Mar 15 18:50:17 g1 systemd[1]: glusterfs-server.service: Failed with result 'exit-code'.

Когда я его снимаю, все начинается нормально:

$ sudo rm -rf secure-access 
$ sudo systemctl restart glusterfs-server.service
$ sudo systemctl status glusterfs-server.service
● glusterfs-server.service - LSB: GlusterFS server
   Loaded: loaded (/etc/init.d/glusterfs-server; bad; vendor preset: enabled)
   Active: active (running) since Wed 2017-03-15 18:53:15 CDT; 2s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 6482 ExecStop=/etc/init.d/glusterfs-server stop (code=exited, status=0/SUCCESS)
  Process: 6552 ExecStart=/etc/init.d/glusterfs-server start (code=exited, status=0/SUCCESS)
    Tasks: 7
   Memory: 12.8M
      CPU: 2.306s
   CGroup: /system.slice/glusterfs-server.service
           └─6560 /usr/sbin/glusterd -p /var/run/glusterd.pid

Mar 15 18:53:13 g1 systemd[1]: Starting LSB: GlusterFS server...
Mar 15 18:53:13 g1 glusterfs-server[6552]:  * Starting glusterd service glusterd
Mar 15 18:53:15 g1 glusterfs-server[6552]:    ...done.
Mar 15 18:53:15 g1 systemd[1]: Started LSB: GlusterFS server.

У меня такое чувство, что проблема связана с тем, что центры сертификации идентичны как на сервере, так и на клиенте. Как я читал в документации, сертификаты от серверов и клиента объединяются и распределяются по серверам, тогда как клиент получает только объединенные сертификаты с серверов. В настоящее время клиент использует ЦС как со своим собственным сертификатом, так и с сертификатом второго сервера. Так что, может быть, проблема в этом. Но я несколько сомневаюсь, потому что даже перезапуск службы glusterd на серверах не удается по той же причине, и в этих случаях центры сертификации должны быть в порядке.

Кроме того, возможно ли мне обойти это, используя туннель ssh для всего трафика на портах glusterd? Итак, в этом случае у меня есть 4 порта для gluster, открытых на ящиках, плюс ssh / 22 на клиенте:

sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 10.13.13.201 --dport 24007:24008 -j ACCEPT
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 10.13.13.202 --dport 24007:24008 -j ACCEPT
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 10.13.13.201 --dport 49152:49153 -j ACCEPT
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp -s 10.13.13.202 --dport 49152:49153 -j ACCEPT

Как мне перенести весь этот перекрестный разговор на порты 49152-3 и 24007-8 через туннель ssh?

Мысли о том, что здесь происходит? Марти

Нашел ошибку!

for f in *key; do
 cat $f >> gluster.ca;
done;

Вместо этого я должен был объединить PEM.

Это особенно неприятно для меня в отношении этого сообщества. Ясно, что это была ситуация типа резинового утенка, когда я провел слишком много времени с кодом и не мог ясно увидеть ошибку. В итоге я потратил часы на простую ошибку, и, вероятно, было бы очень полезно иметь хотя бы 1 дополнительную пару глаз, чтобы уловить проблему. Частично в этом суть этого форума, верно? Честно говоря, если никто на этом форуме не мог понять этого и / или просто отказался помочь, то какой смысл вообще сюда приходить?

Может, мне просто нужно было дать выход. Кто-то на днях взял мой мяч от стресса.