在Linux上使用Glusterfs存储的群集如何启用TLS/SSL加密
时间:2019-11-20 08:53:51 来源:igfitidea点击:
如何使用SSL/TLS设置GlusterFS?
在Glusterfs Linux集群中如何使用SSL?
如何在Linux上的Glusterfs存储群集上使用TLS/SSL启用网络加密?
在GlusterFS中设置SSL的相关文件
需要在每个节点创建以下文件以进行TLS/SSL加密:
/etc/ssl/glusterfs.pem
SSL证书。该文件"必须在每个节点上创建",并且"不得与群集中的任何其他节点或任何其他服务器共享"。/etc/ssl/glusterfs.key
SSL私钥。该文件"必须在每个节点上创建",并且"不得与群集中的任何其他节点或任何其他服务器共享"。/etc/ssl/glusterfs.ca
所有节点证书的串联。该文件"不是唯一的",并且在所有服务器节点和客户端上必须"相同"。/var/lib/glusterd/secure-access
在每个节点的管理路径上启用TLS加密。需要使用touch命令在每个节点上创建此文件。
GlusterFS集群配置
假设集群配置如下:
IP地址 | 节点主机名 |
---|---|
192.168.2.45 | gfs01 |
192.168.2.46 | gfs01 |
192.168.2.47 | gfs01 |
192.168.2.48 | gfs01 |
在每个节点上使用DNS或/etc/hosts文件进行设置:
$ cat /etc/hosts
输出示例:
127.0.0.1 localhost 127.0.1.1 ubuntu-box-1 192.168.2.45 gfs01 192.168.2.46 gfs02 192.168.2.47 gfs03 192.168.2.48 gfs04
在Glusterfs中使用SSL
在每个节点(gfs01,gfs02,gfs03和gfs04)上执行以下命令。
如何为每个节点和客户端生成私钥
$ cd /etc/ssl/ $ sudo openssl genrsa -out glusterfs.key 2048
输出示例:
Generating RSA private key, 2048 bit long modulus .......................................................................+++ ................................+++ e is 65537 (0x10001)
如何为每个节点生成签名证书
在所有节点上执行下面的命令,例如,gfs01:
$ cd /etc/ssl/ $ sudo openssl req -new -x509 -key glusterfs.key -subj "/CN=gfs01" -out glusterfs.pem
对于客户端,同样使用相同命令生成证书, 比如,client01:
$ cd /etc/ssl/ $ sudo openssl req -new -x509 -key glusterfs.key -subj "/CN=client01" -out glusterfs.pem
如何创建证书颁发机构(CA)文件的证书
在gfs01节点上进行操作:
从所有其他节点(包括客户端)中,复制所有.pem文件过来,如下所示:
$ mkdir /tmp/ca/ $ cd /tmp/ca/ $ scp root@gfs02:/etc/ssl/glusterfs.pem gfs02.pem $ scp root@gfs03:/etc/ssl/glusterfs.pem gfs03.pem $ scp root@gfs04:/etc/ssl/glusterfs.pem gfs04.pem $ scp root@client01:/etc/ssl/glusterfs.pem client01.pem
然后将这些证书合并成一个文件
### 给所有服务器节点使用 $ cat /etc/ssl/glusterfs.pem gfs02.pem gfs03.pem gfs04.pem client01.pem > glusterfs.ca ### 给所有客户端节点使用 $ cat /etc/ssl/glusterfs.pem gfs02.pem gfs03.pem gfs04.pem > glusterfs-client.ca
现在将glusterfs.ca文件放在所有服务器节点上:
$ sudo cp glusterfs.ca /etc/ssl/ $ scp glusterfs.ca root@gfs02:/etc/ssl/ $ scp glusterfs.ca root@gfs03:/etc/ssl/ $ scp glusterfs.ca root@gfs04:/etc/ssl/
现在将glusterfs-client.ca文件放在所有客户端节点上,同时改个名:
$ scp glusterfs-client.ca root@client01:/etc/ssl/glusterfs.ca $ rm -rf /tmp/ca/
如何在服务器节点上启用SSL加密
在所有的服务器节点上执行以下命令:
$ sudo touch /var/lib/glusterd/secure-access
在所有服务器上重启glusterd:
$ systemctl restart glusterfs-server.service
如何在客户端节点上启用管理加密
假设卷名称为gvol0。
在所有客户端上执行以下命令:
$ sudo touch /var/lib/glusterd/secure-access
在所有客户端上卸载该卷:
$ sudo umount /var/www
在所有客户端上挂载该卷:
$ sudo mount -t glusterfs gfs01:/gvol0 /mnt/www/
如何卷gvol0启用TLS/SSL I/O加密?
首先停止卷gvol0,
然后运行:
$ sudo gluster volume stop gvol0 ## 需要在所有客户机/服务器(如果有)上卸载卷 ## 在所有节点上(gfs01,gfs02,gfs03,gfs04,client01)重启 glusterfs-server.service 服务 $ sudo sudo umount /var/www $ sudo systemctl restart glusterfs-server.service
接下来,执行以下命令,设置可以对该卷访问的所有服务器和客户端。
语法为:
$ sudo gluster volume set {VOLNAME} auth.ssl-allow '{server1,server2,client1,client2,....}'
例如:
$ sudo gluster volume set gvol0 auth.ssl-allow 'gfs01,gfs02,gfs03,gfs04,client01'
允许所有经过TLS身份验证的客户端都可以挂载并且访问该卷:
$ sudo gluster volume set gvol0 auth.ssl-allow '*'
客户端访问卷启用ssl
$ gluster volume set gvol0 client.ssl on
在服务端访问卷启用ssl
$ gluster volume set gvol0 server.ssl on
启动卷服务:
$ sudo gluster vol start gvol0
在所有客户端/服务器上挂载卷:
$ sudo mount -t glusterfs gfs01:/gvol0 /mnt/www/
检查卷gvol0的I/O路径上是否启用了SSL:
$ sudo grep -i ssl /var/log/glusterfs/bricks/nodirectwritedata-brick1-gvol0.log
输出示例:
150: option auth.login./nodirectwritedata/brick1/gvol0.ssl-allow gfs01,gfs02 152: option transport.socket.ssl-enabled on [2017-03-07 08:24:38.893211] I [socket.c:343:ssl_setup_connection] 0-tcp.gvol0-server: peer CN = gfs01 [2017-03-07 08:24:38.893248] I [socket.c:346:ssl_setup_connection] 0-tcp.gvol0-server: SSL verification succeeded (client: 192.168.2.45:49149) [2017-03-07 08:24:39.146162] I [socket.c:343:ssl_setup_connection] 0-tcp.gvol0-server: peer CN = gfs02 [2017-03-07 08:24:39.146197] I [socket.c:346:ssl_setup_connection] 0-tcp.gvol0-server: SSL verification succeeded (client: 192.168.2.46:49148)