Blog
Config Connector, ein neuer Ansatz für Infrastructure as Code

Infrastructure as Code (IaC) hilft "Cloud Native"-Unternehmen bei der Verwaltung ihrer Infrastruktur auf der Grundlage der Prinzipien der Softwaretechnik. Eine breite Palette von IaC-Tools und -Frameworks erleichtert die Aktualisierung der Cloud-Infrastruktur. Config Connector ist das neueste Mitglied dieser Familie und bietet einen neuen Ansatz, der auf der Leistungsfähigkeit von Kubernetes basiert. In diesem Blogbeitrag erläutern wir, wie er im Vergleich zu anderen Tools funktioniert.
Wenn Unternehmen ihre Infrastruktur erweitern, wird die Erstellung und Durchsetzung konsistenter Konfigurationen und Sicherheitsrichtlinien in einer wachsenden Umgebung schwierig und führt zu Reibungsverlusten. Infrastructure as Code (IaC) schafft hier Abhilfe, indem es die Konfiguration und Bereitstellung von Ressourcen durch Code automatisiert, so dass menschliche Fehler ausgeschlossen sind, Zeit gespart wird und jeder Schritt vollständig dokumentiert ist.
IaC wendet Software-Engineering-Praktiken auf die Infrastruktur an und bringt die gleichen Vorteile für die Infrastruktur:
- Automatisieren Sie: Commit, Versionierung, Tracing, Deployment und Zusammenarbeit, genau wie beim Quellcode.
- Deklarativ: Geben Sie den gewünschten Zustand der Infrastruktur an, nicht die Aktualisierungen
- Zurückrollen: Rollout und Rollback von Änderungen wie bei einer normalen Anwendung
- Validieren: Bewertung des gewünschten Zustands im Vergleich zum aktuellen Zustand der Infrastruktur
- Skalieren: Bauen Sie wiederverwendbare Infrastrukturblöcke im gesamten Unternehmen
Iac Tool Landschaft
Im Laufe der Jahre gab es eine explosionsartige Zunahme von Infrastrukturplattformen und Anwendungs-Frameworks, die die Grundlage für "Cloud Native" bilden. Die beliebtesten sind in der folgenden Tabelle aufgeführt.
Typ Unveränderlich Deklarativ Sprache Google Cloud-Unterstützung Terraform Provisionierung Ja Ja HCL Ja (*) Konfig-Anschluss Provisionierung Ja Ja YAML/KRM Ja Pulumi Provisionierung Ja Ja JS, TS, Python, ... Ansible Konfig. YAML Chefkoch Konfig. Ruby (*) Für Google Cloud-Ressourcen, die über den Google-Anbieter verwaltet werden, können Support-Fälle eröffnet werden.
Konfig-Anschluss
Mit Tools wie Terraform und Pulumi können Administratoren die Infrastruktur im Code deklarieren. Aber der Code stellt keinen festen Vertrag zwischen dem gewünschten und dem aktuellen Zustand her, und jedes Mal, wenn der Code geändert oder refaktorisiert wird, ist ein prozeduraler oder zwingender Ansatz (denken Sie an den Plan/Apply-Schritt) erforderlich, um den Zustand erneut zu validieren.
Bringen Sie Kubernetes ins Spiel.
Controller sind das Herzstück von Kubernetes. Es ist die Aufgabe eines Controllers, dafür zu sorgen, dass der tatsächliche Zustand der Welt für jedes beliebige Objekt mit dem gewünschten Zustand des Objekts übereinstimmt.
Config Connector erweitert das Kubernetes-Ressourcenmodell um benutzerdefinierte Ressourcendefinitionen (CRD) für GCP-Dienste und -Ressourcen. Wenn Sie Config Connector auf einem Kubernetes-Cluster installieren, wird für jeden Dienst und jede Ressource in GCP eine CRD definiert:
➜ kubectl get crd --namespace cnrm-system
NAME CREATED AT
accesscontextmanageraccesslevels.accesscontextmanager.cnrm.cloud.google.com 2022-11-29T07:41:51Z
accesscontextmanageraccesspolicies.accesscontextmanager.cnrm.cloud.google.com 2022-11-29T07:41:51Z
accesscontextmanagerserviceperimeters.accesscontextmanager.cnrm.cloud.google.com 2022-11-29T07:41:51Z
apigeeenvironments.apigee.cnrm.cloud.google.com 2022-11-29T07:41:51Z
apigeeorganizations.apigee.cnrm.cloud.google.com 2022-11-29T07:41:51Z
artifactregistryrepositories.artifactregistry.cnrm.cloud.google.com 2022-11-29T07:41:51Z
backendconfigs.cloud.google.com 2022-11-25T13:06:26Z
bigquerydatasets.bigquery.cnrm.cloud.google.com 2022-11-29T07:41:51Z
bigqueryjobs.bigquery.cnrm.cloud.google.com 2022-11-29T07:41:52Z
bigquerytables.bigquery.cnrm.cloud.google.com 2022-11-29T07:41:52Z
bigtableappprofiles.bigtable.cnrm.cloud.google.com 2022-11-29T07:41:52Z
bigtablegcpolicies.bigtable.cnrm.cloud.google.com 2022-11-29T07:41:52Z
bigtableinstances.bigtable.cnrm.cloud.google.com 2022-11-29T07:41:52Z
bigtabletables.bigtable.cnrm.cloud.google.com 2022-11-29T07:41:52Z
billingbudgetsbudgets.billingbudgets.cnrm.cloud.google.com 2022-11-29T07:41:52Z
binaryauthorizationattestors.binaryauthorization.cnrm.cloud.google.com 2022-11-29T07:41:52Z
binaryauthorizationpolicies.binaryauthorization.cnrm.cloud.google.com 2022-11-29T07:41:52Z
capacityrequests.internal.autoscaling.gke.io 2022-11-25T13:05:36Z
cloudbuildtriggers.cloudbuild.cnrm.cloud.google.com 2022-11-29T07:41:52Z
...
Admins können nun den gewünschten Zustand der Infrastruktur als Objekte in der Kubernetes etcd Datenbank mithilfe der Config Connector CRDs definieren. Der Config Connector operator definiert für jede CRD einen Controller, der den tatsächlichen Zustand der Infrastruktur mit dem gewünschten Zustand der Objekte in der Kubernetes etcd Datenbank abgleicht, wie er von den Administratoren definiert wurde.
Config Connector operator übersetzt den gewünschten deklarativen Zustand in imperative API-Aufrufe.
Beispiel
Nehmen wir an, wir möchten ein pubsub Thema erstellen.
Zunächst müssen wir pubsub api in unserem Projekt aktivieren. Auf der Grundlage der ServiceUsage CRD können wir eine YAML-Datei erstellen, die erklärt, dass der Dienst aktiviert ist:
apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
kind: Service
metadata:
name: pubsub.googleapis.com
spec:
projectRef:
external: projects/my-project-id
Speichern Sie diese YAML-Datei als pubsub-service.yaml und wenden Sie sie auf Ihren Kubernetes-Cluster an:
kubectl apply -f pubsub-service.yaml
Nun, da der Dienst pubsub aktiviert ist, können wir ein Thema erstellen. Basierend auf dem PubSubTopic CRD, deklariert die folgende YAML-Datei pubsub-topic.yaml ein neues Thema pubsub:
apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
kind: PubSubTopic
metadata:
annotations:
cnrm.cloud.google.com/project-id: my-project-id
labels:
managed: configconnector
name: cc-managed-topic
Und wenden Sie die Datei erneut an:
kubectl apply -f pubsub-topic.yaml
Rufen Sie Ihre GCP-Konsole auf und überprüfen Sie, ob ein pubsub Thema mit dem Namen cc-managed-topic tatsächlich erstellt wurde. Herzlichen Glückwunsch, Sie haben Ihre Konfiguration als Daten deklariert!
Aber nun zur Schönheit von Kubernetes und der kontinuierlichen Abstimmung ...
Löschen Sie das Thema pubsub manuell aus Ihrem Projekt. pubsubtopic-controller stellt fest, dass der Ist-Zustand nicht mehr mit dem Soll-Zustand übereinstimmt und beginnt mit den Korrekturmaßnahmen. Warten Sie ein paar Sekunden und ... Kubernetes wird das Thema, das Sie manuell gelöscht haben, neu erstellen! Und es war kein prozeduraler/imperativer Schritt erforderlich.
Überprüfen Sie die Ereignisse auf dem Objekt pubsub, um zu sehen, was passiert ist:
Fazit
Mit Google Config Connector können wir zu einem wirklich deklarativen Ansatz für die Infrastruktur übergehen, indem wir Konfiguration als Daten verwenden und uns die Leistungsfähigkeit von Kubernetes zunutze machen.
Während Config Connector von Google für GCP veröffentlicht wurde, sehen wir eine Übernahme der gleichen Prinzipien durch andere Cloud-Anbieter. Microsoft Azure hat Azure Service Operator veröffentlicht und AWS baut auf AWS Controllers for Kubernetes (ACK).
Und dann gibt es noch Crossplane, das eine universelle Steuerebene bieten soll, damit Plattformteams Infrastrukturen von verschiedenen Anbietern zusammenstellen können.
Ist das der neue Branchentrend? Lassen Sie uns sehen, was die Zukunft bringt.

Verfasst von
Koen Maes
Unsere Ideen
Weitere Blogs
Contact



