Page tree
Skip to end of metadata
Go to start of metadata

Inhalt

Ausgangslage / Server / HW

Drei Root-Server (KVM-Maschinen) bei netcup.de 

Basisinstallation

Pakete

(alle Nodes) Basispakete installieren:

sudo apt install -y vim screen ncdu htop software-properties-common apt-transport-https ca-certificates

Console für VNC

(alle Nodes) In GRUB TTY1 für Console über KVM VNC eintragen:

/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="text console=tty1 console=ttyS0,115200n8"


SSH

(alle Nodes) In der SSH-Konfig Root-Login und Passwort-Authentifizierung deaktivieren:

/etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no

(alle Nodes) SSH neustarten:

sudo service ssh restart

ufw

(alle Nodes) SSH von überall zulassen und Firewall hochfahren:

sudo ufw allow ssh
sudo ufw enable

Partitionsschema

node01 und node02:

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sda1  *        2048 23437311 23435264 11.2G 83 Linux
/dev/sda2       23437312 29296639  5859328  2.8G 82 Linux swap / Solaris
/dev/sda3       29296640 81788927 52492288   25G 83 Linux

node03:

Device     Boot    Start       End   Sectors  Size Id Type
/dev/sda1  *        2048  23437311  23435264 11.2G 83 Linux
/dev/sda2       23437312  29296639   5859328  2.8G 82 Linux swap / Solaris
/dev/sda3       29296640  81788927  52492288   25G 83 Linux
/dev/sda4       81788928 654311423 572522496  273G  5 Extended
/dev/sda5       81790976 654311423 572520448  273G 83 Linux

Glusterfs

Installation

(alle Nodes) Repo hinzufügen:

sudo add-apt-repository ppa:gluster/glusterfs-3.8

(alle Nodes) Paketliste aktualisieren:

sudo apt update

 (alle Nodes) Installieren:

sudo apt install -y glusterfs-server

Konfiguration

(alle Nodes) Brick anlegen und mounten:

sudo mkfs.ext4 /dev/sda3
sudo mkdir -p /var/glusterfs/brick1
echo "/dev/sda3 /var/glusterfs/brick1 ext4 defaults 1 2" | sudo tee -a /etc/fstab
sudo mount -a
mount

(node01) Hostname bekannt machen und Firewall aufbohren:

echo -e "188.68.36.82\tnode02" | sudo tee -a /etc/hosts
echo -e "188.68.35.164\tnode03" | sudo tee -a /etc/hosts
sudo ufw allow from 188.68.36.82
sudo ufw allow from 188.68.35.164

(node02) Hostname bekannt machen und Firewall aufbohren:

echo -e "188.68.36.97\tnode01" | sudo tee -a /etc/hosts
echo -e "188.68.35.164\tnode03" | sudo tee -a /etc/hosts
sudo ufw allow from 188.68.36.97
sudo ufw allow from 188.68.35.164

(node03) Hostname bekannt machen und Firewall aufbohren:

echo -e "188.68.36.97\tnode01" | sudo tee -a /etc/hosts
echo -e "188.68.36.82\tnode02" | sudo tee -a /etc/hosts
sudo ufw allow from 188.68.36.97
sudo ufw allow from 188.68.36.82

(alle Nodes) Glusterfs Server starten:

sudo service glusterfs-server start

(node01) Server untereinander bekannt machen:

sudo gluster peer probe node02
sudo gluster peer probe node03

Dabei sollte man jedes mal erhalten:

peer probe: success.

(alle Nodes) Benötigte GlusterFS Volume Verzeichnisse anlegen:

sudo mkdir /var/glusterfs/brick1/common
sudo mkdir /var/glusterfs/brick1/as
sudo mkdir /var/glusterfs/brick1/ns

(node01) Dazugehörige Volumes anlegen:

sudo gluster volume create common replica 3 node01:/var/glusterfs/brick1/common node02:/var/glusterfs/brick1/common node03:/var/glusterfs/brick1/common
sudo gluster volume create as replica 3 node01:/var/glusterfs/brick1/as node02:/var/glusterfs/brick1/as node03:/var/glusterfs/brick1/as
sudo gluster volume create ns replica 3 node01:/var/glusterfs/brick1/ns node02:/var/glusterfs/brick1/ns node03:/var/glusterfs/brick1/ns


