Servicemanagement in Netzen - Leischner

Praktikumsblatt 5 - MiniWhoami

Ziel dieses Praktikumblatts ist es, einen Service miniwhoami als IPv6-Service mit eigener IPv6-Adresse zu deployen. Dies geschieht in zwei Schritt:

  • Development and Operations des Services miniwhoami: Von der Programmierung in den Wirkbetrieb (Aufgabe 1 bis 4).
  • Docker-Konfiguration von IPv6 und Einbindung des Services miniwhoami in IPv6 (Aufgabe 5 bis 8).

Ergebnis ist ein Dockerservice miniwhoami, der über eine eigene IPv6-Adresse und eine eigene URL angesprochen werden kann.

 

Aufgabe 1 - Anwendung miniwhoami

Bauen Sie Ihren kleinen Webserver miniserver zu einem Webservice miniwhoami aus, der folgende Eigenschaften hat:

  1. Der Webservice miniwhoami zeigt den Hostnamen, die IP-Adressen (IPv4 und IPv6) des Containers und die Anzahl der Zugriffe an.
  2. Die Hintergrundfarbe von miniwhoami ändert sich in Abhängigkeit vom Hostnamen.
    Konkret: Ein anderer Hostname bewirkt eine andere Hintergrundfarbe. Diese Eigenschaft ist für die Analyse von Loadbalancing-Szenarien nützlich, denn hierdurch erkennt man sofort, ob sich beim Zugriff auf den Webservice miniwhoami der Hostname geändert hat, also ein anderer Container geantwortet hat.
  3. Alternative Lösungsvariant zu Teil b.: Der Hintergrund ändert sich in Abhängigkeit von der IP-Adresse des Containers.
  4. Testen Sie Ihre Anwendung auf Ihrem lokalen Rechner.

Ergebnis von Aufgabe 1: Ein fertiges, getestetes Programm miniwhoami in einer Programmiersprache Ihrer Wahl.

 

Aufgabe 2 - Lokales Deployment von miniwhoami

Im nächsten Schritt, d.h. in dieser Aufgabe, soll die Anwendung miniwhoami in einer Dockerumgebung laufen. Als Dockerumgebung verwenden Sie zunächst Ihr lokales Linux-Desktop-System, auf dem Sie Docker bereits installiert haben.

  1. Erstellen Sie für Ihre Anwendung miniwhoami einen Dockerfile und erzeugen Sie damit ein mit miniwhoami getaggtes Dockerimage . Geben Sie Ihr Dockerfile und das Docker-Kommando für die Erstellung des Images an?
  2. Deployen Sie mit docker run eine Instanzen Ihrer Webanwendung miniwhoami auf Ihrem Linux-Desktop-System. Verwenden Sie hierzu den Port 50521. Wie lautet Ihr docker-run-Kommando?
  3. Deployen Sie mit einem docker-compose File zwei Instanzen Ihrer Webanwendung miniwhoami auf Ihrem Linux-Desktop-System. Beide Instanzen sollen über ein dediziertes gemeinsames Netz verbundenn sein. Verwenden Sie für die drei Container die Ports 50522 und 50523.
  4. Gibt es verschiedene Vorgehensweisen bzw. Varianten für das lokale Deployment?

Ergebnis von Aufgabe 2: Das Programm miniwhoami läuft als Container in der lokalen Umgebung und ist dort getestet.

 

Aufgabe 3 - Remote Deployment von miniwhoami

