DevOps und Cloud-Reifegradmodelle verstehen: Ein Leitfaden zur Verbesserung Ihrer IT-Strategie
Im heutigen schnelllebigen Technologiebereich sind DevOps- und Cloud-Praktiken entscheidend, um die Software-Bereitstellung zu beschleunigen und
In modernen cloudnativen Umgebungen ist Sicherheit von größter Bedeutung. Eine der zentralen Herausforderungen besteht darin, die Kommunikation zwischen Microservices zu sichern. Egal, ob Sie eine monolithische Anwendung oder eine Reihe von Microservices auf HashiCorp Nomad betreiben, die Sicherung der Kommunikation zwischen Diensten ist entscheidend, um unbefugten Zugriff zu verhindern und die Datensicherheit zu gewährleisten. Hier kommt HashiCorp Consul Connect ins Spiel, eine leistungsstarke Service-Mesh-Lösung, mit der Sie die Kommunikation zwischen Diensten sichern können, ohne Ihren Anwendungscode ändern zu müssen.
In diesem Blogbeitrag werden wir erläutern, wie Sie die Kommunikation Ihrer Workloads auf HashiCorp Nomad mit HashiCorp Consul Connect absichern können und warum dies ein wesentlicher Bestandteil Ihrer Service-Mesh-Strategie ist.
Consul Connect ist Teil des Consul-Service-Mesh von HashiCorp und bietet eine sichere Service-zu-Service-Kommunikation in Ihrer Infrastruktur. Dies wird durch die Aktivierung von gegenseitigem Transport Layer Security (mTLS) zwischen Diensten erreicht. Jeder Dienst erhält eine eigene Identität, und Consul erzwingt, dass nur vertrauenswürdige Dienste miteinander kommunizieren dürfen. Durch die Verwendung von Connect wird die Kommunikation zwischen Diensten authentifiziert und verschlüsselt, sodass die Netzwerksicherheit auch in feindlichen oder kompromittierten Umgebungen gewahrt bleibt.
Nomad ist ein hochskalierbarer, flexibler Orchestrator zur Bereitstellung und Verwaltung von Anwendungen. Während Nomad Workloads effizient plant und ausführt, fehlen ihm jedoch native Netzwerksicherheitsfunktionen wie die verschlüsselte Kommunikation zwischen Diensten. Hier kommt Consul Connect ins Spiel. Durch die Integration von Nomad mit Consul Connect können Sie Zero-Trust-Sicherheit für Ihre Workloads hinzufügen und eine sichere Kommunikation zwischen Microservices gewährleisten, auch in komplexen Multi-Cloud- oder Hybridumgebungen.
Einige wichtige Gründe für die Integration von Consul Connect mit Nomad:
Wir folgen dem Beispiel, das wir mit der Sicherung von Geheimnissen in HashiCorp Nomad-Payloads unter Verwendung von HashiCorp Vault begonnen haben. Wenn Sie es noch nicht gelesen haben, finden Sie es hier.
Um Consul Connect zu verwenden, müssen Sie Consul Connect in Ihrem Consul-Cluster config.json
aktivieren, indem Sie den folgenden Abschnitt hinzufügen:
1{
2 "connect": {
3 "enabled": true
4 }
5}
Anschließend müssen Sie sicherstellen, dass Nomad in Consul integriert ist. Fügen Sie in Ihrer Nomad-Serverkonfigurationsdatei (nomad.hcl
) den folgenden Abschnitt hinzu, um die Consul-Integration zu aktivieren:
1consul {
2 address = "127.0.0.1:8500" # Adresse des Consul-Agenten
3 client_auto_join = true # Automatische Verbindung von Consul-Clients zum Service-Mesh
4 token = "<CONSUL_ACL_TOKEN>" # Optional: ACL-Token für sichere Consul-Kommunikation
5}
Wenn Sie einen Job in Nomad definieren, können Sie Consul Connect für jede Aufgabe aktivieren, indem Sie einen connect
-Block hinzufügen. Hier ist ein Beispiel für eine Job-Definition mit aktiviertem Consul Connect:
1job "mysql-server" {
2 datacenters = ["dc1"]
3 type = "service"
4 namespace = "demo"
5
6 group "mysql-server" {
7 count = 1
8
9 service {
10 name = "mysql-server"
11 port = "db"
12 connect {
13 sidecar_service {}
14 }
15 }
16
17 restart {
18 attempts = 10
19 interval = "5m"
20 delay = "25s"
21 mode = "delay"
22 }
23
24 task "mysql-server" {
25 driver = "docker"
26 env = {
27 "MYSQL_ROOT_PASSWORD" = "super-duper-password"
28 }
29 config {
30 image = "mysql:9"
31 ports = ["db"]
32 }
33 resources {
34 cpu = 500
35 memory = 500
36 }
37 }
38 network {
39 mode = "bridge"
40 port "db" {
41 static = 3306
42 to = 3306
43 }
44 }
45 }
46}
Unser Datenbankdienst ist jetzt über Consul Connect verfügbar, und alle Kommunikationen werden verschlüsselt und authentifiziert. Dies geschieht durch einen Sidecar-Proxy, der automatisch in die Task-Gruppe injiziert wird. Innerhalb des Sidecar-Proxys werden die notwendigen Zertifikate verwaltet, und die Verbindung zur Datenbank wird hergestellt.
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 port "dynamic-app" {
19 to = 8080
20 }
21 }
22
23 vault {
24 policies = ["nomad-dynamic-app"]
25 change_mode = "signal"
26 change_signal = "SIGINT"
27 }
28
29 service {
30 name = "dynamic-app"
31 port = "dynamic-app"
32
33 connect {
34 sidecar_service {
35 proxy {
36 upstreams {
37 destination_name = "mysql-server"
38 local_bind_port = 3306
39 }
40 }
41 }
42 }
43 check {
44 type = "http"
45 name = "health"
46 method = "GET"
47 interval = "10s"
48 timeout = "2s"
49 path = "/health"
50 }
51 }
52
53 task "dynamic-app" {
54 driver = "docker"
55 config {
56 image = "docker.io/mabunixda/dynamic-vault-app"
57 volumes = [
58 "local/config.ini:/usr/src/app/config/config.ini"
59 ]
60 ports = [ "dynamic-app"]
61 }
62
63 template {
64 destination = "local/config.ini"
65 data = <<EOF
66 [DEFAULT]
67 LogLevel = DEBUG
68 Port = 8080
69 [DATABASE]
70 Address = 127.0.0.1
71 Port = 3306
72
73 Database = my_app
74 {{ with secret "dynamic-app/db/creds/app" }}
75 User = {{ .Data.username }}
76 Password = {{ .Data.password }}
77 {{ end }}
78
79 [VAULT]
80 Enabled = True
81 InjectToken = True
82 Namespace =
83 Address = {{ env "VAULT_ADDR" }}
84 KeyPath = dynamic-app/transit
85 KeyName = app
86EOF
87 }
88 resources {
89 cpu = 256
90 memory = 256
91 }
92 }
93 }
94}
In diesem Beispiel:
dynamic-app
ist so konfiguriert, dass ein Sidecar-Proxy verwendet wird, der Anfragen an den mysql-server
-Dienst über Consul Connect weiterleitet.mysql-server
-Dienst hat ebenfalls einen Sidecar-Proxy, jedoch sind keine Upstreams definiert, da er nur Anfragen vom dynamic-app
-Dienst entgegennimmt.In Consul Connect definieren Intentions, welche Dienste miteinander kommunizieren dürfen. Standardmäßig können keine Dienste miteinander kommunizieren, daher müssen Sie eine Intention erstellen, um die Kommunikation zwischen Ihren Diensten zuzulassen.
Um zum Beispiel dem dynamic-app
-Dienst zu erlauben, mit dem mysql-server
-Dienst zu kommunizieren, können Sie den folgenden Befehl ausführen:
1consul intention create -allow dynamic-app mysql-server
Dieser Befehl erstellt eine Richtlinie, die es dem dynamic-app
-Dienst ermöglicht, eine Verbindung zum mysql-server
-Dienst herzustellen, während jeder andere Dienst, der versucht, auf mysql-server
zuzugreifen, blockiert wird, es sei denn, er ist ausdrücklich zugelassen.
Sobald Ihr Job ausgeführt wird, übernehmen Nomad und Consul automatisch die sichere Kommunikation. Die Sidecar-Proxies für die Dienste dynamic-app
und mysql-server
stellen eine sichere mTLS-Verbindung her. Sie können die verschlüsselte Kommunikation überprüfen, indem Sie die Protokolle beobachten oder den Datenverkehr zwischen den Proxies untersuchen.
Zusätzlich können Sie das Consul-Benutzerinterface verwenden, um die Gesundheit und die Verbindungen zwischen Ihren Diensten zu überwachen.
Die Sicherung der Kommunikation zwischen Diensten ist ein grundlegender Aspekt beim Aufbau robuster und sicherer verteilter Systeme. Durch die Nutzung von HashiCorp Consul Connect mit HashiCorp Nomad können Sie sicherstellen, dass Ihr Service-Mesh Sicherheitsbest-Practices folgt, ohne dass der Anwendungscode geändert werden muss. Die Kombination aus mTLS, Dienstidentität und Zugriffskontrollrichtlinien bietet eine robuste Sicherheit und behält gleichzeitig Flexibilität und Skalierbarkeit in Ihrer Infrastruktur bei.
Verbessern Sie noch heute Ihre Bereitstellungen, indem Sie Consul Connect integrieren, und nutzen Sie sichere, authentifizierte und verschlüsselte Kommunikation über Ihre Dienste hinweg.
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