Bei Erfolg sollte man erhalten:

volume create: gv0: success: please start the volume to access data

(node01) Also starten wir das Volume:

sudo gluster volume start common
sudo gluster volume start as
sudo gluster volume start ns

Dann erhält man:

volume start: common: success
volume start: as: success
volume start: ns: success

Nochmal prüfen ob alles geklappt hat:

# sudo gluster volume info
Volume Name: as
Type: Replicate
Volume ID: 518a2a7a-124a-4593-99d0-82dc2a2207c4
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: node01:/var/glusterfs/brick1/as
Brick2: node02:/var/glusterfs/brick1/as
Brick3: node03:/var/glusterfs/brick1/as
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

Volume Name: common
Type: Replicate
Volume ID: 3b79c3ec-8738-43d6-8f6d-c93eb8d71f60
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: node01:/var/glusterfs/brick1/common
Brick2: node02:/var/glusterfs/brick1/common
Brick3: node03:/var/glusterfs/brick1/common
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

Volume Name: ns
Type: Replicate
Volume ID: 60a43925-b962-4e80-89d7-01651b28842d
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: node01:/var/glusterfs/brick1/ns
Brick2: node02:/var/glusterfs/brick1/ns
Brick3: node03:/var/glusterfs/brick1/ns
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

(alle Nodes) Mount-Ziele anlegen:

sudo mkdir -p /mnt/data-common
sudo mkdir -p /mnt/data-as
sudo mkdir -p /mnt/data-ns

(alle Nodes) Automount via systemd einrichten:

/etc/fstab
echo "127.0.0.1:common /mnt/data-common glusterfs  defaults,_netdev,noauto,x-systemd.automount 0 0" | sudo tee -a /etc/fstab
echo "127.0.0.1:as /mnt/data-as glusterfs  defaults,_netdev,noauto,x-systemd.automount 0 0" | sudo tee -a /etc/fstab
echo "127.0.0.1:ns /mnt/data-ns glusterfs  defaults,_netdev,noauto,x-systemd.automount 0 0" | sudo tee -a /etc/fstab

Verschlüsselung einrichten

(lokal) Für die Verschlüsselung benötigen wir eine eigene CA, also müssen wir einen Private Key...

openssl genrsa -aes256 -out glusterfs.stdout.cloud.ca-key.pem 4096


(lokal) und das Root CA Zertifikat erstellen (Gültigkeit 5 Jahre):

openssl req -x509 -new -nodes -extensions v3_ca -key glusterfs.stdout.cloud.ca-key.pem -days 1825 -out glusterfs.stdout.cloud.ca-root.pem -sha512

(lokal) Jetzt für jeden node einmal einen Key, CSR und dann das Zertifikat generieren:

openssl genrsa -out node01-key.pem 4096
openssl req -new -key node01-key.pem -subj '/CN=node01' -out node01.csr -sha512
openssl x509 -req -in node01.csr -CA glusterfs.stdout.cloud.ca-root.pem -CAkey glusterfs.stdout.cloud.ca-key.pem -CAcreateserial -out node01.crt -days 1825 -sha512

(lokal) node02

openssl genrsa -out node02-key.pem 4096
openssl req -new -key node02-key.pem -subj '/CN=node02' -out node02.csr -sha512
openssl x509 -req -in node02.csr -CA glusterfs.stdout.cloud.ca-root.pem -CAkey glusterfs.stdout.cloud.ca-key.pem -CAcreateserial -out node02.crt -days 1825 -sha512

(lokal) node03

openssl genrsa -out node03-key.pem 4096
openssl req -new -key node03-key.pem -subj '/CN=node03' -out node03.csr -sha512
openssl x509 -req -in node03.csr -CA glusterfs.stdout.cloud.ca-root.pem -CAkey glusterfs.stdout.cloud.ca-key.pem -CAcreateserial -out node03.crt -days 1825 -sha512

Jetzt muss das CA Zertifikat... 

scp glusterfs.stdout.cloud.ca-root.pem aseith@node01.stdout.cloud:/tmp/glusterfs.ca
scp glusterfs.stdout.cloud.ca-root.pem aseith@node02.stdout.cloud:/tmp/glusterfs.ca
scp glusterfs.stdout.cloud.ca-root.pem aseith@node03.stdout.cloud:/tmp/glusterfs.ca

