Konfigurationen schreiben

In dieser Kurzanleitung erfahren Sie, wie Sie Ihre eigene Konfiguration schreiben, validieren und mit einem Cluster synchronisieren. Dieses Thema baut auf den Fähigkeiten auf, die Sie in der Kurzanleitung für die Verwendung eines schreibgeschützten Repositorys erlernt haben. Beispiel: Sie sind ein neues Mitglied des Compliance-Teams in Ihrer Organisation und erstellen Ihre erste Konfiguration.

Nach Abschluss dieser Kurzanleitung können Sie einer erweiterten Kurzanleitung zum Verwalten und Aufheben der Verwaltung vorhandener Clusterobjekte folgen.

Vorbereitung

Config Sync erfordert eine aktive Anthos-Berechtigung. Weitere Informationen finden Sie unter Preisgestaltung für Anthos.

  1. Befolgen Sie die Kurzanleitung zur Verwendung eines schreibgeschützten Repositorys und löschen Sie den Cluster nicht.

  2. Erstellen Sie ein GitHub-Konto, wenn Sie noch keines haben.

  3. Befolgen Sie die Anweisungen zum Hinzufügen eines neuen SSH-Schlüssels zu Ihrem GitHub-Konto in der GitHub-Dokumentation.

Es ist auch hilfreich, mit Verzweigen und Klonen von Git-Repositories vertraut zu sein.

Repository erstellen

Für diese Kurzanleitung erstellen Sie als Repository eine Verzweigung des foo-corp-Repositorys und erstellen dann einen lokalen Klon als Arbeitskopie.

  1. Rufen Sie in Ihrem Browser das foo-corp-Repository auf und klicken Sie auf die Schaltfläche Verzweigung.

  2. Klonen Sie die Verzweigung auf Ihrem lokalen System. Ersetzen Sie [my-git-username] durch Ihren GitHub-Nutzernamen.

    git clone git@github.com:[my-git-username]/csp-config-management.git
  3. Konfigurieren Sie Ihr lokales System so, dass es sich bei GitHub mit dem SSH-Schlüssel authentifiziert, den Sie unter Vorbereitung hinzugefügt haben.

Erstellen Sie den Pre-Commit-Hook nomos vet

Sie können einen Pre-Commit-Hook installieren, der den Befehl nomos vet für Ihre Änderung ausführt. Mit diesem Hook sucht nomos vet nach Syntaxfehlern oder anderen Problemen mit Ihren Änderungen, bevor Sie den Commit in Ihr lokales Repository übertragen.

  1. Öffnen Sie in einem Terminal das Verzeichnis, in dem Sie das Repository geklont haben.

  2. Bearbeiten Sie die Datei .git/hooks/pre-commit. Achten Sie auf das Zeichen . im Verzeichnis .git/.

  3. nomos vet sollte für das Verzeichnis foo-corp in Ihrem lokal geklonten Repository ausgeführt werden. Fügen Sie der Datei Folgendes hinzu und ersetzen Sie [/path/to/repo] durch den vollständig qualifizierten Pfad, zu dem Sie das Repository geklont haben.

    nomos vet --path=/path/to/repo/foo-corp

    Speichern Sie die Datei.

  4. Achten Sie darauf, dass die Datei .git/hooks/pre-commit ausführbar ist:

    chmod +x .git/hooks/pre-commit
  5. Testen Sie das Pre-Commit mit git commit . nomos vet wird ausgeführt und zeigt eine Fehlermeldung an.

Cluster konfigurieren

Secret git-creds erstellen

  1. Rufen Sie den privaten Schlüssel ab, der in Ihrem Git-Repository registriert ist. Achten Sie darauf, wie Sie die Datei herunterladen und wo Sie sie speichern, da sie zur Authentifizierung bei Ihrem Git-Repository verwendet werden kann.

  2. Speichern Sie den privaten Schlüssel als Secret mit dem Namen git-creds im Kubernetes-Cluster:

    kubectl create secret generic git-creds \
     --namespace=config-management-system \
     --from-file=ssh=/path/to/[KEYPAIR-PRIVATE-KEY-FILENAME]
    
  3. Schützen Sie den privaten Schlüssel auf Ihrer lokalen Festplatte oder löschen Sie ihn.

Objekt ConfigManagement aktualisieren

Bearbeiten Sie die config-management.yaml-Datei, die Sie in der Kurzanleitung erstellt haben, um ein schreibgeschütztes Repository zu verwenden. Nehmen Sie die folgenden Änderungen vor:

  1. Aktualisieren Sie den Wert von syncRepo auf die Adresse Ihrer Verzweigung und ersetzen Sie my-github-username durch Ihren GitHub-Nutzernamen.
  2. Aktualisieren Sie den Wert von secretType auf ssh. Das git-creds Secret sollte bereits im Cluster vorhanden sein.

Das folgende Beispiel zeigt eine aktualisierte Erläuterung der Felder. Siehe Installationsanweisungen.

apiVersion: configmanagement.gke.io/v1
kind: ConfigManagement
metadata:
  name: config-management
