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 ufwShow archive.org snapshot
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 und ufw 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>