der Private Key...

scp node01-key.pem aseith@node01.stdout.cloud:/tmp/glusterfs.key
scp node02-key.pem aseith@node02.stdout.cloud:/tmp/glusterfs.key
scp node03-key.pem aseith@node03.stdout.cloud:/tmp/glusterfs.key

und das eigentliche Zertifikat auf die entsprechenden Nodes geschoben...

scp node01.crt aseith@node01.stdout.cloud:/tmp/glusterfs.pem
scp node02.crt aseith@node02.stdout.cloud:/tmp/glusterfs.pem
scp node03.crt aseith@node03.stdout.cloud:/tmp/glusterfs.pem

(alle Nodes) Und auf den Nodes in die richtigen Verzeichnisse verschoben werden.

sudo mv /tmp/glusterfs.* /etc/ssl
sudo chown root: /etc/ssl/glusterfs.*
sudo chmod 640 /etc/ssl/glusterfs.*

(alle Nodes) Management-Verschlüsselung aktivieren, indem die leere Datei /var/lib/glusterd/secure-access angelegt wird:

sudo touch /var/lib/glusterd/secure-access

(alle Nodes) Unmounten der Mount-Ziele, falls sie gebunden sind:

sudo umount /mnt/data-common
sudo umount /mnt/data-ns
sudo umount /mnt/data-as

(irgendein Node) Volumes stoppen:

sudo gluster volume stop common
sudo gluster volume stop as
sudo gluster volume stop ns

(irgendein Node) Jetzt wird's spannend, Verschlüsselung aktivieren:

sudo gluster volume set common auth.ssl-allow 'node01,node02,node03'
sudo gluster volume set as auth.ssl-allow 'node01,node02,node03'
sudo gluster volume set ns auth.ssl-allow 'node01,node02,node03'
sudo gluster volume set common client.ssl on server.ssl on
sudo gluster volume set as client.ssl on server.ssl on
sudo gluster volume set ns client.ssl on server.ssl on

(alle Nodes) Jetzt müssen wir nochmal die Glusterfs-Server durchstarten, damit die Management-Verschlüsselung aktiv wird:

sudo service glusterfs-server stop
sudo service glusterfs-server start

(irgendein Node) Und die Volumes wieder starten:

sudo gluster volume start common
sudo gluster volume start as
sudo gluster volume start ns

(alle Nodes) Und wieder mounten:

sudo mount -t glusterfs 127.0.0.1:/common /mnt/data-common
sudo mount -t glusterfs 127.0.0.1:/as /mnt/data-as
sudo mount -t glusterfs 127.0.0.1:/ns /mnt/data-ns

Docker

(alle Nodes) Docker APT GPG Key hinzufügen, Repo hinzufügen und schließlich Docker Engine und Docker Compose installieren:

sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install -y docker-ce
curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

(alle Nodes) Docker starten:

sudo service docker start
sudo systemctl enable docker

Rancher

(node01) Wir verwenden MySQL für Rancher:

sudo mkdir -p /mnt/data-common/rancher/var_lib_mysql
sudo docker run -d -v /mnt/data-common/rancher/var_lib_mysql:/var/lib/mysql --restart=unless-stopped --name rancher-server rancher/server

 (node01) Rancher installieren, mit MySQL verheiraten:

sudo docker run -d -v /mnt/data-common/rancher/var_lib_mysql:/var/lib/mysql --restart=unless-stopped --name rancher-server rancher/server:stable

(node01) Damit die GUI via SSL/TLS erreichbar ist, wird ein Caddy Server als Proxy davorgeschaltet:

sudo docker run -d -p 80:80 -p 443:443 -v /mnt/data-common/caddy/Caddyfile:/etc/Caddyfile -v /mnt/data-common/caddy/.caddy:/root/.caddy --restart=unless-stopped --link rancher-server --name caddy-rancher zzrot/alpine-caddy:latest

Inhalt der Caddyfile:

rancher.stdout.cloud {
	proxy / rancher-server:8080 {
		transparent
		websocket
	}

	tls MAILADDRESS_HERE
	errors stderr
}


Referenzen

  • No labels
Write a comment…