spec:
  # clusterName is required and must be unique among all managed clusters
  clusterName: my-cluster
  git:
    syncRepo: git@github.com:my-github-username/csp-config-management.git
    syncBranch: 1.0.0
    secretType: ssh
    policyDir: "foo-corp"

Wenden Sie die Konfiguration auf Ihren Cluster an.

kubectl apply -f config-management.yaml

Wenn der Befehl erfolgreich ist, aktualisiert Kubernetes den Config Sync Operator auf Ihrem Cluster, um mit der Synchronisierung Ihrer Clusterkonfiguration aus dem Repository zu beginnen. Listen Sie alle im Namespace config-management-system ausgeführten Pods auf, um zu prüfen, ob der Config Sync Operator ausgeführt wird:

kubectl get pods -n config-management-system
NAME                                   READY     STATUS    RESTARTS   AGE
git-importer-5f8bdb59bd-7nn5m          2/2       Running   0          2m
monitor-58c48fbc66-ggrmd               1/1       Running   0          2m
syncer-7bbfd7686b-dxb45                1/1       Running   0          2m

Ihr Cluster hat jetzt genau die gleichen Konfigurationen wie bei der Kurzanleitung für die Verwendung eines schreibgeschützten Repositorys, da Ihre Verzweigung den gleichen Inhalt hat. Sie können den Übungen in dieser Kurzanleitung folgen und dieselben Ergebnisse sehen.

Konfiguration im Repository ändern

Wenn Sie eine Konfiguration im Repository erstellen oder ändern, erkennt Config Sync das Commit und wendet die neue Konfiguration auf relevante Kubernetes-Objekte an.

In diesem Beispiel fügen Sie dem namespace-readers ClusterRoleBinding den Nutzer jane@foo-corp.com hinzu.

Öffnen Sie ein Terminal und geben Sie den folgenden Befehl ein, um die namespace-readers ClusterRoleBinding auf Änderungen zu überwachen:

kubectl get clusterrolebindings namespace-readers -o yaml --watch

Öffnen Sie ein anderes Terminal und rufen Sie den lokalen Klon Ihres Repositorys auf. Bearbeiten Sie die Datei cluster/namespace-reader-clusterrolebinding.yaml, um jane@foo-corp.com dem Feld subjects hinzuzufügen. Nach der Bearbeitung hat die Datei folgende Inhalte:

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: namespace-readers
subjects:
- kind: User
  name: cheryl@foo-corp.com
  apiGroup: rbac.authorization.k8s.io
- kind: User
  name: jane@foo-corp.com
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: namespace-reader
  apiGroup: rbac.authorization.k8s.io

Speichern Sie die Datei. Erstellen Sie ein Commit.

git add cluster/namespace-reader-clusterrolebinding.yaml

git commit -m "Add Jane to namespace-reader"

Der Befehl nomos vet wird ausgeführt, wenn Sie versuchen, ein Commit durchzuführen, und verhindert, dass Sie eine Konfiguration mit Syntaxfehlern festschreiben. Zum Testen können Sie der Datei absichtlich einen Syntaxfehler hinzufügen (z. B. durch Löschen eines :-Zeichens), bevor Sie versuchen, einen Commit durchzuführen.

Übertragen Sie das Commit per Push an Ihre Verzweigung:

git push origin master

Rufen Sie das Terminal auf und halten Sie nach dem Objekt namespace-reader Ausschau. In wenigen Sekunden wird die Änderung mit dem Cluster synchronisiert.

Es ist genauso einfach, eine Änderung rückgängig zu machen. Rufen Sie das Terminal auf, das Sie für Git verwendet haben. Verwenden Sie den Befehl git log, um den Hash zu finden (in diesem Beispiel ist es der oberste Eintrag), und setzen Sie ihn zurück. Verwenden Sie im folgenden Befehl den Hash des Commits, der [HASH] enthält. Da eine Wiederherstellungsoperation ein neues Commit erstellt, prüft nomos vet die resultierende Konfiguration noch einmal.

git revert [HASH]

git push origin master

Rufen Sie das Terminal auf, in dem Sie nach dem Objekt namespace-reader Ausschau halten, und Sie stellen fest, dass jane@foo-corp.com nicht mehr in den Betreffe für die ClusterRole aufgeführt ist.

Drücken Sie Strg+C, um die Beobachtung des namespace-reader-Objekts zu beenden.

Diese Übung zeigt, dass Config Sync Objekte mit den Konfigurationen in Ihrem Repository synchronisiert, wenn Sie Änderungen per Commit an das Repository übertragen.

Bereinigen

Zum Bereinigen führen Sie nach Abschluss der Übungen in diesem Thema die folgenden Schritte aus:

  • Löschen Sie den Cluster, den Sie zum Testen verwendet haben.
  • Löschen Sie den lokalen Klon der Verzweigung.
  • Löschen Sie gegebenenfalls den lokalen privaten SSH-Schlüssel.
  • Löschen Sie Ihre Verzweigung des Beispiel-Repositorys. Dadurch werden alle Bereitstellungsschlüssel gelöscht, die nur dem Repository zugeordnet sind.

Weitere Informationen