221 LXC/LXD [2 PT]

Posted Over 1 year ago. Visible to the public.

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

Aufgaben

  1. Starte einen (oder mehrere Container) und teste, wie du dich auf der Shell Ebene zu diesen verbinden kannst.
  2. 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.
  3. 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.
  4. Erstelle ein LXD Netzwerk, das nur für internen Traffic unter deinen Containern verwendet werden soll.
  5. Erweitere deine cloud-init/cloud-config Konfiguration, um standardmäßig bestimmte Softwarepakete (z.B. vim) zu installieren.
  6. 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>
Claus-Theodor Riegg
Last edit
10 months ago
Marc Dierig
License
Source code in this card is licensed under the MIT License.
Posted by Claus-Theodor Riegg to DevOps Curriculum (2022-10-18 13:24)