Als DevOps Engineer kann es häufiger vorkommen, dass du ein lokales Testsetup bauen musst, um eine bestimmte Software oder ein Tool zu testen. Dafür bieten sich VMs oder Linux Container an. In diesem Kapitel lernst du, wie du lokal Linux Container aufsetzen und konfigurieren kannst.
Da man seine Linux Container auch effizient konfigurieren möchte, machen wir auch einen Ausflug zu Cloud-Init, das dir auch an anderen Stellen noch gute Dienste leisten wird.
Ziele
- Du hast den Unterschied zwischen VMs und Linux Containern verstanden
- Du hast den Unterschied zwischen Linux- und Anwendungs-Containern (z.B. Docker) verstanden
- Du verstehst, wann man was zum Einsatz bringt
- Du kannst Linux Container starten
- Du kannst dich zu Linux Containern auf deinem lokalen System verbinden
- Du weißt, wie du Profile für deine Linux Container anlegst und diese nutzt
- Du weißt, wie du unterschiedliche Netzwerke für deine Linux Container konfigurieren kannst
- Cloudinit:
- Was ist Cloudinit?
- Was ist der Unterschied zwischen Vendor- und Userdata?
- Was ist
cloud-config
?
Inhalte
Für ein paar Aufgaben wirst du Firewall Regeln auf deinem Arbeitsgerät anpassen müssen. Standardmäßig ist auf makandra Geräten die ufw
(uncomplicated firewall) aktiviert. ufw
konfiguriert sogenannte iptables
Regeln. Wie iptables funktioniert lernst du in einem späteren Kapitel. Für hier reicht es aus, wenn du dich ein wenig mit ufw
beschäftigst:
ubuntuusers Wiki ufw
Show archive.org snapshot
- Containerization vs. Virtualization Show archive.org snapshot
- LXC vs LXD Show archive.org snapshot
- LXD getting started Show archive.org snapshot
- LXD cloudinit Show archive.org snapshot
- Cloudinit Quick-start tutorial with LXD Show archive.org snapshot
- Cloudinit Configurations Show archive.org snapshot
- Cloudinit Userdata Formats Show archive.org snapshot
- Cloud-config examples Show archive.org snapshot
- Cloudinit network Show archive.org snapshot
- LXD networking Show archive.org snapshot
- LXD Network ACLs Show archive.org snapshot
Aufgaben
- Verwende diese Card HowTo: Install and configure LXD, um
lxd
zu installieren und initial zu konfigurieren. Bedenke, dass dein Notebook mit vorkonfigurierten Firewall-Regeln ausgestattet ist. - Starte einen (oder mehrere Container) und teste, wie du dich auf der Shell Ebene zu diesen verbinden kannst.
- Stelle sicher, dass deine Container Internetzugriff haben.Teste nicht nur ICMP Traffic. Du musst ggf. mit
ufw allow in on lxdbr0
undufw route allow in on lxdbr0
erlauben. - Erstelle ein Profil, welches dir beim erstellen eines Containers einen Benutzer mit deinem Namen anlegt. Der Benutzer soll
sudo
Berechtigungen haben und deinen SSH public key hinterlegt haben. - Erstelle ein LXD Netzwerk, das nur für internen Traffic unter deinen Containern verwendet werden soll.
- Erweitere deine
cloud-init
/cloud-config
Konfiguration, um standardmäßig bestimmte Softwarepakete (z.B.vim
) zu installieren. - Passe dein zuvor erstelltes Profil so an, dass das neue Netzwerk als zusätzliches Netzwerkinterface eingebunden wird. Am besten wählst du auch hier ein Bridge Interface. Internet egress soll weiterhin über das default Interface funktionieren. Starte mit dem Profil 2 Container und prüfe, ob diese über das neue Netzwerk kommunizieren können (IP). Beachte, dass es nicht ausreicht die Interfaces in der LXD Konfiguration hinzuzufügen, sondern du auch eine Netzwerkkonfiguration in Cloudinit anpassen musst, da deine Interfaces sonst keine IPv4 Adresse erhalten. Beachte außerdem die Routing Konfiguration. Der Internet Egress soll über die Firewall Regeln auf deinem Host System eingeschränkt sein. Du brauchst hier keine ACLs:
$ sudo ufw deny in on <network_name>
$ sudo ufw deny out on <network_name>
$ sudo ufw route deny in on <network_name>