Sichere Kommunication zwischen HashiCorp Nomad und Traefik mit Consul Connect


Bicycle

In der heutigen schnelllebigen Cloud-nativen Landschaft ist der Bedarf an effizienter Dienst-Orchestrierung, Dienst-Entdeckung und sicherer Kommunikation zwischen Diensten entscheidend. HashiCorp Nomad, Consul Connect und Traefik bilden eine leistungsstarke Kombination, die den Einsatz, die Entdeckung und das Load-Balancing von Diensten mit integrierten Sicherheitsfunktionen vereinfacht. In diesem Beitrag wird untersucht, wie diese Tools zusammen verwendet werden können, um Dienste in einer dynamischen Umgebung effizient zu verbinden und zu verwalten.

Überblick

  • HashiCorp Nomad: Ein einfacher, aber leistungsstarker Scheduler, der für den Einsatz und die Verwaltung containerisierter und nicht-containerisierter Anwendungen im großen Maßstab konzipiert ist.
  • HashiCorp Consul Connect: Eine Service-Mesh-Lösung, die sichere Kommunikation zwischen Diensten mithilfe von gegenseitigem TLS (mTLS) ermöglicht. Sie stellt sicher, dass nur autorisierte Dienste miteinander kommunizieren.
  • Traefik: Ein moderner HTTP-Reverse-Proxy und Load-Balancer, der dynamisch und flexibel ist und sich gut mit verschiedenen Orchestrierungs- und Dienst-Entdeckungs-Tools wie Consul integriert.

Durch die Integration dieser Technologien können wir effiziente Dienst-Orchestrierung, sichere Service-Mesh-Fähigkeiten und intelligentes Traffic-Routing in einer dynamischen Cluster-Umgebung erreichen.

Warum Nomad, Consul Connect und Traefik kombinieren?

Beim Betrieb von Diensten in einer verteilten Umgebung benötigen Sie mehr als nur einen Orchestrator. Hier sind die Gründe, warum jede Komponente wichtig ist:

  1. Nomads Orchestrierung: Nomad ermöglicht es Ihnen, Jobs mühelos über mehrere Knoten hinweg auszuführen. Es verwaltet sowohl containerisierte als auch Legacy-Workloads und ist damit ein vielseitiges Tool für den Einsatz.

  2. Consul Connects Sicherheit: Consul stellt eine sichere Dienst-zu-Dienst-Kommunikation mit mTLS bereit. Das bedeutet, dass alle Dienste, die über Consul Connect kommunizieren, authentifiziert und verschlüsselt sind.

  3. Traefiks Load-Balancing: Traefik integriert sich mit Consuls Dienst-Entdeckung, um als Ingress-Controller und Load-Balancer für Ihre Nomad-Jobs zu fungieren und Traffic intelligent auf Basis von Echtzeit-Dienstinformationen zu routen.

Dieser Stack beseitigt die Komplexität, verschiedene Schichten für Dienst-Entdeckung, Load-Balancing und Sicherheit zu verwalten, indem er einen nahtlosen, integrierten Ansatz bietet.

Wie alles zusammenpasst

Wir folgen unseren in früheren Blogposts verwendeten Beispielen, um Workloads mit HashiCorp Vault gesicherten Geheimnissen bereitzustellen und sichere Kommunikation zwischen Diensten mit Consul Connect zu gewährleisten.

Schritt 1: Einrichtung von HashiCorp Nomad für die Dienst-Orchestrierung

Zunächst müssen Sie einen Nomad-Cluster bereitstellen. Nomad ist leichtgewichtig und kann auf jeder Infrastruktur laufen, von Bare-Metal bis hin zu Kubernetes. Sobald Nomad läuft, können Sie Jobs mithilfe seines HCL-basierten Job-Spezifikationsformats definieren. Diese Jobs beschreiben, wie und wo Anwendungen bereitgestellt werden sollen.

