Auf dieser Seite erfahren Sie, wie Sie Config Sync mit kubectl
-Befehlen installieren.
Hinweise
In diesem Abschnitt werden die Voraussetzungen beschrieben, die Sie vor der Installation von Config Sync mit kubectl
erfüllen müssen.
Lokale Umgebung vorbereiten
Bevor Sie Config Sync installieren, müssen Sie Ihre lokale Umgebung vorbereiten. Dazu führen Sie die folgenden Aufgaben aus:
Erstellen Sie eine Source of Truth oder greifen Sie darauf zu.
Installieren und initialisieren Sie das Google Cloud CLI, das die in dieser Anleitung verwendeten Befehle
gcloud
,kubectl
undnomos
enthält. Wenn Sie Cloud Shell verwenden, ist die Google Cloud CLI vorinstalliert.kubectl
wird vom Google Cloud CLI nicht standardmäßig installiert. Verwenden Sie zum Installieren vonkubectl
den folgenden Befehl:gcloud components install kubectl
Authentifizieren Sie sich bei Google Cloud mit dem Befehl
gcloud auth login
, sodass Sie Komponenten von Config Sync herunterladen können.
Cluster vorbereiten
Sie müssen einen Google Kubernetes Engine (GKE) Enterprise-Cluster erstellen oder Zugriff auf einen haben, der den Anforderungen für Config Sync entspricht.
Berechtigungen vorbereiten
Der Google Cloud-Nutzer, der Config Sync installiert, benötigt IAM-Berechtigungen, um neue Rollen im Cluster zu erstellen. Weisen Sie diese Rollen bei Bedarf mit den folgenden Befehlen zu:
gcloud container clusters get-credentials CLUSTER_NAME kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole cluster-admin --user USER_ACCOUNT
Dabei gilt:
CLUSTER_NAME
: Ihr ClusternameUSER_ACCOUNT
: E-Mail-Adresse Ihres Google Cloud-Kontos
Je nachdem, wie Sie das Google Cloud CLI auf Ihrem lokalen System konfiguriert haben, müssen Sie möglicherweise die Felder --project
und --zone
hinzufügen.
Wenn Sie Config Sync Zugriff auf OCI gewähren müssen, indem Sie gcpserviceaccount
als Authentifizierungstyp verwenden, müssen Sie zum Erstellen einer Richtlinienbindung auch die Berechtigung iam.serviceAccounts.setIamPolicy
haben.
Sie können diese Berechtigung erhalten, indem Sie die IAM-Rolle Dienstkontoadministrator (roles/iam.serviceAccountAdmin
) zuweisen. Sie können diese Berechtigung auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Cluster registrieren
Führen Sie die folgenden Schritte aus, um einen Cluster in Config Sync zu registrieren:
- Config Sync bereitstellen
- Gewähren Sie Config Sync Lesezugriff auf eine der folgenden Ressourcen:
- Config Sync konfigurieren
Config Sync bereitstellen
Wenn Sie geprüft haben, ob alle Voraussetzungen erfüllt sind, können Sie Config Sync bereitstellen, indem Sie ein YAML-Manifest herunterladen und anwenden.
1.20.0 oder höher
Laden Sie die neueste Version der Config Sync-Manifeste mit dem folgenden Befehl herunter. Wenn Sie eine bestimmte Version herunterladen möchten, finden Sie unter Downloads weitere Informationen.
gcloud storage cp gs://config-management-release/released/latest/config-sync.tar.gz config-sync.tar.gz
Extrahieren Sie das Archiv:
tar -xzvf config-sync.tar.gz
Folgen Sie im im vorherigen Schritt extrahierten Archiv der Anleitung in der bereitgestellten
README
, um die Kustomisierung zu bearbeiten.Um die Config Sync-Installation zu aktualisieren, wenden Sie das gerenderte Manifest an, das Sie gemäß der
README
-Anleitung erstellt haben:kubectl apply -f CONFIG_SYNC_MANIFEST
Ersetzen Sie
CONFIG_SYNC_MANIFEST
durch den Namen des gerenderten Manifests.Ersetzen Sie auf allen Clients den Befehl
nomos
durch die neue Version. Durch diese Änderung kann der Befehlnomos
immer den Status aller registrierten Cluster abrufen und Konfigurationen für sie validieren.
1.19.2 oder niedriger
Laden Sie das Config Sync-Manifest und die
nomos
-Befehle für die neue Version herunter.Wenden Sie das Config Sync-Manifest an:
kubectl apply -f config-management-operator.yaml
Erstellen Sie eine Datei mit dem Namen
config-management.yaml
und kopieren Sie die folgende YAML-Datei hinein:# config-management.yaml apiVersion: configmanagement.gke.io/v1 kind: ConfigManagement metadata: name: config-management spec: # The `enableMultiRepo` field is set to true to enable RootSync and RepoSync APIs. enableMultiRepo: true preventDrift: PREVENT_DRIFT
Dabei gilt:
PREVENT_DRIFT
: Wenn dieser Wert auftrue
gesetzt ist, wird der Config Sync-Zulassungs-Webhook aktiviert, um Drifts zu verhindern, indem Änderungskonflikte nicht an Live-Cluster übertragen werden. Die Standardeinstellung istfalse
. Config Sync korrigiert Drifts immer, unabhängig vom Wert dieses Felds.
Übernehmen Sie die Änderung:
kubectl apply -f config-management.yaml
Ersetzen Sie auf allen Clients den Befehl
nomos
durch die neue Version. Durch diese Änderung kann der Befehlnomos
immer den Status aller registrierten Cluster abrufen und Konfigurationen für sie validieren.
Wenn dies aufgrund eines Problems mit Config Sync fehlschlägt, das nicht auf einen YAML- oder JSON-Syntaxfehler zurückzuführen ist, wird das Objekt unter Umständen im Cluster instanziiert, funktioniert jedoch eventuell nicht ordnungsgemäß. In diesem Fall können Sie mit dem Befehl nomos
status
im Objekt nach Fehlern suchen.
Eine gültige Installation ohne Probleme hat den Status PENDING
oder SYNCED
.
Eine ungültige Installation hat den Status NOT CONFIGURED
und führt einen der folgenden Fehler auf:
missing git-creds Secret
git-creds Secret is missing the key specified by secretType
Beheben Sie den Konfigurationsfehler, um das Problem zu lösen. Je nach Art des Fehlers müssen Sie möglicherweise das Config Sync-Manifest noch einmal auf den Cluster anwenden.
Wenn das Problem darin bestand, dass Sie das git-creds
-Secret nicht erstellt haben, wird es nach seiner Erstellung von Config Sync sofort erkannt. Sie müssen die Konfiguration nicht noch einmal anwenden.
Config Sync Lesezugriff gewähren
Wenn Sie Ihre Konfigurationen in Git speichern, müssen Sie Config Sync Lesezugriff auf Git gewähren. Wenn Sie Ihre Konfigurationen als OCI-Images speichern, müssen Sie Config Sync Lesezugriff auf OCI gewähren. Wenn Sie Ihre Konfigurationen in Helm speichern, müssen Sie Config Sync Lesezugriff auf Helm gewähren.
Config Sync Lesezugriff auf Git gewähren
Config Sync benötigt Lesezugriff auf Ihr Git-Repository, damit es die Konfigurationen, die Sie per Commit in das Repository geschrieben haben, lesen und auf Ihre Cluster anwenden kann.
Falls für den Lesezugriff auf Ihr Repository keine Authentifizierung erforderlich ist, können Sie mit der Konfiguration von Config Sync fortfahren und none
als Authentifizierungstyp verwenden. Wenn Sie das Repository beispielsweise über eine Weboberfläche ohne Anmeldung aufrufen oder mit git
clone
einen Klon des Repositorys lokal erstellen können ohne Anmeldedaten einzugeben oder gespeicherte Anmeldedaten zu verwenden, müssen Sie sich nicht authentifizieren. In diesem Fall müssen Sie kein Secret erstellen.
Die meisten Nutzer müssen jedoch Anmeldedaten erstellen, da der Lesezugriff auf ihr Repository eingeschränkt ist. Wenn Anmeldedaten erforderlich sind, werden diese auf jedem registrierten Cluster im git-creds
-Secret gespeichert, sofern Sie kein Google-Dienstkonto verwenden. Das Secret muss den Namen git-creds
haben, da dies ein fester Wert ist.
Config Sync unterstützt die folgenden Authentifizierungsmechanismen:
- SSH-Schlüsselpaar (
ssh
) - Cookiefile (
cookiefile
) - Token (
token
) - Google-Dienstkonto(
gcpserviceaccount
) - Standardmäßiges Compute Engine-Dienstkonto (
gcenode
) - GitHub App (
githubapp
)
Welchen Mechanismus Sie wählen, hängt davon ab, was Ihr Repository unterstützt. Im Allgemeinen empfehlen wir die Verwendung eines SSH-Schlüsselpaars. GitHub und Bitbucket unterstützen beide die Verwendung eines SSH-Schlüsselpaars. Wenn Sie jedoch ein Repository in Cloud Source Repositories verwenden, empfehlen wir stattdessen die Verwendung eines Google-Dienstkontos. Wenn Ihr Repository von Ihrer Organisation gehostet wird und Sie nicht wissen, welche Authentifizierungsmethoden unterstützt werden, wenden Sie sich an Ihren Administrator.
Um ein Repository in Cloud Source Repositories als Config Sync-Repository zu nutzen, führen Sie die folgenden Schritte aus, um Ihre Cloud Source Repositories-URL abzurufen:
Listen Sie alle Repositories auf:
gcloud source repos list
Kopieren Sie aus der Ausgabe die URL des Repositorys, das Sie verwenden möchten. Beispiele:
REPO_NAME PROJECT_ID URL my-repo my-project https://source.developers.google.com/p/my-project/r/my-repo-csr
Sie benötigen diese URL bei der Konfiguration von Config Sync im folgenden Abschnitt. Wenn Sie Config Sync mit der Google Cloud Console konfigurieren, fügen Sie die URL dem Feld URL hinzu. Wenn Sie Config Sync mithilfe des Google Cloud CLI konfigurieren, fügen Sie die URL dem Feld
syncRepo
Ihrer Konfigurationsdatei hinzu.
SSH-Schlüsselpaar
Ein SSH-Schlüsselpaar besteht aus zwei Dateien, einem öffentlichen und einem privaten Schlüssel. Der öffentliche Schlüssel hat in der Regel die Erweiterung .pub
.
Führen Sie die folgenden Schritte aus, um ein SSH-Schlüsselpaar zu verwenden:
Erstellen Sie ein SSH-Schlüsselpaar, damit sich Config Sync bei Ihrem Git-Repository authentifizieren kann. Dieser Schritt ist erforderlich, wenn Sie sich beim Repository authentifizieren müssen, um es zu klonen oder Daten daraus zu lesen. Überspringen Sie diesen Schritt, wenn Sie ein Schlüsselpaar von einem Sicherheitsadministrator erhalten. Sie können ein einziges Schlüsselpaar für alle Cluster oder ein Schlüsselpaar pro Cluster verwenden, je nach Ihren Sicherheits- und Complianceanforderungen.
Mit dem folgenden Befehl wird ein 4.096-Bit-RSA-Schlüssel erstellt. Niedrigere Werte werden nicht empfohlen:
ssh-keygen -t rsa -b 4096 \ -C "GIT_REPOSITORY_USERNAME" \ -N '' \ -f /path/to/KEYPAIR_FILENAME
Ersetzen Sie Folgendes:
GIT_REPOSITORY_USERNAME
: Nutzername, mit dem sich Config Sync beim Repository authentifizieren soll/path/to/KEYPAIR_FILENAME
: Pfad zum Schlüsselpaar
Wenn Sie einen Drittanbieter-Host für das Git-Repository wie GitHub oder ein Dienstkonto mit Cloud Source Repositories nutzen möchten, empfehlen wir die Verwendung eines separaten Kontos.
Konfigurieren Sie Ihr Repository so, dass der neu erstellte öffentliche Schlüssel erkannt wird. Weitere Informationen finden Sie in der Dokumentation Ihres Git-Hostanbieters. Anleitungen für einige beliebte Git-Hostanbieter finden Sie hier:
- Cloud Source Repositories.
- Bitbucket
- GitHub Wir empfehlen, separate Bereitstellungsschlüssel zu erstellen, um Lesezugriff auf ein einzelnes GitHub-Repository zu gewähren.
- GitLab
Fügen Sie den privaten Schlüssel einem neuen Secret im Cluster hinzu:
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-file=ssh=/path/to/KEYPAIR_PRIVATE_KEY_FILENAME
Ersetzen Sie
/path/to/KEYPAIR_PRIVATE_KEY_FILENAME
durch den Namen des privaten Schlüssels (den Namen ohne das Suffix.pub
).(Empfohlen) Wenn Sie die Überprüfung der bekannten Hosts mit SSH-Authentifizierung konfigurieren möchten, können Sie den Schlüssel für bekannte Hosts dem Feld
data.known_hosts
im geheimen Schlüsselgit_creds
hinzufügen. Wenn Sie die Prüfung vonknown_hosts
deaktivieren möchten, können Sie dafür das Feldknown_hosts
aus dem Secret entfernen. Führen Sie folgenden Befehl aus, um den Schlüssel bekannter Hosts hinzuzufügen:kubectl edit secret git-creds \ --namespace=config-management-system
Fügen Sie dann unter
data
den Eintrag für bekannte Hosts hinzu:known_hosts: KNOWN_HOSTS_KEY
Löschen Sie den privaten Schlüssel vom lokalen Datenträger oder schützen Sie ihn anderweitig.
Verwenden Sie das SSH-Protokoll, wenn Sie Config Sync konfigurieren und die URL für Ihr Git-Repository hinzufügen. Wenn Sie ein Repository in Cloud Source Repositories verwenden, müssen Sie das folgende Format bei der Eingabe Ihrer URL verwenden:
ssh://EMAIL@source.developers.google.com:2022/p/PROJECT_ID/r/REPO_NAME
Ersetzen Sie Folgendes:
EMAIL
: Ihr Google Cloud-Nutzername.PROJECT_ID
: ID des Google Cloud-Projekts, in dem sich das Repository befindet.REPO_NAME
: Name des Repositorys.
Cookiefile
Der Vorgang zum Abrufen eines cookiefile
hängt von der Konfiguration Ihres Repositorys ab. Ein Beispiel finden Sie in der Dokumentation zu Cloud Source Repositories unter Statische Anmeldedaten generieren.
Die Anmeldedaten werden normalerweise in der Datei .gitcookies
im Basisverzeichnis gespeichert. Sie können Ihnen aber auch von einem Sicherheitsadministrator zur Verfügung gestellt werden.
Führen Sie die folgenden Schritte aus, um ein cookiefile
zu erstellen:
Nachdem Sie das
cookiefile
erstellt und abgerufen haben, fügen Sie es einem neuen Secret im Cluster hinzu:Wenn Sie keinen HTTPS-Proxy verwenden, erstellen Sie das Secret mit dem folgenden Befehl:
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-file=cookie_file=/path/to/COOKIEFILE
Wenn Sie einen HTTPS-Proxy verwenden müssen, fügen Sie ihn zusammen mit
cookiefile
zum Secret hinzu. Führen Sie dazu den folgenden Befehl aus:kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-file=cookie_file=/path/to/COOKIEFILE \ --from-literal=https_proxy=HTTPS_PROXY_URL
Ersetzen Sie Folgendes:
/path/to/COOKIEFILE
: der entsprechende Pfad und DateinameHTTPS_PROXY_URL
: Die URL für den HTTPS-Proxy, den Sie bei der Kommunikation mit dem Git-Repository verwenden.
Schützen Sie den Inhalt des
cookiefile
, wenn Sie es noch lokal benötigen. Andernfalls können Sie es löschen.
Token
Wenn Ihre Organisation die Verwendung von SSH-Schlüsseln nicht zulässt, sollten Sie ein Token verwenden. Mit Config Sync können Sie die persönlichen Zugriffstokens (Personal Access Tokens, PATs) von GitHub, die PATs oder die Deployment-Schlüssel von GitLab oder das App-Passwort von Bitbucket als Token verwenden.
Führen Sie die folgenden Schritte aus, um mit dem Token ein Secret zu erstellen:
Erstellen Sie ein Token mit GitHub, GitLab oder Bitbucket.
- GitHub: Erstellen Sie ein PAT. Gewähren Sie dem Token den Bereich
repo
, damit es Daten aus privaten Repositories lesen kann. Da Sie ein PAT an ein GitHub-Konto binden, sollten Sie auch einen Computernutzer erstellen und das PAT an den Computernutzer binden. - GitLab: Erstellen Sie ein PAT oder erstellen Sie ein Deployment-Token.
- Bitbucket: Erstellen Sie ein App-Passwort.
- GitHub: Erstellen Sie ein PAT. Gewähren Sie dem Token den Bereich
Nachdem Sie das Token erstellt und abgerufen haben, fügen Sie es einem neuen Secret im Cluster hinzu.
Wenn Sie keinen HTTPS-Proxy verwenden, erstellen Sie das Secret mit dem folgenden Befehl:
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace="config-management-system" \ --from-literal=username=USERNAME \ --from-literal=token=TOKEN
Ersetzen Sie Folgendes:
USERNAME
: Nutzername, den Sie verwenden möchten.TOKEN
: Token, das Sie im vorherigen Schritt erstellt haben.
Wenn Sie einen HTTPS-Proxy verwenden müssen, fügen Sie ihn zusammen mit
username
undtoken
dem Secret hinzu. Führen Sie dazu den folgenden Befehl aus:kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-literal=username=USERNAME \ --from-literal=token=TOKEN \ --from-literal=https_proxy=HTTPS_PROXY_URL
Ersetzen Sie Folgendes:
USERNAME
: Nutzername, den Sie verwenden möchten.TOKEN
: Token, das Sie im vorherigen Schritt erstellt haben.HTTPS_PROXY_URL
: Die URL für den HTTPS-Proxy, den Sie bei der Kommunikation mit dem Git-Repository verwenden.
Schützen Sie das Token, wenn Sie es noch lokal benötigen. Andernfalls können Sie es löschen.
Google-Dienstkonto
Wenn sich Ihr Repository in Cloud Source Repositories befindet und Ihr Cluster GKE Workload Identity Federation for GKE oder Workload Identity Federation for GKE für Flotten verwendet, können Sie Config Sync mithilfe eines Google-Dienstkontos Zugriff auf ein Repository in dem Projekt gewähren, in dem sich Ihr verwalteter Cluster befindet.
Wenn Sie kein Dienstkonto haben, erstellen Sie eins.
Weisen Sie dem Google-Dienstkonto die IAM-Rolle „Cloud Source Repositories-Leser“ (
roles/source.reader
) zu. Weitere Informationen zu Rollen und Berechtigungen für Cloud Source Repositories finden Sie unter Berechtigungen zum Ansehen von Repositories gewähren.Erteilen Sie projektweite Berechtigungen, wenn für alle Repositories im Projekt dieselben Berechtigungen gelten sollen.
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/source.reader \ --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com"
Erteilen Sie eine Repository-spezifische Berechtigung, wenn Sie Dienstkonten für jedes Repository in Ihrem Projekt unterschiedliche Zugriffsebenen zuweisen möchten.
gcloud source repos set-iam-policy REPOSITORY POLICY_FILE --project=PROJECT_ID
Wenn Sie Config Sync mit der Google Cloud Console konfigurieren, wählen Sie Workload Identity Federation for GKE als Authentifizierungstyp aus und fügen Sie dann die E-Mail-Adresse Ihres Dienstkontos hinzu.
Wenn Sie Config Sync mithilfe des Google Cloud CLI konfigurieren, fügen Sie
gcpserviceaccount
alssecretType
hinzu und fügen Sie dann die E-Mail-Adresse Ihres Dienstkontos zugcpServiceAccountEmail
hinzu.Nach dem Konfigurieren von Config Sync erstellen Sie eine IAM-Richtlinienbindung zwischen dem Kubernetes-Dienstkonto und dem Google-Dienstkonto. Das Kubernetes-Dienstkonto wird erst erstellt, wenn Sie Config Sync zum ersten Mal konfigurieren.
Wenn Sie Cluster verwenden, die bei einer Flotte registriert sind, müssen Sie die Richtlinienbindung nur einmal pro Flotte erstellen. Alle in einer Flotte registrierten Cluster haben denselben Workload Identity Federation for GKE-Pool. Wenn Sie Ihrem Kubernetes-Dienstkonto in einem Cluster die IAM-Richtlinie hinzufügen, erhält das Kubernetes-Dienstkonto aus demselben Namespace in anderen Clustern in derselben Flotte aufgrund des Konzepts der Gleichheit für eine Flotte ebenfalls dieselbe IAM-Richtlinie.
Durch diese Bindung kann das Kubernetes-Dienstkonto von Config Sync als Google-Dienstkonto verwendet werden:
gcloud iam service-accounts add-iam-policy-binding \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ --project=PROJECT_ID
Ersetzen Sie Folgendes:
PROJECT_ID
: die Projekt-ID der Organisation.FLEET_HOST_PROJECT_ID
: Wenn Sie GKE Workload Identity Federation for GKE verwenden, entspricht diesPROJECT_ID
. Wenn Sie Workload Identity Federation for GKE für Flotten verwenden, ist dies die Projekt-ID der Flotte, für die Ihr Cluster registriert ist.GSA_NAME
: das benutzerdefinierte Google-Dienstkonto, das Sie für die Verbindung mit Artifact Registry verwenden möchten. Dieses Dienstkonto muss die IAM-Rolle Artifact Registry-Leser (roles/artifactregistry.reader
) haben.KSA_NAME
: das Kubernetes-Dienstkonto für den Abgleich.- Verwenden Sie für Stamm-Repositories
root-reconciler
, wenn derRootSync
-Nameroot-sync
lautet. Verwenden Sie andernfallsroot-reconciler-ROOT_SYNC_NAME
. Wenn Sie Config Sync mit der Google Cloud Console oder der Google Cloud CLI installieren, erstellt Config Sync automatisch ein RootSync-Objekt namensroot-sync
.
- Verwenden Sie für Stamm-Repositories
REPOSITORY
: Name des Repositorys.POLICY_FILE
ist die JSON- oder YAML-Datei mit der Identity and Access Management-Richtlinie.
Standardmäßiges Compute Engine-Dienstkonto
Wenn sich Ihr Repository in Cloud Source Repositories befindet und Ihr Cluster GKE mit deaktivierter Workload Identity Federation for GKE verwendet, können Sie gcenode
als Authentifizierungstyp verwenden.
Wenn Sie Config Sync mit der Google Cloud Console konfigurieren, wählen Sie als Authentifizierungstyp Google Cloud Repository aus.
Wenn Sie Config Sync mithilfe des Google Cloud CLI konfigurieren, fügen Sie gcenode
als secretType
hinzu.
Wenn Sie entweder Google Cloud Repository oder gcenode
auswählen, können Sie das Compute Engine-Standarddienstkonto verwenden. Sie müssen dem Compute Engine-Standarddienstkonto die IAM-Rolle „Cloud Source Repositories-Leser“ (roles/source.reader
) zuweisen. Weitere Informationen zu den Rollen und Berechtigungen für Cloud Source Repositories finden Sie unter Berechtigungen zum Ansehen von Repositories gewähren.
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/source.reader \
--member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com"
Ersetzen Sie PROJECT_ID
durch die Projekt-ID Ihrer Organisation und PROJECT_NUMBER
durch die Projektnummer Ihrer Organisation.
GitHub App
Wenn sich Ihr Repository in GitHub befindet, können Sie githubapp
als Authentifizierungstyp verwenden.
So verwenden Sie eine GitHub-App:
Folgen Sie der Anleitung auf GitHub, um eine GitHub-App bereitzustellen und ihr Lesezugriff auf Ihr Repository zu gewähren.
Fügen Sie die GitHub App-Konfiguration einem neuen Secret im Cluster hinzu:
Client-ID verwenden
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-literal=github-app-client-id=CLIENT_ID \ --from-literal=github-app-installation-id=INSTALLATION_ID \ --from-file=github-app-private-key=/path/to/GITHUB_PRIVATE_KEY \ --from-literal=github-app-base-url=BASE_URL
- Ersetzen Sie
CLIENT_ID
durch die Client-ID für die GitHub App. - Ersetzen Sie
INSTALLATION_ID
durch die Installations-ID der GitHub App. - Ersetzen Sie
/path/to/GITHUB_PRIVATE_KEY
durch den Namen der Datei, die den privaten Schlüssel enthält. - Ersetzen Sie
BASE_URL
durch die Basis-URL für den GitHub API-Endpunkt. Das ist nur erforderlich, wenn das Repository nicht unter www.github.com gehostet wird. Andernfalls kann das Argument weggelassen werden und es wird standardmäßighttps://api.github.com/
verwendet.
Anwendungs-ID verwenden
kubectl create ns config-management-system && \ kubectl create secret generic git-creds \ --namespace=config-management-system \ --from-literal=github-app-application-id=APPLICATION_ID \ --from-literal=github-app-installation-id=INSTALLATION_ID \ --from-file=github-app-private-key=/path/to/GITHUB_PRIVATE_KEY \ --from-literal=github-app-base-url=BASE_URL
- Ersetzen Sie
APPLICATION_ID
durch die Anwendungs-ID der GitHub App. - Ersetzen Sie
INSTALLATION_ID
durch die Installations-ID der GitHub App. - Ersetzen Sie
/path/to/GITHUB_PRIVATE_KEY
durch den Namen der Datei, die den privaten Schlüssel enthält. - Ersetzen Sie
BASE_URL
durch die Basis-URL für den GitHub API-Endpunkt. Das ist nur erforderlich, wenn das Repository nicht unter www.github.com gehostet wird. Andernfalls kann das Argument weggelassen werden und es wird standardmäßighttps://api.github.com/
verwendet.
- Ersetzen Sie
Löschen Sie den privaten Schlüssel vom lokalen Datenträger oder schützen Sie ihn anderweitig.
Verwenden Sie den Authentifizierungstyp
githubapp
, wenn Sie Config Sync konfigurieren und die URL für Ihr Git-Repository hinzufügen.
Config Sync Lesezugriff auf OCI gewähren
Config Sync benötigt Lesezugriff auf Ihr OCI-Image, das in Artifact Registry gespeichert ist, damit es die im Image enthaltenen Konfigurationen lesen und auf Ihre Cluster anwenden kann.
Falls für den Lesezugriff auf Ihr Image keine Authentifizierung erforderlich ist, können Sie mit der Konfiguration von Config Sync fortfahren und none
als Authentifizierungstyp verwenden. Wenn Ihr Image beispielsweise öffentlich ist und jeder im Internet darauf zugreifen kann, müssen Sie sich nicht authentifizieren.
Die meisten Nutzer müssen jedoch Anmeldedaten erstellen, um auf eingeschränkte Images zuzugreifen. Config Sync unterstützt die folgenden Authentifizierungsmechanismen:
- Kubernetes-Dienstkonto (
k8sserviceaccount
) - Google-Dienstkonto(
gcpserviceaccount
) Standardmäßiges Compute Engine-Dienstkonto (
gcenode
)
Kubernetes-Dienstkonto
Wenn Sie Ihr OCI-Image in Artifact Registry speichern und Ihr Cluster GKE Workload Identity Federation for GKE oder Workload Identity Federation for GKE für Flotten verwendet, können Sie k8sserviceaccount
als Authentifizierungstyp in Version 1.17.2 und höher verwenden. Diese Option wird aufgrund der einfacheren Konfiguration anstelle von gcpserviceaccount
empfohlen.
Weisen Sie dem Kubernetes-Dienstkonto mit dem Workload Identity Federation for GKE-Pool die IAM-Rolle „Artifact Registry-Leser“ (
roles/artifactregistry.reader
) zu. Weitere Informationen zu Artifact Registry-Rollen und ‑Berechtigungen finden Sie unter Rollen und Berechtigungen für Artifact Registry konfigurieren.Erteilen Sie projektweite Berechtigungen, wenn für alle Repositories im Projekt dieselben Berechtigungen gelten sollen.
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
Erteilen Sie eine Repository-spezifische Berechtigung, wenn Sie Dienstkonten für jedes Repository in Ihrem Projekt unterschiedliche Zugriffsebenen zuweisen möchten.
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ --project=PROJECT_ID
Ersetzen Sie Folgendes:
PROJECT_ID
: die Projekt-ID der Organisation.FLEET_HOST_PROJECT_ID
: Wenn Sie GKE Workload Identity Federation for GKE verwenden, entspricht diesPROJECT_ID
. Wenn Sie Workload Identity Federation for GKE für Flotten verwenden, ist dies die Projekt-ID der Flotte, für die Ihr Cluster registriert ist.KSA_NAME
: das Kubernetes-Dienstkonto für den Abgleich.- Verwenden Sie für Stamm-Repositories
root-reconciler
, wenn derRootSync
-Nameroot-sync
lautet. Verwenden Sie andernfallsroot-reconciler-ROOT_SYNC_NAME
. Wenn Sie Config Sync mit der Google Cloud Console oder der Google Cloud CLI installieren, erstellt Config Sync automatisch ein RootSync-Objekt namensroot-sync
.
- Verwenden Sie für Stamm-Repositories
REPOSITORY
: die ID des Repositorys.LOCATION
: der regionale oder multiregionale Speicherort für das Repository.
Google-Dienstkonto
Wenn Sie Ihr OCI-Image in Artifact Registry speichern und Ihr Cluster GKE Workload Identity Federation for GKE oder Workload Identity Federation for GKE für Flotten verwendet, können Sie gcpserviceaccount
als Authentifizierungstyp verwenden. Ab Version 1.17.2 wird stattdessen k8sserviceaccount
empfohlen. Mit dieser Option entfallen die zusätzlichen Schritte zum Erstellen eines Google-Dienstkontos und der zugehörigen IAM-Richtlinienbindung.
Wenn Sie kein Dienstkonto haben, erstellen Sie eins.
Weisen Sie dem Google-Dienstkonto die IAM-Rolle „Artifact Registry-Leser“ (
roles/artifactregistry.reader
) zu. Weitere Informationen zu Artifact Registry-Rollen und ‑Berechtigungen finden Sie unter Rollen und Berechtigungen für Artifact Registry konfigurieren.Erteilen Sie projektweite Berechtigungen, wenn für alle Repositories im Projekt dieselben Berechtigungen gelten sollen.
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com"
Erteilen Sie eine Repository-spezifische Berechtigung, wenn Sie Dienstkonten für jedes Repository in Ihrem Projekt unterschiedliche Zugriffsebenen zuweisen möchten.
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --project=PROJECT_ID
Erstellen Sie mit dem folgenden Befehl eine IAM-Richtlinienbindung zwischen dem Kubernetes-Dienstkonto und dem Google-Dienstkonto:
gcloud iam service-accounts add-iam-policy-binding GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ --project=PROJECT_ID
Ersetzen Sie Folgendes:
PROJECT_ID
: die Projekt-ID der Organisation.FLEET_HOST_PROJECT_ID
: Wenn Sie GKE Workload Identity Federation for GKE verwenden, entspricht diesPROJECT_ID
. Wenn Sie Workload Identity Federation for GKE für Flotten verwenden, ist dies die Projekt-ID der Flotte, für die Ihr Cluster registriert ist.GSA_NAME
: das benutzerdefinierte Google-Dienstkonto, das Sie für die Verbindung mit Artifact Registry verwenden möchten. Dieses Dienstkonto muss die IAM-Rolle Artifact Registry-Leser (roles/artifactregistry.reader
) haben.KSA_NAME
: das Kubernetes-Dienstkonto für den Abgleich.- Verwenden Sie für Stamm-Repositories
root-reconciler
, wenn derRootSync
-Nameroot-sync
lautet. Verwenden Sie andernfallsroot-reconciler-ROOT_SYNC_NAME
. Wenn Sie Config Sync mit der Google Cloud Console oder der Google Cloud CLI installieren, erstellt Config Sync automatisch ein RootSync-Objekt namensroot-sync
.
- Verwenden Sie für Stamm-Repositories
REPOSITORY
: die ID des Repositorys.LOCATION
: der regionale oder multiregionale Speicherort für das Repository.
Standardmäßiges Compute Engine-Dienstkonto
Wenn Sie Ihr Helm-Diagramm in Artifact Registry speichern und Ihr Cluster GKE mit deaktivierter Workload Identity Federation for GKE verwendet, können Sie gcenode
als Authentifizierungstyp verwenden.
Config Sync verwendet das Compute Engine-Standarddienstkonto.
Sie müssen Ihrem Compute Engine-Standarddienstkonto-Leser entweder Zugriff auf Artifact Registry gewähren.
Erteilen Sie dem Compute Engine-Dienstkonto die Leseberechtigung für Artifact Registry mit dem folgenden Befehl:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/artifactregistry.reader
Ersetzen Sie
PROJECT_ID
durch die Projekt-ID Ihrer Organisation undPROJECT_NUMBER
durch die Projektnummer Ihrer Organisation.
Config Sync für eine Zertifizierungsstelle konfigurieren
Bei Servern, die mit Zertifikaten einer Zertifizierungsstelle (CA, Certificate Authority) konfiguriert sind, die noch nicht als vertrauenswürdig eingestuft wurde, kann Config Sync so konfiguriert werden, dass HTTPS-Verbindungen zum Server mit einem Zertifikat der Zertifizierungsstelle überprüft werden. Dies wird für Git-, Helm- und OCI-Server unterstützt. Das CA-Zertifikat muss vollständige SSL-Zertifikate (Stamm/Intermediate/Leaf) enthalten.
Wenn Ihr Server bereits eine vertrauenswürdige Zertifizierungsstelle verwendet oder Sie keine Verbindung über HTTPS herstellen, können Sie diesen Schritt überspringen und caCertSecretRef
festlegen weglassen.
RootSync
Rufen Sie das CA-Zertifikat ab, mit dem das Zertifikat für Ihren Git-Server ausgestellt wurde, und speichern Sie es in einer Datei.
Bei
RootSync
-Objekten muss das Secret im Namespaceconfig-management-system
erstellt werden. Beispiel:kubectl create ns config-management-system &&
kubectl create secret generic ROOT_CA_CERT_SECRET_NAME
--namespace=config-management-system
--from-file=cert=/path/to/CA_CERT_FILEWenn Sie Config Sync konfigurieren, setzen Sie den Wert des Feldes
caCertSecretRef.name
im ObjektRootSync
auf ROOT_CA_CERT_SECRET_NAME.
RepoSync
Rufen Sie das CA-Zertifikat ab, mit dem das Zertifikat für Ihren Git-Server ausgestellt wurde, und speichern Sie es in einer Datei.
Bei
RepoSync
-Objekten muss das Secret im selben Namespace wie RepoSync erstellt werden. Beispiel:kubectl create ns REPO_SYNC_NAMESPACE &&
kubectl create secret generic NAMESPACE_CA_CERT_SECRET_NAME
--namespace=REPO_SYNC_NAMESPACE
--from-file=cert=/path/to/CA_CERT_FILEWenn Sie
RepoSync
konfigurieren, setzen Sie den Wert descaCertSecretRef.name
-Felds imRepoSync
-Objekt auf NAMESPACE_CA_CERT_SECRET_NAME.
Config Sync Lesezugriff auf Helm gewähren
Config Sync benötigt Lesezugriff auf Ihr Helm-Repository, damit es die Helm-Diagramme in Ihrem Repository lesen und in Ihren Clustern installieren kann.
Falls für den Lesezugriff auf Ihr Repository keine Authentifizierung erforderlich ist, können Sie mit der Konfiguration von Config Sync fortfahren und none
als Authentifizierungstyp verwenden. Wenn Ihr Helm-Repository beispielsweise öffentlich ist und jeder im Internet darauf zugreifen kann, müssen Sie sich nicht authentifizieren.
Die meisten Nutzer müssen jedoch Anmeldedaten erstellen, um auf private Helm-Repositories zugreifen zu können. Config Sync unterstützt die folgenden Authentifizierungsmechanismen:
- Token (
token
) - Kubernetes-Dienstkonto (
k8sserviceaccount
) - Google-Dienstkonto(
gcpserviceaccount
) - Standardmäßiges Compute Engine-Dienstkonto (
gcenode
)
Token
Erstellen Sie ein Secret mit einem Helm-Repository-Nutzernamen und einem -Passwort:
kubectl create secret generic SECRET_NAME \
--namespace=config-management-system \
--from-literal=username=USERNAME \
--from-literal=password=PASSWORD
Ersetzen Sie Folgendes:
SECRET_NAME
: der Name, den Sie dem Controller geben möchtenUSERNAME
: der Nutzername des Helm-Repositorys.PASSWORD
: das Passwort des Helm-Repositorys.
Wenn Sie Config Sync konfigurieren, verwenden Sie den Secret-Namen, den Sie für spec.helm.secretRef.name
ausgewählt haben.
Kubernetes-Dienstkonto
Wenn Sie Ihr Helm-Diagramm in Artifact Registry speichern und Ihr Cluster GKE Workload Identity Federation for GKE oder Workload Identity Federation for GKE für Flotten verwendet, können Sie k8sserviceaccount
als Authentifizierungstyp in Version 1.17.2 und höher verwenden. Diese Option wird aufgrund der einfacheren Konfiguration anstelle von gcpserviceaccount
empfohlen.
Weisen Sie dem Kubernetes-Dienstkonto mit dem Workload Identity Federation for GKE-Pool die IAM-Rolle „Artifact Registry-Leser“ (
roles/artifactregistry.reader
) zu. Weitere Informationen zu Artifact Registry-Rollen und ‑Berechtigungen finden Sie unter Rollen und Berechtigungen für Artifact Registry konfigurieren.Erteilen Sie projektweite Berechtigungen, wenn für alle Repositories im Projekt dieselben Berechtigungen gelten sollen.
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]"
Erteilen Sie eine Repository-spezifische Berechtigung, wenn Sie Dienstkonten für jedes Repository in Ihrem Projekt unterschiedliche Zugriffsebenen zuweisen möchten.
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ --project=PROJECT_ID
Ersetzen Sie Folgendes:
PROJECT_ID
: die Projekt-ID der Organisation.FLEET_HOST_PROJECT_ID
: Wenn Sie GKE Workload Identity Federation for GKE verwenden, entspricht diesPROJECT_ID
. Wenn Sie Workload Identity Federation for GKE für Flotten verwenden, ist dies die Projekt-ID der Flotte, für die Ihr Cluster registriert ist.KSA_NAME
: das Kubernetes-Dienstkonto für den Abgleich.- Verwenden Sie für Stamm-Repositories
root-reconciler
, wenn derRootSync
-Nameroot-sync
lautet. Verwenden Sie andernfallsroot-reconciler-ROOT_SYNC_NAME
.
- Verwenden Sie für Stamm-Repositories
REPOSITORY
: die ID des Repositorys.LOCATION
: der regionale oder multiregionale Speicherort für das Repository.
Google-Dienstkonto
Wenn Sie Ihr Helm-Diagramm in Artifact Registry speichern und Ihr Cluster GKE Workload Identity Federation for GKE oder Workload Identity Federation for GKE für Flotten verwendet, können Sie gcpserviceaccount
als Authentifizierungstyp verwenden. Ab Version 1.17.2 wird stattdessen k8sserviceaccount
empfohlen. Mit dieser Option entfallen die zusätzlichen Schritte zum Erstellen eines Google-Dienstkontos und der zugehörigen IAM-Richtlinienbindung.
Wenn Sie kein Dienstkonto haben, erstellen Sie eins.
Weisen Sie dem Google-Dienstkonto die IAM-Rolle „Artifact Registry-Leser“ (
roles/artifactregistry.reader
) zu. Weitere Informationen zu Artifact Registry-Rollen und ‑Berechtigungen finden Sie unter Rollen und Berechtigungen für Artifact Registry konfigurieren.Erteilen Sie projektweite Berechtigungen, wenn für alle Repositories im Projekt dieselben Berechtigungen gelten sollen.
gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/artifactregistry.reader \ --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com"
Erteilen Sie eine Repository-spezifische Berechtigung, wenn Sie Dienstkonten für jedes Repository in Ihrem Projekt unterschiedliche Zugriffsebenen zuweisen möchten.
gcloud artifacts repositories add-iam-policy-binding REPOSITORY \ --location=LOCATION \ --role=roles/artifactregistry.reader \ --member="serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --project=PROJECT_ID
Erstellen Sie mit dem folgenden Befehl eine IAM-Richtlinienbindung zwischen dem Kubernetes-Dienstkonto und dem Google-Dienstkonto:
gcloud iam service-accounts add-iam-policy-binding GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" --project=PROJECT_ID
Ersetzen Sie Folgendes:
PROJECT_ID
: die Projekt-ID der Organisation.FLEET_HOST_PROJECT_ID
: Wenn Sie GKE Workload Identity Federation for GKE verwenden, entspricht diesPROJECT_ID
. Wenn Sie Workload Identity Federation for GKE für Flotten verwenden, ist dies die Projekt-ID der Flotte, für die Ihr Cluster registriert ist.GSA_NAME
: das benutzerdefinierte Google-Dienstkonto, das Sie für die Verbindung mit Artifact Registry verwenden möchten. Dieses Dienstkonto muss die IAM-Rolle Artifact Registry-Leser (roles/artifactregistry.reader
) haben.KSA_NAME
: das Kubernetes-Dienstkonto für den Abgleich.- Verwenden Sie für Stamm-Repositories
root-reconciler
, wenn derRootSync
-Nameroot-sync
lautet. Verwenden Sie andernfallsroot-reconciler-ROOT_SYNC_NAME
.
- Verwenden Sie für Stamm-Repositories
REPOSITORY
: die ID des Repositorys.LOCATION
: der regionale oder multiregionale Speicherort für das Repository.
Standardmäßiges Compute Engine-Dienstkonto
Wenn Sie Ihr Helm-Diagramm in Artifact Registry speichern und Ihr Cluster GKE mit deaktivierter Workload Identity Federation for GKE verwendet, können Sie gcenode
als Authentifizierungstyp verwenden.
Config Sync verwendet das Compute Engine-Standarddienstkonto.
Sie müssen Ihrem Compute Engine-Standarddienstkonto-Leser entweder Zugriff auf Artifact Registry gewähren. Möglicherweise müssen Sie den Zugriffsbereich storage-ro
gewähren, um Lesezugriff auf Images zu ermöglichen.
Erteilen Sie dem Compute Engine-Dienstkonto die Leseberechtigung für Artifact Registry:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/artifactregistry.reader
Ersetzen Sie
PROJECT_ID
durch die Projekt-ID Ihrer Organisation undPROJECT_NUMBER
durch die Projektnummer Ihrer Organisation.
Config Sync konfigurieren
Zum Konfigurieren der Synchronisierung vom Stamm-Repository müssen Sie ein RootSync-Objekt erstellen, das Ihr Stamm-Repository mit dem Cluster synchronisiert. Sie können nur ein Root-Repository pro Cluster erstellen und das Root-Repository kann entweder ein unstrukturiertes Repository oder ein hierarchisches Repository sein.
Wenn Sie den Config Sync-Zulassungs-Webhook verwenden (der Zulassungs-Webhook ist standardmäßig deaktiviert) und Config Sync in einem privaten Cluster installieren, fügen Sie eine Firewallregel hinzu, um Port
10250
zuzulassen. Der Config Sync-Zulassungs-Webhook verwendet Port10250
, um Abweichungen zu verhindern.Warten Sie, bis die CRDs für
RootSync
undRepoSync
verfügbar sind:until kubectl get customresourcedefinitions rootsyncs.configsync.gke.io reposyncs.configsync.gke.io; do date; sleep 1; echo ""; done
Speichern Sie eines der folgenden Manifeste als
root-sync.yaml
. Verwenden Sie die Manifestversion, die dem Quelltyp Ihrer Konfigurationen entspricht.Git
# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceType: git sourceFormat: ROOT_FORMAT git: repo: ROOT_REPOSITORY revision: ROOT_REVISION branch: ROOT_BRANCH dir: ROOT_DIRECTORY auth: ROOT_AUTH_TYPE gcpServiceAccountEmail: ROOT_EMAIL secretRef: name: ROOT_SECRET_NAME noSSLVerify: ROOT_NO_SSL_VERIFY caCertSecretRef: name: ROOT_CA_CERT_SECRET_NAME
Ersetzen Sie Folgendes:
ROOT_SYNC_NAME
: Fügen Sie den Namen Ihres RootSync-Objekts hinzu.ROOT_FORMAT
: Fügen Sieunstructured
hinzu, um ein unstrukturiertes Repository zu verwenden, oder fügen Siehierarchy
hinzu, um ein hierarchisches Repository zu verwenden. Bei diesen Werten wird zwischen Groß- und Kleinschreibung unterschieden. Dieses Feld ist optional und der Standardwert isthierarchy
. Wir empfehlen das Hinzufügen vonunstructured
, da Sie damit Ihre Konfigurationen so organisieren können, wie es für Sie am besten ist.ROOT_REPOSITORY
: Fügen Sie die URL des Git-Repositorys hinzu, das als Stamm-Repository verwendet werden soll. Sie können URLs mithilfe des HTTPS- oder SSH-Protokolls eingeben.https://github.com/GoogleCloudPlatform/anthos-config-management-samples
verwendet beispielsweise das HTTPS-Protokoll. Dies ist ein Pflichtfeld.ROOT_REVISION
: Fügen Sie die Git-Revision (Tag oder Hash) oder den Zweig hinzu, von dem aus synchronisiert werden soll. Dieses Feld ist optional und der Standardwert istHEAD
. Wenn Sie einen Hash verwenden, muss es sich um einen vollständigen Hash (nicht um eine abgekürzte Form) handeln.ROOT_BRANCH
: Der Zweig des Repositorys, von dem aus synchronisiert werden soll. Dieses Feld ist optional und der Standardwert istmaster
. Wir empfehlen, den Namen der Filiale im Feldrevision
anzugeben. Wenn sowohl das Feldrevision
als auch das Feldbranch
angegeben ist, hatrevision
Vorrang vorbranch
.ROOT_DIRECTORY
: Fügen Sie den Pfad im Git-Repository zum Stammverzeichnis hinzu, das die Konfiguration enthält, mit der Sie die Synchronisierung durchführen möchten. Dieses Feld ist optional und die Standardeinstellung ist das Stammverzeichnis (/
) des Repositorys.ROOT_AUTH_TYPE
: Fügen Sie einen der folgenden Authentifizierungstypen hinzu:none
: Keine Authentifizierung verwendenssh
: Ein SSH-Schlüsselpaar verwendencookiefile
: Nutzen Sie einencookiefile
.token
: Ein Token verwendengcpserviceaccount
: Mit einem Google-Dienstkonto auf Cloud Source Repositories zugreifengcenode
: Mit einem Google-Dienstkonto auf Cloud Source Repositories zugreifen Wählen Sie diese Option nur aus, wenn Workload Identity Federation for GKE nicht in Ihrem Cluster aktiviert ist.
Weitere Informationen zu diesen Authentifizierungstypen finden Sie unter Config Sync Lesezugriff auf Git gewähren.
Dies ist ein Pflichtfeld.
ROOT_EMAIL
: Wenn Siegcpserviceaccount
fürROOT_AUTH_TYPE
angegeben haben, fügen Sie die E-Mail-Adresse Ihres Google-Dienstkontos hinzu. Beispiel:acm@PROJECT_ID.iam.gserviceaccount.com
.ROOT_SECRET_NAME
: Fügen Sie den Namen Ihres Secrets hinzu. Ist dieses Feld festgelegt, müssen Sie dem Git-Anbieter den öffentlichen Schlüssel des Secrets hinzufügen. Dieses Feld ist optional.ROOT_NO_SSL_VERIFY
: Setzen Sie dieses Feld auftrue
, um die SSL-Zertifikatsüberprüfung zu deaktivieren. Der Standardwert istfalse
.ROOT_CA_CERT_SECRET_NAME
: Fügen Sie den Namen Ihres Secrets hinzu. Ist dieses Feld festgelegt, muss Ihr Git-Anbieter ein Zertifikat verwenden, das von dieser Zertifizierungsstelle (CA, Certification Authority) ausgestellt wurde. Das Secret muss das CA-Zertifikat unter einem Schlüssel namenscert
enthalten. Dieses Feld ist optional.Weitere Informationen zum Konfigurieren des Secret-Objekts für das CA-Zertifikat finden Sie unter Zertifizierungsstelle konfigurieren.
Eine Erläuterung der Felder und eine vollständige Liste der Felder, die Sie dem Feld
spec
hinzufügen können, finden Sie unter RootSync-Felder.Dieses Manifest erstellt ein
RootSync
-Objekt, das Git als Quelle verwendet.OCI
# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceType: oci sourceFormat: ROOT_FORMAT oci: image: ROOT_IMAGE dir: ROOT_DIRECTORY auth: ROOT_AUTH_TYPE gcpServiceAccountEmail: ROOT_EMAIL caCertSecretRef: name: ROOT_CA_CERT_SECRET_NAME
Ersetzen Sie Folgendes:
ROOT_SYNC_NAME
: Fügen Sie den Namen Ihres RootSync-Objekts hinzu.ROOT_FORMAT
: Fügen Sieunstructured
hinzu, um ein unstrukturiertes Repository zu verwenden, oder fügen Siehierarchy
hinzu, um ein hierarchisches Repository zu verwenden. Bei diesen Werten wird zwischen Groß- und Kleinschreibung unterschieden. Dieses Feld ist optional und der Standardwert isthierarchy
. Wir empfehlen das Hinzufügen vonunstructured
, da Sie damit Ihre Konfigurationen so organisieren können, wie es für Sie am besten ist.ROOT_IMAGE
: Die URL des OCI-Images, das als Root-Repository verwendet werden soll, z. B.LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME
. Standardmäßig wird das Image aus dem Taglatest
abgerufen, aber Sie können stattdessen Images vonTAG
oderDIGEST
abrufen. Geben SieTAG
oderDIGEST
imPACKAGE_NAME
an:- Zum Abrufen von
TAG
:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
- Zum Abrufen von
DIGEST
:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
- Zum Abrufen von
ROOT_DIRECTORY
: Fügen Sie den Pfad im Repository zum Stammverzeichnis hinzu, das die Konfiguration enthält, mit der Sie die Synchronisierung durchführen möchten. Dieses Feld ist optional und die Standardeinstellung ist das Stammverzeichnis (/
) des Repositorys.ROOT_AUTH_TYPE
: Fügen Sie einen der folgenden Authentifizierungstypen hinzu:none
: Keine Authentifizierung verwendengcenode
: Verwenden Sie das Compute Engine-Standarddienstkonto, um auf ein Image in Artifact Registry zuzugreifen. Wählen Sie diese Option nur aus, wenn Workload Identity Federation for GKE in Ihrem Cluster nicht aktiviert ist.gcpserviceaccount
: Verwenden Sie ein Google-Dienstkonto für den Zugriff auf ein Image.
Dies ist ein Pflichtfeld.
ROOT_EMAIL
: Wenn Siegcpserviceaccount
fürROOT_AUTH_TYPE
angegeben haben, fügen Sie die E-Mail-Adresse Ihres Google-Dienstkontos hinzu. Beispiel:acm@PROJECT_ID.iam.gserviceaccount.com
.ROOT_CA_CERT_SECRET_NAME
: Fügen Sie den Namen Ihres Secrets hinzu. Ist dieses Feld festgelegt, muss IhrOCI-Anbieter ein Zertifikat verwenden, das von dieser Zertifizierungsstelle (CA, Certification Authority) ausgestellt wurde. Das Secret muss das CA-Zertifikat unter einem Schlüssel namenscert
enthalten. Dieses Feld ist optional.
Weitere Informationen zum Konfigurieren des Secret-Objekts für das CA-Zertifikat finden Sie unter Zertifizierungsstelle konfigurieren.
Eine Erläuterung der Felder und eine vollständige Liste der Felder, die Sie dem Feld
spec
hinzufügen können, finden Sie unter RootSync-Felder.Dieses Manifest erstellt ein
RootSync
-Objekt, das ein OCI-Image als Quelle verwendet.Helm
# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceType: helm sourceFormat: ROOT_FORMAT helm: repo: ROOT_HELM_REPOSITORY chart: HELM_CHART_NAME version: HELM_CHART_VERSION releaseName: HELM_RELEASE_NAME namespace: HELM_RELEASE_NAMESPACE values: foo: bar: VALUE_1 baz: - qux: VALUE_2 xyz: VALUE_3 includeCRDs: HELM_INCLUDE_CRDS auth: ROOT_AUTH_TYPE gcpServiceAccountEmail: ROOT_EMAIL secretRef: name: ROOT_SECRET_NAME caCertSecretRef: name: ROOT_CA_CERT_SECRET_NAME
Ersetzen Sie Folgendes:
ROOT_SYNC_NAME
: Fügen Sie den Namen Ihres RootSync-Objekts hinzu.ROOT_FORMAT
: Fügen Sieunstructured
hinzu, um ein unstrukturiertes Repository zu verwenden, oder fügen Siehierarchy
hinzu, um ein hierarchisches Repository zu verwenden. Bei diesen Werten wird zwischen Groß- und Kleinschreibung unterschieden. Dieses Feld ist optional und der Standardwert isthierarchy
. Wir empfehlen das Hinzufügen vonunstructured
, da Sie damit Ihre Konfigurationen so organisieren können, wie es für Sie am besten ist.ROOT_HELM_REPOSITORY
: die URL des Helm-Repositorys, das als Stamm-Repository verwendet werden soll. Sie können URLs mithilfe des HTTPS- oder SSH-Protokolls eingeben.https://github.com/GoogleCloudPlatform/anthos-config-management-samples
verwendet beispielsweise das HTTPS-Protokoll. Dies ist ein Pflichtfeld.HELM_CHART_NAME
: Fügen Sie den Namen Ihres Helm-Charts hinzu. Dies ist ein Pflichtfeld.HELM_CHART_VERSION
: die Version Ihres Diagramms. Dieses Feld ist optional. Wenn kein Wert angegeben ist, wird die aktuelle Version verwendet.HELM_RELEASE_NAME
: Der Name des Helm-Release. Dieses Feld ist optional.HELM_RELEASE_NAMESPACE
: der Ziel-Namespace für einen Release. Ein Namespace wird nur für Ressourcen festgelegt, die in ihren Vorlagennamespace: {{ .Release.Namespace }}
enthalten. Dieses Feld ist optional. Wenn kein Wert angegeben ist, wird der Standard-Namespaceconfig-management-system
verwendet.HELM_INCLUDE_CRDS
: Legen Sie diesen Wert auftrue
fest, wenn die Helm-Vorlage auch eine CustomResourceDefinition generieren soll. Dieses Feld ist optional. Wenn kein Wert angegeben ist, lautet der Standardwertfalse
und es wird keine CRD generiert.VALUE
: Anstelle der Standardwerte des Helm-Diagramms zu verwendende Werte Formatieren Sie dieses Feld genauso wie die Datei values.yaml des Helm-Diagramms. Dieses Feld ist optional.ROOT_AUTH_TYPE
: Fügen Sie einen der folgenden Authentifizierungstypen hinzu:none
: Keine Authentifizierung verwendentoken
: Mit einem Nutzernamen und Passwort auf ein privates Helm-Repository zugreifen.gcenode
: Verwenden Sie das Compute Engine-Standarddienstkonto, um auf ein Image in Artifact Registry zuzugreifen. Wählen Sie diese Option nur aus, wenn Workload Identity Federation for GKE in Ihrem Cluster nicht aktiviert ist.gcpserviceaccount
: Verwenden Sie ein Google-Dienstkonto für den Zugriff auf ein Image.
Dies ist ein Pflichtfeld.
ROOT_EMAIL
: Wenn Siegcpserviceaccount
fürROOT_AUTH_TYPE
angegeben haben, fügen Sie die E-Mail-Adresse Ihres Google-Dienstkontos hinzu. Beispiel:acm@PROJECT_ID.iam.gserviceaccount.com
.ROOT_SECRET_NAME
: Fügen Sie den Namen Ihres Secrets hinzu, wenntoken
derROOT_AUTH_TYPE
ist. Dieses Feld ist optional.ROOT_CA_CERT_SECRET_NAME
: Fügen Sie den Namen Ihres Secrets hinzu. Ist dieses Feld festgelegt, muss Ihr Helm-Anbieter ein Zertifikat verwenden, das von dieser Zertifizierungsstelle (CA, Certification Authority) ausgestellt wurde. Das Secret muss das CA-Zertifikat unter einem Schlüssel namenscert
enthalten. Dieses Feld ist optional.
Weitere Informationen zum Konfigurieren des Secret-Objekts für das CA-Zertifikat finden Sie unter Zertifizierungsstelle konfigurieren.
Eine Erläuterung der Felder und eine vollständige Liste der Felder, die Sie dem Feld
spec
hinzufügen können, finden Sie unter RootSync-Felder.Dieses Manifest erstellt ein
RootSync
-Objekt, das Helm als Quelle verwendet.Änderungen anwenden:
kubectl apply -f root-sync.yaml
Synchronisierungsstatus des Stamm-Repositorys prüfen
Mit dem Befehl nomos status
können Sie den Synchronisierungsstatus des Stamm-Repositorys prüfen:
nomos status
Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:
my_managed_cluster-1
--------------------
<root> git@github.com:foo-corp/acme/admin@main
SYNCED f52a11e4
RootSync-Installation prüfen
Wenn Sie ein RootSync-Objekt erstellen, erstellt Config Sync einen Abgleicher mit dem Präfix root-reconciler
. Ein Abgleich ist ein Pod, der als Deployment bereitgestellt wird.
Damit werden Manifeste aus einem Git-Repository mit einem Cluster synchronisiert.
Sie können prüfen, ob das RootSync-Objekt ordnungsgemäß funktioniert. Prüfen Sie dazu den Status der Root-Abgleichsbereitstellung:
kubectl get -n config-management-system deployment \
-l configsync.gke.io/sync-name=ROOT_SYNC_NAME
Ersetzen Sie ROOT_SYNC_NAME
durch den Namen von RootSync.
Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:
NAME READY UP-TO-DATE AVAILABLE AGE
root-reconciler 1/1 1 1 3h42m
Weitere Möglichkeiten zur Untersuchung des Status Ihres RootSync-Objekts finden Sie unter RootSync- und RepoSync-Objekte überwachen.
Nachdem Sie Ihr Root-Repository konfiguriert haben, können Sie optional die Synchronisierung aus mehreren Repositories konfigurieren. Diese Repositories sind hilfreich, wenn Sie ein Repository mit Namespace-bezogenen Konfigurationen benötigen, die clusterübergreifend mit einem bestimmten Namespace synchronisiert werden.
Config Sync aktualisieren
Die Schritte zum Upgrade von Config Sync hängen davon ab, von welcher Version Sie ein Upgrade durchführen und auf welche Version Sie umstellen. Ab Version 1.20.0 wird Config Sync als eigenständige Installation ohne den ConfigManagement Operator bereitgestellt. Wenn Sie ein Upgrade von einer Version vor 1.20.0 auf Version 1.20.0 oder höher durchführen, müssen Sie den ConfigManagement-Operator zuerst deinstallieren.
Wenn Sie ein Upgrade von einer nicht unterstützten Version durchführen, sollten Sie ein schrittweises Upgrade auf maximal drei Nebenversionen gleichzeitig durchführen. Wenn die aktuelle Config Sync-Version beispielsweise 1.14.0 ist, führen Sie zuerst ein Upgrade auf Version 1.17.0 und dann auf Version 1.20.0 durch.
ConfigManagement Operator deinstallieren
Wenn Sie ein Upgrade von einer Version vor 1.20.0 auf Version 1.20.0 oder höher durchführen, müssen Sie zuerst den ConfigManagement-Operator deinstallieren.
Mit dem folgenden Befehl können Sie prüfen, ob Config Management auf Ihrem Cluster installiert ist:
kubectl get configmanagement
Wenn die Ausgabe nicht leer ist, ist Config Management auf dem Cluster installiert.
Führen Sie die folgenden Schritte aus, um Config Management zu deinstallieren, Config Sync aber im Cluster installiert zu lassen. Wir empfehlen, den ConfigManagement-Operator mit nomos CLI
zu deinstallieren, da er eine umfangreichere Benutzeroberfläche und eine robustere Fehlerbehandlung bietet. Sie sollten das Shell-Script nur verwenden, wenn Sie keinen Zugriff auf die nomos CLI
haben.
nomos (empfohlen)
Prüfen Sie, ob die nomos CLI auf der neuesten Version ist.
Führen Sie den folgenden Befehl aus, um den Cluster in Ihrem aktuellen kubectl-Kontext zu aktualisieren:
nomos migrate --remove-configmanagement
Shell-Skript
Kopieren Sie das folgende Shell-Script in eine Datei und führen Sie es aus, um den Cluster in Ihrem aktuellen kubectl-Kontext zu aktualisieren.
#!/bin/bash
set -euox pipefail
hnc_enabled="$(kubectl get configmanagements.configmanagement.gke.io config-management -o=jsonpath="{.spec.hierarchyController.enabled}" --ignore-not-found)"
if [[ "${hnc_enabled}" == "true" ]]; then
echo "Hierarchy Controller is enabled on the ConfigManagement object. It must be disabled before migrating."
echo "This can be done by unsetting the spec.hierarchyController field on ConfigManagement."
exit 1
fi
kubectl delete deployment -n config-management-system config-management-operator --ignore-not-found --cascade=foreground
if kubectl get configmanagement config-management &> /dev/null ; then
kubectl patch configmanagement config-management --type="merge" -p '{"metadata":{"finalizers":[]}}'
kubectl delete configmanagement config-management --cascade=orphan --ignore-not-found
fi
kubectl delete clusterrolebinding config-management-operator --ignore-not-found
kubectl delete clusterrole config-management-operator --ignore-not-found
kubectl delete serviceaccount -n config-management-system config-management-operator --ignore-not-found
kubectl delete customresourcedefinition configmanagements.configmanagement.gke.io --ignore-not-found
Neue Config Sync-Version installieren
Führen Sie die folgenden Schritte für jeden registrierten Cluster aus, um Config Sync zu aktualisieren:
1.20.0 oder höher
Laden Sie das Config Sync-Manifest und die
nomos
-Befehle für die neue Version herunter.Extrahieren Sie das Archiv:
tar -xzvf config-sync.tar.gz
Folgen Sie im im vorherigen Schritt extrahierten Archiv der Anleitung in der bereitgestellten
README
, um die Kustomisierung zu bearbeiten.Um die Config Sync-Installation zu aktualisieren, wenden Sie das gerenderte Manifest an, das Sie gemäß der
README
-Anleitung erstellt haben:kubectl apply -f CONFIG_SYNC_MANIFEST
Ersetzen Sie
CONFIG_SYNC_MANIFEST
durch den Namen des gerenderten Manifests.Ersetzen Sie auf allen Clients den Befehl
nomos
durch die neue Version. Durch diese Änderung kann der Befehlnomos
immer den Status aller registrierten Cluster abrufen und Konfigurationen für sie validieren.
1.19.2 oder niedriger
Laden Sie das Config Sync-Manifest und die
nomos
-Befehle für die neue Version herunter.Wenden Sie das Config Sync-Manifest an:
kubectl apply -f config-management-operator.yaml
Mit diesem Befehl wird das ConfigManagement-Operator-Image aktualisiert. Kubernetes ruft die neue Version ab und startet den Config Sync-Pod mit der neuen Version neu. Beim Start von Config Management wird eine Abgleichschleife ausgeführt, die die im neuen Image gebündelten Manifeste anwendet. Dadurch wird jeder Komponenten-Pod aktualisiert und neu gestartet.
Erstellen Sie eine Datei mit dem Namen
config-management.yaml
und kopieren Sie die folgende YAML-Datei hinein:# config-management.yaml apiVersion: configmanagement.gke.io/v1 kind: ConfigManagement metadata: name: config-management spec: # The `enableMultiRepo` field is set to true to enable RootSync and RepoSync APIs. enableMultiRepo: true preventDrift: PREVENT_DRIFT
Dabei gilt:
PREVENT_DRIFT
: Wenn dieser Wert auftrue
gesetzt ist, wird der Config Sync-Zulassungs-Webhook aktiviert, um Drifts zu verhindern, indem Änderungskonflikte nicht an Live-Cluster übertragen werden. Die Standardeinstellung istfalse
. Config Sync korrigiert Drifts immer, unabhängig vom Wert dieses Felds.
Übernehmen Sie die Änderung:
kubectl apply -f config-management.yaml
Ersetzen Sie auf allen Clients den Befehl
nomos
durch die neue Version. Durch diese Änderung kann der Befehlnomos
immer den Status aller registrierten Cluster abrufen und Konfigurationen für sie validieren.
Config Sync deinstallieren
Führen Sie folgende Schritte aus, um Config Sync zu deinstallieren:
Ein zentraler Administrator sollte das Root-Repository entfernen:
Wenn Sie den Webhook aktiviert haben und Ihre Ressourcen beibehalten möchten, deaktivieren Sie die Drift-Prävention für verworfene Ressourcen. Wenn Sie den Webhook nicht aktiviert haben, müssen Sie keine zusätzlichen Schritte ausführen, um Ihre Ressourcen beizubehalten.
Löschen Sie das Objekt
RootSync
mit folgendem Befehl:kubectl delete -f root-sync.yaml
Mit den Manifesten, mit denen Sie Config Sync installiert haben, können Sie Config Sync auch deinstallieren.
kubectl delete -f CONFIG_SYNC_MANIFEST --ignore-not-found