= GlusterFS Encryption = The default GlusterFS setup does not encrypt its communication. Use the method below enable encryption. == Keys and Certificates == Make an encryption key and make sure to set the `CN` to match the name of the client/server. Repeat this on all the servers and the client. === Servers === {{{ cd /etc/ssl openssl genrsa -out glusterfs.key 2048 openssl req -new -x509 -key glusterfs.key -subj "/CN=gluster01" -out glusterfs.pem }}} === Client === {{{ cd /etc/ssl openssl genrsa -out glusterfs.key 2048 openssl req -new -x509 -key glusterfs.key -subj "/CN=glusterclient01" -out glusterfs.pem }}} == Certificate Authorities == === Servers === Compile all the certificates in one place and concatenate them into `/etc/ssl/glusterfs.ca`. Notice that this will also include the certificates from the client. {{{ cat gluster01.pem gluster02.pem gluster03.pem glusterclient01.pem > glusterfs.ca }}} Copy the certificate authority to all the servers and place it in `/etc/ssl/glusterfs.ca` === Client === Compile all the server certificates in one place and concatenate them into `/etc/ssl/glusterfs-client.ca`. {{{ cat gluster01.pem gluster02.pem gluster03.pem > glusterfs-client.ca }}} Copy the certificate authority to the client and place it in `/etc/ssl/glusterfs.ca` == Activate Encryption == === Servers === When this file exists the glusterfs server will use the new certificates. {{{ touch /var/lib/glusterd/secure-access }}} Restart the servers {{{ service glusterfs-server restart }}} === Client === On the client you need to create the `/var/lib/glusterd` directory before activating encryption. {{{ mkdir /var/lib/glusterd/ touch /var/lib/glusterd/secure-access }}} == Enable Encryption == Ecryption is enabled for a volume from one of the servers. {{{ gluster volume set www client.ssl on gluster volume set www server.ssl on }}} == Allow Only Specific Hosts == We allow only access from known hosts. Run this on one of the servers. {{{ gluster volume set www auth.ssl-allow 'gluster01,gluster02,gluster03,glusterclient01' }}} == Mounting == On the client we have to enable ssl for the volume. Add `option transport.socket.ssl-enabled on` to `/etc/glusterfs/www.vol`. The file will now look like this. {{{ volume remote1 type protocol/client option transport-type tcp option remote-host gluster01 option remote-subvolume /srv/www/brick option transport.socket.ssl-enabled on end-volume volume remote2 type protocol/client option transport-type tcp option remote-host gluster02 option remote-subvolume /srv/www/brick option transport.socket.ssl-enabled on end-volume volume remote3 type protocol/client option transport-type tcp option remote-host gluster03 option remote-subvolume /srv/www/brick option transport.socket.ssl-enabled on end-volume volume replicate type cluster/replicate subvolumes remote1 remote2 remote3 end-volume volume writebehind type performance/write-behind option window-size 1MB subvolumes replicate end-volume volume cache type performance/io-cache option cache-size 64MB subvolumes writebehind end-volume }}}