Hier ist unser aktualisierter dynamic-app Nomad-Job, der Consul Connect Sidecar-Proxys beinhaltet. Dieser Job setzt einen einfachen Webdienst ein, der sich mit einer MySQL-Datenbank verbindet und Vault verwendet, um Datenbank-Anmeldeinformationen sicher abzurufen. Der Dienst wird für die sichere Kommunikation bei Consul Connect registriert. Wir haben auch Traefik-Tags hinzugefügt, um den Dienst über Traefik verfügbar zu machen – den Load-Balancer und Ingress-Controller.

 1job "dynamic-app" {
 2  datacenters = ["dc1"]
 3  type        = "service"
 4  namespace   = "demo"
 5
 6  group "dynamic-app" {
 7    count = 1
 8
 9    restart {
10      attempts = 10
11      interval = "5m"
12      delay    = "25s"
13      mode     = "delay"
14    }
15
16    network {
17      mode = "bridge"
18    }
19
20    vault {
21      policies      = ["nomad-dynamic-app"]
22      change_mode   = "signal"
23      change_signal = "SIGINT"
24    }
25
26    service {
27      name = "dynamic-app"
28      port = "8080"
29      tags = ["traefik.enable=true",
30        "traefik.http.routers.dynamic-app.rule=Host(`dynamic-app.127.0.0.1.nip.io`)",
31        "traefik.http.routers.dynamic-app.entrypoints=http",
32        "traefik.http.routers.dynamic-app.tls=false",
33        "traefik.connsulcatalog.connect=true"
34      ]
35      connect {
36        sidecar_service {
37          proxy {
38            upstreams {
39              destination_name = "mysql-server"
40              local_bind_port  = 3306
41            }
42          }
43        }
44      }
45      check {
46        expose   = true
47        type     = "http"
48        name     = "health"
49        method   = "GET"
50        interval = "10s"
51        timeout  = "2s"
52        path     = "/health"
53      }
54    }
55
56    task "dynamic-app" {
57      driver = "docker"
58
59      config {
60        image = "ghcr.io/infralovers/nomad-vault-mysql:1.0.0"
61        volumes = [
62          "local/config.ini:/usr/src/app/config/config.ini"
63        ]
64        ports = [8080]
65      }
66
67      template {
68        destination = "local/config.ini"
69        data        = <<EOF
70    [DEFAULT]
71    LogLevel = DEBUG
72    Port = 8080
73    [DATABASE]
74    Address = 127.0.0.1
75    Port = 3306
76
77    Database = my_app
78    {{ with secret "dynamic-app/db/creds/app" }}
79    User = {{ .Data.username }}
80    Password = {{ .Data.password }}
81    {{ end }}
82
83    [VAULT]
84    Enabled = True
85    InjectToken = True
86    Namespace =
87    Address = {{ env "VAULT_ADDR" }}
88    KeyPath = dynamic-app/transit
89    KeyName = app
90EOF
91      }
92      resources {
93        cpu    = 256
94        memory = 256
95      }
96    }
97  }
98}

Dieser Nomad-Job führt einen dynamic-app Webdienst aus und registriert ihn bei Consul Connect für sichere Kommunikation.

Schritt 2: Sichere Dienstkommunikation mit Consul Connect

Consul Connect ermöglicht es Diensten, die in Consul registriert sind, sicher über mTLS zu kommunizieren. Im obigen Beispiel-Job haben wir einen Consul Connect Sidecar-Proxy für den Webdienst konfiguriert. Dieser Proxy verschlüsselt und entschlüsselt den Traffic zwischen den Diensten.

Schritt 3: Traefik als Load-Balancer und Ingress-Controller

Traefik integriert sich nahtlos mit Consul zur Dienst-Entdeckung und zum Routing. In unserem Setup wird Traefik automatisch Dienste, die in Consul registriert sind, erkennen und den Traffic zu ihnen leiten.

