LXD: lxc remote add mit port forwarding

Wie kann von ausserhalb des Netzwerkes zwei LXD-Installationen verwaltet werden mit einem lxc client? In diesem Post ist eine mögliche Lösung mit Port Fowarding auf der Firewall.

Wenn du 2 Server mit LXD eingerichtet hast und diese von ausserhalb des Netzwerkes verwalten möchtest, kannst du folgendermassen vorgehen:

1. Stelle sicher das die LXD Server vim einem anderen Geräte im Netwzerk erreichbar sind, nicht nur vom lokalen Host:

lxc config set core.https_address [::]:8443
lxc config set core.trust_password something-secure

2. Überprüfe die Ports & IPs auf welche beide LXD Server hören:

lxc info | grep -E -C2 "(https|address)"
outputs something like:

config:
core.https_address: '[::]:8443'
core.trust_password: true
api_extensions:
--
- patch
- usb_devices
- https_allowed_credentials
- image_compression_algorithm
- directory_manipulation
--
public: false
environment:
addresses:
- 192.168.xxx.xxx:8443
architectures:

Standardport ist 8443 wie hier zu sehen ist. Beide Server laufen in dieser Anleitung auf dem Standardport. Die IP braucht ihr für die Firewallregeln.

3. Port Weiterleitung auf der FW einrichten:

Da beide LXD Server mit demselben Port kommunizieren, vergeben wir zwei neue Ports die von ausserhalb erreichbar sind. Zum Beispiel 8444 und 8445.
Diese werden dann jeweils zu den IP Adressen der LXD Server weitergeleitet mit den Zielport 8443.

Die Portweiterleitungen auf der FW einrichten:

<domäne/IP>:8444 --> <LXDServer01/IP>:8443
<domäne/IP>:8445 --> <LXDServer02/IP>:8443

4. Hinzufügen als lxc remote zum lokalen lxc client “ausserhalb” der Firewall:

Jetzt können die zwei LXD Server zum beliebigen lxc clients als “remote” hinzugefügt werden:

lxc remote add meinLXDServerName01 sbd.domainname.tld:8444
Certificate fingerprint: xyzabcd1234xyzabcd1234xyzabcd1234
ok (y/n)? y
Admin password for meinLXDServerName01:
Client certificate stored at server: meinLXDServerName01


lxc remote add meinLXDServerName02 sbd.domainname.tld:8445
Certificate fingerprint: xyzabcd1234xyzabcd1234xyzabcd1234
ok (y/n)? y
Admin password for meinLXDServerName02:
Client certificate stored at server: meinLXDServerName02

oder mit IP

lxc remote add meinLXDServerName01 192.168.xxx.xxx:8444
...
lxc remote add meinLXDServerName02 192.168.xxx.xxx:8445
...

5. Überprüfe die lxc “remotes”

lxc remote list
...
+---------------------+---------------------------------+-----+----+----+
| meinLXDServerName01 | https://sbd.domainname.tld:8444 | lxd | NO | NO |
+---------------------+---------------------------------+-----+----+----+
| meinLXDServerName02 | https://sbd.domainname.tld:8445 | lxd | NO | NO |
+---------------------+---------------------------------+-----+----+----+
...

6. Einige Befehle zum testen

Auflisten aller LXCs beider LXD Server:

lxc list meinLXDServerName01: && lxc list meinLXDServerName02:

Stoppen, kopieren, umbenennen und starten des Containers container01 von einem LXD Server zum anderen:

lxc stop meinLXDServerName01:container01 && lxc copy meinLXDServerName01:container01 meinLXDServerName02:container01-copy && lxc start meinLXDServerName02:container01-copy

Stoppen, verschieben und starten eines Containers:

lxc stop meinLXDServerName02:Web01 && lxc move meinLXDServerName02:Web01 meinLXDServerName01:Web01 && lxc start meinLXDServerName01:Web01

“default” Profil von einem LXD Server anzeigen:
lxc profile show meinLXDServerName02:default

Nur solltet ihr in der Lage sein von “aussen” die LXD Server zu verwalten.

Verwendete Versionen in dieser Anleitung:

LXD Server versionen (beide Server): server_version: "2.12"

LXC Client:

lxc --version
2.12

Mehr zu LXD: https://stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/

LXD auf Github: https://github.com/lxc/lxd

lxc client für OS X (verwendet für diesen Post): https://libraries.io/homebrew/lxc

lxc client for Windows: https://ci.appveyor.com/project/lxc/lxd/branch/master/artifacts