In dieser Aufgabe soll die Anwendung miniwhoami auf Ihren Laborserver serv-ss21 deployed werden. Hierzu wird das Image zunächst von Ihrem Linux-Desktop-System in eine Docker-Registry gepushed. Von dieser kann dann das Image bequem mit docker run auf jedem Dockerhost installiert (deployed) werden.

  1. Auf Ihrem Gitlab-Account (https://git.fslab.de) besitzen Sie bereits eine Docker Registry. Machen Sie sich mit der Bedienung dieser Registry vertraut. Testen Sie insbesondere den Zugriff auf diese Registry. (Link hierzu: https://docs.gitlab.com/ee/user/packages/container_registry/ )
  2. Erzeugen Sie für Ihre Webanwendung miniwhoami ein für die Docker-Registry getagtes Dockerimage . Welches docker-Kommando haben Sie hierzu benutzt?
  3. Pushen Sie Ihr Image der App miniwhoami auf die Registry von https://git.fslab.de hoch.
  4. Deployen Sie mit docker run eine Instanz miniwhoami_50531 Ihrer Webanwendung miniwhoami auf Ihren Laborserver serv-ss21. Verwenden Sie hierzu den Ports 50531. Welches Kommando verwenden Sie hierzu?
  5. Deployen Sie mit Hilfe eines docker-compose Files zwei Instanzen miniwhoami_50532 und miniwhoami_50533 Ihrer Webanwendung miniwhoami auf Ihren Laborserver serv-ss21. Verwenden Sie hierzu die Ports 50532 und 50533.
  6. Wie beurteilen Sie den Aufwand für das Deployment? Könnte das Deployment noch weiter vereinfacht werden?

Meine Lösung:

 

Aufgabe 4 - Untersuchung von Netzstrukturen

  1. Ihre drei miniwhoami-Container miniwhoami_50531, miniwhoami_50532 und miniwhoami_50533 besitzen jeweils ein IPv4 Interface eth0. Erstellen Sie für Ihre drei miniwhoami-Container eine Liste mit den Spalten: Containername, IP-Adresse, Netzmaske, Default Gateway. Besitzt das Interface eth0 auch eine IPv6-Adresse?
  2. Geben Sie mit dem Kommando docker network ls eine Liste der Docker-Netze aus. Mit welchen Netzen sind Ihre Container jeweils verbunden? Welches Kommando verwenden Sie zur Analyse?
  3. Gehen Sie in Ihre miniwhoami-Container und testen Sie, in welchen Containern Sie Zugriff nach außen haben. Interpretieren Sie Ihr Ergebnis.
  4. Warum können Sie die Container überhaupt mit IPv6 von außen erreichen?
  5. Gehen Sie mit dem Tool netshoot in das Netz, in dem sich der Container miniwhoami_50531 befindet. Läßt sich der Container über die IP-Adresse und den Servicenamen anpingen?
  6. Gehen Sie mit dem Tool netshoot in das Netz, in dem sich die Container miniwhoami_50532 und miniwhoami_50533 befinden. Lassen sich die beiden Container über die IP-Adresse und den Servicename anpingen?

 

Docker+IPv6

Jeder von Ihnen hat zu Beginn der Lehrveranstaltung einen öffentlichen IPv6-Adressraum zur eigenen Verwaltung erhalten. Ich habe beispielsweise zu meiner Verwendung den öffentlichen IPv6-Adressraum 2001:638:408:200:fb60::/78 . Für meinen Dockerhost serv-ss21 benutze ich hieraus bisher nur die IPv6-Adresse 2001:638:408:200:fb60::1. Auf meinem Dockerhost serv-ss21 möchte ich nun Dockerservices mit einer eigenen IPv6-Adresse in dem mir zugewiesenen Adressraum betreiben.

Hierzu werden wir in Docker IPv6 aktivieren und so konfigurieren, dass Container mit einer eigenen IPv6-Adresse in dem zugewiesenen öffentlichen IPv6-Subnetz betrieben werden können.

 

Aufgabe 5 - Docker IPv6-Aktivierung

  1. Aktivieren Sie auf Ihrem Server für Ihre Dockerinstallation IPv6, indem Sie die Datei /etc/docker/daemon.json in geeigneter Weise konfigurieren. In der Variablen "fixed-cidr-v6" soll dem Dockerdämon ein geeignetes /80 Subnetz übergeben werden, das er für die Verwaltung von Docker-Containern verwenden soll . Dieses IPv6-Subnetz nehmen Sie aus dem Ihnen zugeteilten /78 IPv6-Subnetz . Teilen Sie dazu den Ihnen zugeteilten Adressraum in vier kleinere /80-Subnetze. Geben Sie diese (Ihnen gehörende) Subnetze an. Wählen Sie aus diesen vier Subnetzen ein Subnetz aus, in dem nicht die Adresse Ihres Servers liegt. Dieses Subnetz übergeben Sie dem Dockerdämon über die Variable "fixed-cidr-v6" zur Verwaltung. Welcher Bridge ist das von ihnen gewählte Subnetz zugeordnet?
  2. Starten Sie einen Container miniwhoami_50551 am Port 50551 Ihres Servers serv-ss21 . Greifen Sie mit einem Browser über IPv6 auf diesen Container zu.
    Fragen:
    • Welche IPv6-Adresse wird Ihnen beim Aufruf von miniwhoami_50551 im Browser angezeigt? Welches Interface besitzt diese IPv6-Adresse. Wie ist diese Adresse gebildet?
    • Von wo aus ist der Container miniwhoami_50551 über diese IPv6-Adresse per ping erreichbar? Welche IPv6-Addressen können per ping von miniwhoami_50551 aus erreicht werden?
    • Überprüfen Sie im Container miniwhoami_50551 mit ip -6 r die Routingtabelle. Wird das /80 IPv6-Subnetz richtig geroutet?
    • Warum wird der Container miniwhoami_50551 über die IPv6-Serveradresse erreicht?
    • Welche Voraussetzung müssen gegeben sein, damit der Container miniwhoami_50551 über seine eigene IPv6-Adresse von außen erreichbar ist?

Meine Lösung:

 

Aufgabe 6 - Docker IPv6-NDP

Damit auf Ihre Container über IPv6 zugegriffen werden kann, muss das IPv6-Interface des Servers serv-ss21 als NDP-Proxy fungieren. Nur so ist die Auflösung der IPv6-Adresse eines Containers hinter dem IPv6-Interface möglich. Der Proxy wickelt also das NDP-Protokoll nach außen für die Container hinter dem IPv6-Interface ab.

  1. Manuelle Konfiguration der NDP-Funktion:
    Schalten Sie zunächst mit sysctl net.ipv6.conf.ens??.proxy_ndp=1 für das richtige Interface die NDP-Proxy-Funktion ein. Konfigurieren Sie mit ip -6 neigh add ...  die IPv6-Adresse für die die NDP-Proxy-Funktion gelten soll. Wie lautet in Ihrem Fall das Kommando im Detail? Testen Sie die NDP-Funktionalität, indem Sie ein ping von außen auf die IPv6-Adresse des miniwhoami_50551 Containers machen (siehe Aufgabe 5b).
  2. Installation eines NDP-Proxies:
    Der NDP Proxy Daemon ndppd (siehe GIT) wird auch über das Ubuntu-Repo bereitgestellt. Installation mit apt install ndppd. Ein Vorlage für die benötigte Konfigurationsdatei /etc/ndppd.conf haben Sie in der Datei /usr/share/doc/ndppd/ndppd.conf-dist . Sie müssen nur das Interface und die Regeln (rule 1111:: ) anpassen. Konkret müssen Sie 1111:: durch Ihr Subnetz ersetzen (genauer: durch das Subnetz ersetzen, für das Sie die NDP-Funktion wünschen). Wenn Sie mehr als ein Subnetz mit NDP ausstatten möchten, geben Sie mehrere Regeln an. Der Autostart von ndppd war bei mir schon aktiviert; sonst aktivieren Sie ihn über systemctl.
  3. Geben Sie die von Ihnen verwendete Konfigurationsdatei ndppd.conf an und erklären Sie die wichtigsten Elemente daraus.

 

Aufgabe 7 - Zusätzliches IPv6-Subnetz

Richten Sie in dem Ihnen zugewiesenen Adressraum 2001:638:408:200:FA??::/78 ein zusätzliches öffentliches IPv6-Subnetz my_IPv6 ein. Dieses Subnetz soll für dedizierte öffentliche IPv6-Server mit statischen IPv6-Adressen verwendet werden.

Fragen:

  • Welche Größe /? sollte für dieses Netz gewählt werden? Diskutieren Sie verschiedene Alternativen.
  • Welches öffentliche IPv6-Subnetz wählen Sie konkret für my_IPv6? Wie lautet Ihr Kommando zur Netzgenerierung?

 

Aufgabe 8 - Services mit eigener IPv6 Adresse

  1. Wählen Sie eine IPv6-Adresse aus Ihrem Subnetz my_IPv6 . Deployen Sie mit docker run eine Instanz Ihrer Webanwendung miniwhoami auf Ihren Laborserver serv-ss21. Welches Kommando verwenden Sie hierzu?
  2. Wählen Sie zwei weitere IPv6-Adresse aus Ihrem Subnetz my_IPv6 .  Deployen Sie mit Hilfe eines docker-compose Files zwei Instanzen Ihrer Webanwendung miniwhoami auf Ihren Laborserver serv-ss21. Geben Sie Ihr Compose-File an.
  3. Sie haben jetzt drei Services miniwhoami1, miniwhoami2 und miniwhoami3, die jeweils über eine eigene IPv6-Adresse erreichbar sind. Konfigurieren Sie Ihre Domain url.my so, dass Ihre Services über miniwhoami1.url.myminiwhoami2.url.my und  miniwhoami3.url.my erreichbar sind.
  4. Pingen Sie meinen Service miniwhoami1 über die URL miniwhoami1.servmgmt.de an. Was fällt Ihnen auf? Wie interpretieren Sie das Ergebnis?

Meine Lösung:

 

Aufgabe 9 - Reading/Fragen

  1. Thema Migration von trad. Apps nach Docker
    Lesen Sie: Beantworten Sie folgende Fragen:
    1. Diskutieren Sie strukturiert die Herausforderungen und Schwierigkeit bei der Containerisierung vorhandener Anwendungen. Erläutern Sie, welche Klasse von Anwendungen sich besonders leicht und welche besonders schwierig containerisieren lassen. Illustrieren Sie Ihre Ausführungen mit (drei bis vier) prägnanten Beispielen.
    2. Erläutern Sie für die Containerisierung die beiden nachfolgenden Use Cases, gehen Sie dabei auf die dahinterliegende Problematik ein, nennen Sie Vor- und Nachteile:
      •  End of Life Containerization,
      • Continued Development Containerization.
    3. Erläutern Sie verschiedene Image-Typen, die für die Entwicklung von Containerumgebungen zur Verfügung stehen. Erläutern Sie jeweils die Vor- und Nachteile.
    4. Während der Entwicklung mit Docker entstehen eine Vielzahl von Images. Erläutern Sie Strategien und Ansätze für das Management von Docker-Images, um nicht die Übersicht zu verlieren.
    5. Beim Design mit Containern besteht eine große Freiheit in der Strukturierung des Gesamtsystems. Erläutern und diskutieren Sie anhand von aussagekräftigen und konkreten Beispielen, wie die Granularität der verwendeten Container zu wählen ist. Leiten Sie daraus allgemeine Regeln und Prinzipien zur Containerisierung ab.
    6. Für einen Applikation Stack sind eine Vielzahl von Eigenschaften und Parametern an verschiedenen Stellen zu konfigurieren. Geben Sie an, wann, was, wo zu konfigurieren ist und erläutern Sie dies durch aussagekräftige Beispiele.
    7. Komplexe Container-Systeme werden im Allgemeinen aus bereits vorhandenen Containern aufgebaut. Die Qualität des so entstehenden Container-Systems hängt wesentlich von der Qualität der verwendeten Container ab. Geben Sie Methoden und Vorgehensweisen an, wie man qualitativ hochwertige Images finden kann. (Kriterienkatalog)
    8. Was versteht man unter dem Konzept "Infrastructure as Code". Erläutern Sie, was dieses Konzept für die praktische Anwendung bedeutet. Was sind die zu erwartenden Benefits? Was sind die besonderen Herausforderungen?
  2. Thema Docker Datenmanagement
    Lesen Sie:
  3. Beantworten Sie folgende Fragen:
    1. Was versteht man im Zusammenhang mit Docker unter einem "bind mount" ?
    2. Was versteht man im Zusammenhang mit Docker unter einem "volume" ?
    3. Wann verwenden Sie bei Docker für die Datenspeicherung einen "bind mount" und wann besser ein "volume"? Begründen Sie Ihre Aussage.
    4. Welche Möglichkeiten bietet Docker-Compose, um sich mit einem Dateisystem zu verbinden? Beschreiben Sie die vorhandenen Möglichkeiten in eigenen Worten.
  4. Thema Docker Networking Basics
    Lesen Sie:
  5. Beantworten Sie folgende Fragen:
    1. Welche Network-Driver stellt Docker standardmäßig zur Verfügung? Beschreiben Sie jeden der Network-Driver kurz. Was sind typische Anwendungen für jeden dieser Network-Driver.
    2. Was sind die Unterschiede zwischen einer User-Defined Bridges und der Default-Bridge? Erläutern Sie diese an Hand von praktischen Beispielen.
    3. Erklären Sie im Detail die Funktion und Anwendung des MACVLAN-Treibers.
  6. Thema Docker Swarm und Docker Overlay Networks.
    Lesen Sie: Diese Artikel dienen der Vorbereitung auf die Präsentation 10 am 20. Mai 2021: Docker Swarm und Docker Overlay Networks (Tegang)

 

 

 

 

Impressum | Datenschutz | leischner.inf.h-brs.de, last modification: 23.08.2021-16.15