Hier ist ein Traefik-Konfigurationsausschnitt für die Consul-Integration:

 1entryPoints:
 2  web:
 3    address: ":80"
 4
 5providers:
 6  consulCatalog:
 7    endpoint:
 8      address: "127.0.0.1:8500"
 9    exposedByDefault: false
10    connectAware: true
11    connectByDefault: true
12
13api:
14  dashboard: true
15  insecure: true

Mit dieser Konfiguration fungiert Traefik als Reverse Proxy und Load-Balancer für alle in Consul registrierten Dienste, einschließlich derjenigen, die mit Nomad bereitgestellt werden.

Sie müssen Tags zu Ihrem Nomad-Job hinzufügen, um Dienste über Traefik verfügbar zu machen. Zum Beispiel:

1tags = ["traefik.enable=true", "traefik.http.routers.web.rule=Host(`example.com`)"]

Traefik wird diesen Dienst nun erkennen und HTTP-Traffic basierend auf den definierten Regeln routen.

Da wir Consul Connect verwenden, wird Traefik auch über die sichere Kommunikation zwischen Diensten informiert und den Traffic entsprechend leiten, aber wir müssen das connect-Tag in der Tag-Deklaration aktivieren.

1tags = ["traefik.enable=true", "traefik.http.routers.web.rule=Host(`example.com`)", "traefik.connsulcatalog.connect=true"]

Innerhalb der Traefik-Konfiguration müssen Sie die Optionen connectAware und connectByDefault definieren, um Traefik über die Consul Connect-Dienste zu informieren.

1providers:
2  consulCatalog:
3    endpoint:
4      address: "127.0.0.1:8500"
5    exposedByDefault: false
6    connectAware: true
7    connectByDefault: true

Schritt 4: Alles zusammenführen

Sobald Sie Ihre Nomad-Jobs bereitgestellt haben, wird Consul die Dienste automatisch registrieren und Traefik wird sie für das Load-Balancing aufnehmen. Consul Connect stellt sicher, dass die gesamte Kommunikation zwischen den Diensten verschlüsselt und authentifiziert ist.

Zusammenfassend:

  • Nomad stellt die Dienste bereit und verwaltet sie.
  • Consul Connect sichert die Kommunikation zwischen den Diensten.
  • Traefik fungiert als Load-Balancer und routet eingehenden Traffic zu den entsprechenden Diensten.

Vorteile dieses Setups

  • Skalierbarkeit: Dienste können leicht mithilfe der dynamischen Orchestrierung von Nomad skaliert werden.
  • Sicherheit: Consul Connect stellt verschlüsselte und authentifizierte Kommunikation zwischen den Diensten sicher, wodurch Man-in-the-Middle-Angriffe verhindert werden.
  • Dynamisches Load-Balancing: Traefik passt das Traffic-Routing dynamisch basierend auf dem Echtzeit-Zustand der über Consul entdeckten Dienste an.

Fazit

Die Kombination von HashiCorp Nomad, Consul Connect und Traefik bietet eine leistungsstarke und flexible Lösung für den Einsatz, die Entdeckung, die Sicherung und das Routing von Diensten in einer dynamischen Umgebung. Ob Sie eine kleine oder große Infrastruktur betreiben, dieser Stack vereinfacht die Komplexität der Verwaltung von Dienst-Kommunikation, Load-Balancing und Sicherheit, sodass Sie sich auf den Aufbau zuverlässiger und skalierbarer Anwendungen konzentrieren können.

Durch die Nutzung dieser Tools zusammen können Sie den Prozess der Bereitstellung und Verwaltung von Diensten mit Leichtigkeit rationalisieren und gleichzeitig robuste Sicherheit und Leistung gewährleisten.

Zurück Unsere Trainings entdecken

Wir sind für Sie da

Sie interessieren sich für unsere Trainings oder haben einfach eine Frage, die beantwortet werden muss? Sie können uns jederzeit kontaktieren! Wir werden unser Bestes tun, um alle Ihre Fragen zu beantworten.

Hier kontaktieren