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 dynamischen Kubernetes-Umgebungen kann das Verwalten von DNS-Einträgen eine Herausforderung sein. Wenn Dienste skaliert, neu bereitgestellt oder IP-Adressen geändert werden, ist es entscheidend, dass DNS-Einträge aktuell bleiben, um die Verfügbarkeit der Dienste sicherzustellen. Die Automatisierung dieses Prozesses mit Consul-Terraform-Sync, Kubernetes-basiertem Consul Sync und Cloudflare unter Nutzung von Kubernetes-Service-Anmerkungen zur Definition von Hostnamen ist eine effiziente Möglichkeit, diese Komplexität zu bewältigen.
Dieser Artikel führt Sie durch die Automatisierung von DNS-Updates unter Verwendung von Kubernetes Service-Anmerkungen zur Hostnamendefinition, kombiniert mit Consul-Terraform-Sync und Cloudflare.
Die Verwendung von Kubernetes-Service-Anmerkungen zur Definition von Hostnamen bietet eine einfache Möglichkeit, Dienste dynamisch mit DNS-Einträgen zu verknüpfen. Die Anmerkungen dienen als Quelle für die Dienstnamen in DNS-Updates und stellen sicher, dass die DNS-Einträge aktuell bleiben, während Dienste skaliert oder neu bereitgestellt werden.
Kubernetes-Dienste ermöglichen es, benutzerdefinierte Anmerkungen anzuhängen, um zusätzliche Metadaten zu beschreiben. Wir können DNS-Hostnamen innerhalb dieser Anmerkungen definieren, die später von CTS verwendet werden, um die DNS-Einträge in Cloudflare zu aktualisieren.
Beispiel eines Dienstes mit benutzerdefinierten Anmerkungen:
1apiVersion: v1
2kind: Service
3metadata:
4 name: web-app
5 annotations:
6 consul.hashicorp.com/service-sync: "true"
7 consul.hashicorp.com/service-tags: dns.hostname=`web.example.com`
8spec:
9 selector:
10 app: web-app
11 ports:
12 - protocol: TCP
13 port: 8080
In diesem Beispiel wird die Anmerkung dns.hostname
verwendet, um den DNS-Namen (web.example.com
) zu definieren, der in Cloudflare registriert und aktualisiert werden soll. Die Anmerkung consul.hashicorp.com/service-sync
weist Consul an, diesen Dienst mit dem Consul-Katalog zu synchronisieren. Und consul.hashicorp.com/service-tags
spezifiziert die Metadaten-Tags, die in Consul registriert werden sollen und die innerhalb der Consul-Terraform-Sync-Konfiguration verwendet werden können.
Jetzt konfigurieren Sie Consul-Terraform-Sync (CTS), um DNS-Updates in Cloudflare zu automatisieren, wann immer sich eine Dienst-IP oder ein Hostname ändert. CTS wird den Consul-Katalog auf Änderungen überwachen und Terraform-Ausführungen auslösen, um die DNS-Einträge aktuell zu halten.
Beispiel für eine CTS-Konfiguration:
1consul {
2 address = "http://localhost:8500"
3}
4
5vault {
6 address = "http://localhost:8200"
7}
8
9driver "terraform" {
10 log = false
11 persist_log = false
12
13 backend "consul" {
14 gzip = true
15 }
16 required_providers {
17 cloudflare = {
18 source = "cloudflare/cloudflare"
19 version = "~> 4.0"
20 }
21 }
22}
23
24terraform_provider "cloudflare" {
25 api_token = "{{ with secret \"kv/network/cloudflare\" }}{{ .Data.data.api_token }}{{ end }}"
26}
27
28task {
29 name = "cloudflare-dns-update"
30 description = "Automatisches Update der Cloudflare DNS-Einträge basierend auf den Dienstanmerkungen"
31 source = "./k8s-cloudflare"
32 providers = ["cloudflare"]
33
34 condition "services" {
35 regexp = ".*"
36 filter = "Service.Meta[\"external-source\"] == \"kubernetes\""
37 }
38}
Diese Konfiguration weist CTS an, alle Dienste zu überwachen, die mit dem Kubernetes Consul Sync im Service-Katalog von Consul verbunden sind. Wenn sich die IP oder der Hostname ändert, wird CTS Terraform auslösen, um den entsprechenden DNS-Eintrag in Cloudflare zu aktualisieren. Die tatsächliche Konfiguration des Anbieters muss innerhalb der CTS-Konfiguration angewendet werden, da wir das API-Token nicht im Terraform-Code offenlegen möchten. Außerdem können wir Vault verwenden, um das API-Token sicher zu speichern und während der CTS-Ausführung abzurufen. CTS wird das angewandte Token auch aktiv halten und bei Bedarf erneuern.
Um DNS-Einträge in Cloudflare zu verwalten, müssen Sie den Cloudflare-Anbieter in Terraform konfigurieren. Hier ist eine Terraform-Konfiguration zum Erstellen oder Aktualisieren von DNS-Einträgen:
1locals {
2
3 dns_tagged = {
4 for name, service in var.services : name => [
5 for tag in service.tags : tag if can(regex("dns.hostname=.*", tag))
6 ]
7 }
8 dns_hosts = {
9 for name, tag in local.k8s_tagged : name => regex("dns.hostname=`\\((?P<hostname>.*)`\\)", element(tag,0)).hostname
10 }
11
12}
13
14resource "cloudflare_record" "web" {
15
16 for_each = local.dns_hosts
17
18 zone_id = "YOUR_ZONE_ID"
19 name = each.value
20 type = "A"
21 value = var.services[each.key].address
22 ttl = 300
23}
Diese Konfiguration zieht den DNS-Namen dynamisch aus der Anmerkung dns.hostname
und aktualisiert den Eintrag, um auf die aktuelle IP des Dienstes zu verweisen.
Mit allem, was konfiguriert ist, ist Ihr System jetzt eingerichtet, um DNS-Einträge in Cloudflare automatisch zu aktualisieren. Wenn Dienste in Kubernetes skaliert oder neu bereitgestellt werden, können sich ihre IP-Adressen ändern, und Consul erfasst diese Änderungen in Echtzeit. Consul-Terraform-Sync wird dann Terraform-Ausführungen auslösen, um die DNS-Einträge in Cloudflare entsprechend zu aktualisieren.
Durch die Verwendung von Consul-Terraform-Sync, Kubernetes Consul Sync, Cloudflare und Service-Anmerkungen in Kubernetes können Sie DNS-Updates in dynamischen Umgebungen vollständig automatisieren. Dies stellt sicher, dass DNS-Einträge immer aktuell und genau sind, was den manuellen Aufwand reduziert und die Resilienz der Dienste verbessert. Ein sehr ähnlicher Ansatz kann auch für HashiCorp Nomad verwendet werden.
flare/latest/docs)
Dieser Ansatz bietet eine skalierbare, zuverlässige Lösung zur Automatisierung des DNS-Managements in Kubernetes unter Verwendung einfacher Service-Anmerkungen und der DNS-Funktionen von Cloudflare. Natürlich kann Cloudflare auch durch jeden anderen DNS-Anbieter ersetzt werden, der eine API und einen Terraform-Anbieter zur Verwaltung von DNS-Einträgen anbietet.
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