kalafoto - stock.adobe.com

Docker-Container mit dem Nginx Load Balancer kontrollieren

Docker ist eine effiziente Container-Plattform, aber sie ist nicht perfekt. Mit diesem Tutorial für den Nginx Load Balancer lässt sich die Umgebung hochverfügbar machen.

Docker ist zwar die De-facto-Plattform geworden, auf der viele Unternehmen Container einsetzen und verwalten. Aber die Technologie ist nicht hochverfügbar. Der Ausfall eines Docker-Hosts würde zum Verlust des Dienstes führen. Operative Teams können jedoch den Nginx Load Balancer verwenden, um eine hohe Verfügbarkeit und Skalierbarkeit zu erreichen.

Nginx ist ein Open-Source-Webserver, der Layer 7 Request Routing und Load Balancing zur Optimierung der Anwendungsleistung bietet. Um Docker damit hochverfügbar zu machen, beginnen Sie mit einem Zwei-Knoten-Setup, das vom Load Balancer unterstützt wird.

Docker und Nginx installieren

Installieren Sie zunächst zwei Ubuntu-Instanzen auf separaten Hosts und konfigurieren Sie diese mit statischen Adressen. Um eine Docker-Instanz mit Nginx einzurichten, verwenden Sie für jede einzelne Instanz folgende Befehle:

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install docker.io -y

Der Befehl install docker.io installiert Docker aus dem Ubuntu-Repository. Sobald Docker eingerichtet ist, lässt sich eine Docker-Instanz leicht bereitstellen. Vor der Bereitstellung sollten sie jedoch die Webseiten außerhalb der Docker-Instanz speichern. Dieser Schritt stellt sicher, dass alle Instanzen den gleichen Code ausführen und ermöglicht es Entwicklern, eine Versionskontrolle des Codes zu erstellen. Um die HTML-Daten zu speichern, sollten Sie auf jedem Host einen neuen Ordner erstellen:

mkdir -p /data/www

Eine Standard-Webseite zeigt an, wohin der Frontend Load Balancer in diesem Zwei-Knoten-Setup den Datenverkehr geschickt hat. Erstellen Sie für jeden Knoten eine einfache Webseite, indem Sie einige grundlegende HTML-Elemente in eine Datei kopieren, und machen sie diese dann zur Indexseite:

echo "<h1>Hello 1</h1>" > /data/www/index.html

Ändern Sie für den zweiten Host die Instanznummer auf 2 wie in <h1>Hello 2</h1>. Verwenden Sie dann die folgenden Befehle, um die lastverteilten Server mit HTML-Ordnern auszuführen:

docker run --name nginx -v /data/www:/usr/share/nginx/html:ro -d -p
80:80 nginx

Der obige Befehl führt die Docker-Instanz aus und ordnet /usr/share/nginx/html dem Ordner /data/wwww auf dem Host schreibgeschützt zu. Diese Konfiguration spart Platz, da man verhindert, dass möglicherweise Dutzende von Instanzen entstehen. Außerdem werden die bereitgestellten Dateien über alle Instanzen hinweg konsistent gehalten, was ein Abdriften der Konfiguration verhindert.

Als nächstes stellen Sie die Nginx-Webserver innerhalb der Instanz auf Port 80 ein, damit die Anfragen über den Load Balancer an ihn weitergeleitet werden können.

Den Load Balancer einrichten

An dieser Stelle sollten Sie Ihre Aufmerksamkeit auf den Load-Balancing-Frontend-Server richten. Dieser Server könnte auf einem Docker-Container laufen, aber in diesem Tutorial ist die Instanz eine Standard-VM.

Installieren Sie einen dritten Ubuntu-Server und verwenden Sie folgende Befehle, um die Komponenten für Nginx zu installieren:

sudo apt-get update

sudo apt-get upgrade -y

sudo apt-get install nginx -y

Starten Sie die virtuelle Maschine neu und stellen Sie sicher, dass der Nginx Load Balancer in einem Webbrowser korrekt angezeigt wird. Konfigurieren Sie dann den reinen Nginx-Webserver so, dass er zu einem Load Balancer wird. Auf einem Standard Ubuntu-Server befindet sich die Konfigurationsdatei für Nginx in /etc/nginx/nginx/nginx.conf.

Nginx ist zum Glück nicht mit einer riesigen und komplexen Basiskonfigurationsdatei überlastet. Die Load-Balancing-Komponente wird in zwei Hauptschritten aufgebaut: Definieren Sie zunächst eine Gruppe von Servern, die an der Load-Balancing-Konfiguration beteiligt sein sollen. Weisen Sie dann Nginx an, diese Anfragen an einen der Load-Balancing-Server in der Gruppe weiterzuleiten.

Standardmäßig verwendet der Nginx Load Balancer ein Round-Robin-Setup. Bei diesem werden die Workloads gleichmäßig und nacheinander auf die Knoten verteilt. Daneben gibt es weitere Optionen für das Load Balancing. IP-Hash-basiertes Routing beispielsweise wird für Sticky Sessions verwendet. Es gibt auch die Möglichkeit, Instanzen zu definieren, in denen der gleiche Server alle Anfragen für einen bestimmten Benutzer bearbeitet.

Sichern Sie die Konfigurationsdatei für Nginx - sie hat den Namen nginx.conf. Löschen Sie dann die Inhalte der aktuellen Datei und ersetzen Sie diese durch den folgenden Code:

http {
         upstream backend {
                server 192.168.0.97;
                server 192.168.0.98;
         }

         server {
                listen 80;
                location / {
                       proxy_pass http://backend;
                }
        }
}

Das Upstream-Backend kann einen beliebigen Namen haben und wird von der Gruppe der Server eingerichtet, die das Load Balancing ausführen. Die nächsten beiden Codezeilen definieren die Server. Wenn es gewünscht wird, können auch Domainnamen verwendet werden.

Die zweite Gruppe von Befehlen legt fest, dass der Standard-Port 80 Anfragen akzeptiert.

Die beiden folgenden Zeilen implementieren im Wesentlichen den Proxy-Dienst. Der Befehl location / leitet den gesamten Traffic für diese Website oder die IP-Adresse an den Nginx Load Balancer weiter. Der Proxy-Pass definiert die Gruppe der zu verwendenden Server, die in der vorherigen Befehlsgruppe konfiguriert wurden.

Verwenden Sie anschließend den folgenden Befehl, um den Nginx Load Balancer neu zu starten und den Dienst live zu schalten:

sudo systemctl reload nginx

Testen Sie den Load Balancer

Abbildung 1: Der Load Balancer bei der Arbeit.Abbildung 1: Der Load Balancer bei der Arbeit.

Öffnen Sie zum Testen einen Webbrowser und geben Sie die IP-Adresse oder die URL des frontseitigen Load Balancers ein. Er sollte Hello 1 oder Hello 2 anzeigen – je nachdem, an welchen Server der Load Balancer die Anforderung weiterleitet.

Nächste Schritte

Mit Docker verschiedene Softwaretests ausführen.

Docker unter Windows: Die Konfiguration des Netzwerks.

Wie Angreifer Docker-APIs für Krypto-Jacking nutzen.

Erfahren Sie mehr über Containervirtualisierung