SSL no caminho de gerenciamento para a configuração * exclusiva * GlusterFS

1

Oi eu tenho dois servidores de arquivos, vamos chamá-los de g1 @ 10.13.13.201 e g2 @ 10.13.13.202. Eu consegui mesclar com sucesso ambos em um volume glusterfs sendo montado em 10.13.13.201:/mnt/glusterfs. Então, tecnicamente, eu tenho uma caixa que é apenas um servidor glusterd e outra que é um servidor e um cliente. Eu escolhi fazer isso dessa maneira, porque cada servidor de arquivos tem 24 unidades, apenas uma unidade é o sistema operacional, o resto é LSOD em uma matriz raidz2 zfs. Então, imaginei, por que preciso de um controlador separado, quando uma das máquinas tinha carne suficiente para assumir essas responsabilidades?

Até este ponto, esta configuração funcionou bem, mas estou com alguns problemas em fazer com que o SSL / TLS funcione com essa configuração. Então, começando do zero, eu gero os pools do zfs e instalo o software do servidor glusterfs. Antes de configurar qualquer peer gluster, eu corro o seguinte script para gerar os certificados e CA nas duas caixas:

#!/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 [email protected]:~/temp_ssl/g1.key . 
sshpass -p 1 scp [email protected]:~/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

No entanto, tocar o arquivo de acesso seguro no caminho de manutenção do glusterd interrompe o servidor:

$ 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'.

Quando eu removo tudo, tudo começa bem:

$ 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.

Tenho a sensação de que o problema está relacionado ao fato de as CAs serem idênticas no servidor e no cliente. Como eu li na documentação, os certificados dos servidores e do cliente são concatenados e distribuídos para os servidores, enquanto o cliente recebe apenas os certificados concatenados dos servidores. Atualmente, o cliente está usando uma CA com seu próprio certificado e o segundo servidor. Então, talvez este seja o problema. Mas eu sou um pouco duvidoso, porque mesmo reiniciar o serviço glusterd nos servidores falha pelo mesmo motivo, e nessas instâncias as CAs devem estar ok.

Além disso, seria viável para mim contornar isso usando um túnel ssh para todo o tráfego nas portas glusterd? Então, neste exemplo, eu tenho 4 portas para gluster aberto nas caixas, além de ssh / 22 no cliente:

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

Como eu iria envolver todas essas conversas cruzadas nas portas 49152-3 e 24007-8 em um túnel ssh?

Pensamentos sobre o que está acontecendo aqui? Marty

    
por kjskjk kjdksjk 16.03.2017 / 00:57

1 resposta

0

Encontrou o bug!

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

Eu deveria ter concatenado o PEM.

Isso é problemático para mim especificamente em relação a essa comunidade. Claramente, esse era um tipo de situação do tipo ducky de borracha, onde eu tinha passado muito tempo com o código e não conseguia ver claramente o erro. Eu acabei gastando horas com um erro simples, e provavelmente teria sido muito útil ter pelo menos 1 conjunto adicional de olhos para pegar o problema. Isso é parcialmente o ponto deste fórum, correto? Honestamente, se ninguém neste fórum puder descobrir isso e / ou simplesmente se recusar a ajudar, então qual é o objetivo de vir até aqui?

Talvez eu precise apenas desabafar. Alguém pegou minha bola de estresse outro dia.

    
por 16.03.2017 / 21:43

Tags