Synchronisierung aus Namespace-Repositories konfigurieren
Beim Installieren von Config Sync konfigurieren Sie Ihr Root-Repository. Nachdem Sie Ihr Stamm-Repository konfiguriert haben, können Sie Namespace-Repositories konfigurieren. Mit Namespace-Repositories können Sie z. B. die Einrichtung und Kontrolle von Repositories an Nutzer ohne Administratorzugriff delegieren. Weitere Informationen zu diesen Arten von Repositories finden Sie im Abschnitt Repositories in der Config Sync-Übersicht.
Namespace-Repositories erfordern die RepoSync
API. Wenn Sie Config Sync mit der Google Cloud Console oder dem Google Cloud CLI und einer Version 1.7.0 oder höher installiert haben, ist diese API bereits aktiviert. Wenn Sie Config Sync mit kubectl
installiert haben und ein ConfigManagement
-Objekt zum Konfigurieren Ihres Git-Repositorys verwenden, sollten Sie das ConfigManagement-Objekt migrieren, um die RepoSync
API zu aktivieren.
Obwohl Config Sync automatisch Änderungen aus der "Source of Truth" erkennt, können Sie eine zusätzliche Drift-Erkennungs-Ebene hinzufügen, indem Sie den Namespace-Repositories einen Zulassungs-Webhook hinzufügen. Weitere Informationen dazu finden Sie unterKonfigurations-Drift verhindern.
Hinweis
- Erstellen Sie ein unstrukturiertes Git-Repository, das die Konfigurationen enthalten kann, mit denen Config Sync synchronisiert wird, oder verschaffen Sie sich darauf Zugriff. Namespace-Repositories müssen das unstrukturierte Repository-Format verwenden.
- Erstellen Sie einen Cluster auf einer von Anthos unterstützten Plattform und Version oder sorgen Sie dafür, dass Sie darauf zugreifen können.
- Erstellen Sie einen GKE-Cluster, der die Anforderungen für Config Sync erfüllt, oder sorgen Sie dafür, dass Sie darauf zugreifen können.
Beschränkungen
NamespaceSelectors
und (einschließlich Annotationen, die auf Selektoren verweisen) funktionieren nur im Stamm-Repository.
Bevorzugte Konfigurationsmethode auswählen
Wählen Sie eine der beiden Methoden zum Konfigurieren von Namespace-Repositories aus:
Namespace-Repositories im Stamm-Repository steuern Diese Methode zentralisiert die gesamte Konfiguration von Namespace-Repositories im Stamm-Repository und ermöglicht es einem zentralen Administrator, die vollständige Einrichtung abzuschließen.
Namespace-Repositories mit der Kubernetes API steuern. Verwenden Sie diese Methode, wenn Sie die Steuerung des Namespace-Repositorys an die Namespace-Inhaber delegieren möchten.
Namespace-Repositories im Stamm-Repository steuern
Bei dieser Methode verwaltet der zentrale Administrator die Einrichtung von Namespace-Repositories direkt aus dem Stamm-Repository. Da Config Sync die Namespace-Repository-Objekte verwaltet, verhindert diese Methode alle lokalen Änderungen an den Namespace-Repository-Definitionen.
Führen Sie die folgenden Aufgaben aus, um diese Methode zu verwenden:
Legen Sie im Stamm-Repository eine
namespace
-Konfiguration fest:# ROOT_REPO/namespaces/NAMESPACE/namespace.yaml apiVersion: v1 kind: Namespace metadata: name: NAMESPACE
Ersetzen Sie
NAMESPACE
durch einen Namen für den Namespace.Erstellen Sie im Stamm-Repository ein
RepoSync
-Objekt im selben Namespace:# ROOT_REPO/namespaces/NAMESPACE/repo-sync.yaml # If you are using a Config Sync version earlier than 1.8.0, # use: apiVersion: configsync.gke.io/v1alpha1 apiVersion: configsync.gke.io/v1beta1 kind: RepoSync metadata: name: repo-sync namespace: NAMESPACE spec: # Since this is for a namespace repository, the format should be unstructured sourceFormat: unstructured git: repo: NAMESPACE_REPOSITORY revision: NAMESPACE_REVISION branch: NAMESPACE_BRANCH dir: "NAMESPACE_DIRECTORY" auth: NAMESPACE_AUTH_TYPE gcpServiceAccountEmail: NAMESPACE_EMAIL secretRef: name: NAMESPACE_SECRET_NAME # The `noSSLVerify` field is supported in Anthos Config Management version 1.8.2 and later. noSSLVerify: NAMESPACE_NO_SSL_VERIFY
Dabei gilt:
NAMESPACE
: Fügen Sie den Namen Ihres Namespace hinzu.NAMESPACE_REPOSITORY
: Fügen Sie die URL des Git-Repositorys hinzu, das als Namespace-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. Wenn Sie kein Protokoll eingeben, wird die URL als HTTPS-URL behandelt. Dies ist ein Pflichtfeld.NAMESPACE_REVISION
: Fügen Sie die Git-Revision (Tag oder Hash) hinzu, um auszuchecken. Dieses Feld ist optional und der Standardwert istHEAD
.NAMESPACE_BRANCH
: Der Zweig des Repositorys, von dem aus synchronisiert werden soll. Dieses Feld ist optional und der Standardwert istmaster
.NAMESPACE_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.NAMESPACE_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
: Verwenden Sie ein Google-Dienstkonto, um auf ein Repository in Cloud Source Repositories zuzugreifen.gcenode
: Verwenden Sie ein Google-Dienstkonto, um auf ein Repository in Cloud Source Repositories zuzugreifen. Wählen Sie diese Option nur aus, wenn Workload Identity 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.
NAMESPACE_EMAIL
: Wenn Siegcpserviceaccount
fürAUTH_TYPE
angegeben haben, fügen Sie die E-Mail-Adresse Ihres Google-Dienstkontos hinzu. Beispiel:acm@PROJECT_ID.iam.gserviceaccount.com
.NAMESPACE_SECRET_NAME
: Fügen Sie den Namen hinzu, den Sie dem Secret geben möchten. Dieses Feld ist optional.NAMESPACE_NO_SSL_VERIFY
: Setzen Sie dieses Feld auftrue
, um die SSL-Zertifikatsüberprüfung zu deaktivieren. Der Standardwert istfalse
.
Eine Erläuterung der Felder und eine vollständige Liste der Felder, die Sie dem Feld
spec
hinzufügen können, finden Sie unter RepoSync-Felder.Es kann höchstens ein RepoSync-Objekt pro Namespace vorhanden sein. Um diese Einschränkung zu erzwingen, muss das Objekt
name
den Wertrepo-sync
haben. Alle Konfigurationen in dem Verzeichnis, auf dasRepoSync
verweist, müssen sich ebenfalls im selben Namespace wie dasRepoSync
-Objekt befinden.Deklarieren Sie im Stamm-Repository eine
RoleBinding
-Konfiguration, die dem Dienstkontons-reconciler-NAMESPACE
die Berechtigung zur Verwaltung von Objekten im Namespace gewährt. Config Sync erstellt automatisch das Dienstkontons-reconciler-NAMESPACE
, wenn die KonfigurationRepoSync
mit dem Cluster synchronisiert wird.Erstellen Sie das folgende Manifest, um das
RoleBinding
zu deklarieren:# ROOT_REPO/namespaces/NAMESPACE/sync-rolebinding.yaml kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: syncs-repo namespace: NAMESPACE subjects: - kind: ServiceAccount name: ns-reconciler-NAMESPACE namespace: config-management-system roleRef: kind: ClusterRole name: RECONCILER_ROLE apiGroup: rbac.authorization.k8s.io
Dabei gilt:
NAMESPACE
: Fügen Sie den Namen Ihres Namespace hinzu.RECONCILER_ROLE
: Als zentraler Administrator können SieRECONCILER_ROLE
festlegen, um zu erzwingen, welche Konfigurationsarten aus dem Namespace-Repository synchronisiert werden können. Sie können eine der folgenden Rollen auswählen:Eine Standard-ClusterRole:
admin
edit
Weitere Informationen finden Sie unter Nutzerbezogene Rollen.
Ein benutzerdefinierter
ClusterRole
oderRole
, der im Root-Repository deklariert ist. Diese Rolle ermöglicht differenzierte Berechtigungen.
Übernehmen Sie die Änderungen für das lokale Repository:
git add . git commit -m 'Setting up new namespace repository.' git push
Erstellen Sie ein Secret, falls erforderlich, mit Ihrer bevorzugten Authentifizierungsmethode. Wenn Sie
none
als Authentifizierungstyp verwendet haben, können Sie diesen Schritt überspringen.Das Secret muss die folgenden Anforderungen erfüllen:
- Erstellen Sie das Secret im selben Namespace wie RepoSync.
- Der Name des Secrets muss mit dem Namen
spec.git.secretRef
übereinstimmen, den Sie inrepo-sync.yaml
definiert haben. - Sie müssen den öffentlichen Schlüssel des Secrets dem Git-Anbieter hinzufügen.
Verwenden Sie
kubectl get
für eines der Objekte im Namespace-Repository, um die Konfiguration zu prüfen. Beispiel:kubectl get rolebindings -n NAMESPACE
Namespace-Repositories mit der Kubernetes API steuern.
Bei dieser Methode deklariert der zentrale Administrator nur den Namespace im Stamm-Repository und delegiert die Deklaration der Datei RepoSync
an den Anwendungsoperator.
Zentrale Administratoraufgaben
Der zentrale Administrator führt die folgenden Aufgaben aus:
Legen Sie im Stamm-Repository eine
namespace
-Konfiguration fest:# ROOT_REPO/namespaces/NAMESPACE/namespace.yaml apiVersion: v1 kind: Namespace metadata: name: NAMESPACE
Ersetzen Sie
NAMESPACE
durch einen Namen für den Namespace.Deklarieren Sie im Stamm-Repository die Konfiguration
RoleBinding
, um den Anwendungsoperatoren Berechtigungen zu erteilen. Verwenden Sie die RBAC-Eskalationsprävention, damit der Anwendungsoperator später keine Rollenbindung mit Berechtigungen anwenden kann, die von dieser Rollenbindung nicht erteilt wurden.Erstellen Sie das folgende Manifest, um das RoleBinding zu deklarieren:
# ROOT_REPO/namespaces/NAMESPACE/operator-rolebinding.yaml kind: RoleBinding # Add RBAC escalation prevention apiVersion: rbac.authorization.k8s.io/v1 metadata: name: operator namespace: NAMESPACE subjects: - kind: User name: USERNAME apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: OPERATOR_ROLE apiGroup: rbac.authorization.k8s.io
Dabei gilt:
NAMESPACE
: Fügen Sie den Namespace hinzu, den Sie im Stammverzeichnis erstellt haben.USERNAME
: Fügen Sie den Nutzernamen des Anwendungsoperators hinzu.OPERATOR_ROLE
: Als zentraler Administrator können SieOPERATOR_ROLE
festlegen, um zu erzwingen, welche Konfigurationsarten aus dem Namespace-Repository synchronisiert werden können. Sie können eine der folgenden Rollen auswählen:Eine Standard-ClusterRole:
admin
edit
Weitere Informationen finden Sie unter Nutzerbezogene Rollen.
Eine benutzerdefinierte ClusterRole oder Role, die im Stamm-Repository deklariert ist. Diese Rolle ermöglicht differenzierte Berechtigungen.
Übernehmen Sie die Änderungen für das lokale Repository:
git add . git commit -m 'Setting up new namespace repository.' git push
Aufgaben des Anwendungsoperators
Der Anwendungsoperator führt die folgenden Aufgaben aus:
Deklarieren Sie eine
RoleBinding
-Konfiguration, die dem automatisch bereitgestellten Dienstkontons-reconciler-NAMESPACE
die Berechtigung zur Verwaltung von Objekten im Namespace gewährt. Config Sync erstellt automatisch das Dienstkontons-reconciler-NAMESPACE
, wenn die KonfigurationRepoSync
mit dem Cluster synchronisiert wird.Erstellen Sie das folgende Manifest, um das RoleBinding zu deklarieren:
# sync-rolebinding.yaml kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: syncs-repo namespace: NAMESPACE subjects: - kind: ServiceAccount name: ns-reconciler-NAMESPACE namespace: config-management-system roleRef: kind: ClusterRole name: RECONCILER_ROLE apiGroup: rbac.authorization.k8s.io
Dabei gilt:
NAMESPACE
: Fügen Sie den Namespace hinzu, den Sie im Stammverzeichnis erstellt haben.RECONCILER_ROLE
: Als Anwendungsoperator können Sie mitRECONCILER_ROLE
festlegen, welche Konfigurationsarten aus dem Namespace-Repository synchronisiert werden können. Sie können die Berechtigungen, die Ihnen der zentrale Administrator gewährt hat, weiterhin einschränken. Daher kann diese Rolle nicht umfangreicher sein als dieOPERATOR_ROLE
, die der zentrale Administrator im vorherigen Abschnitt deklariert hat.
Wenden Sie die RoleBinding-Konfiguration an:
kubectl apply -f sync-rolebinding.yaml
Erstellen Sie ein Secret, falls erforderlich, mit Ihrer bevorzugten Authentifizierungsmethode. Wenn Sie
none
als Authentifizierungstyp verwendet haben, können Sie diesen Schritt überspringen.Das Secret muss die folgenden Kriterien erfüllen:
- Erstellen Sie das Secret im selben Namespace wie RepoSync.
- Der Name des Secrets muss mit dem Namen
spec.git.secretRef
übereinstimmen, den Sie inroot-sync.yaml
definiert haben. - Sie müssen den öffentlichen Schlüssel des Secrets dem Git-Anbieter hinzufügen.
Deklarieren Sie eine
RepoSync
-Konfiguration:# repo-sync.yaml # If you are using a Config Sync version earlier than 1.8.0, # use: apiVersion: configsync.gke.io/v1alpha1 apiVersion: configsync.gke.io/v1beta1 kind: RepoSync metadata: name: repo-sync namespace: NAMESPACE spec: # Since this is for a namespace repository, the format should be unstructured sourceFormat: unstructured git: repo: NAMESPACE_REPOSITORY revision: NAMESPACE_REVISION branch: NAMESPACE_BRANCH dir: "NAMESPACE_DIRECTORY" auth: NAMESPACE_AUTH_TYPE gcpServiceAccountEmail: NAMESPACE_EMAIL secretRef: name: NAMESPACE_SECRET_NAME # The `noSSLVerify` field is supported in Anthos Config Management version 1.8.2 and later. noSSLVerify: REPO_SSL_VERIFY
Dabei gilt:
NAMESPACE_REPOSITORY
: Fügen Sie die URL des Git-Repositorys hinzu, das als Namespace-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. Wenn Sie kein Protokoll eingeben, wird die URL als HTTPS-URL behandelt. Dies ist ein Pflichtfeld.NAMESPACE_REVISION
: Fügen Sie die Git-Revision (Tag oder Hash) hinzu, um auszuchecken. Dieses Feld ist optional und der Standardwert istHEAD
.NAMESPACE_BRANCH
: Der Zweig des Repositorys, von dem aus synchronisiert werden soll. Dieses Feld ist optional und der Standardwert istmaster
.NAMESPACE_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.NAMESPACE_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
: Verwenden Sie ein Google-Dienstkonto, um auf ein Repository in Cloud Source Repositories zuzugreifen.gcenode
: Verwenden Sie ein Google-Dienstkonto, um auf ein Repository in Cloud Source Repositories zuzugreifen. Wählen Sie diese Option nur aus, wenn Workload Identity 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.
NAMESPACE_EMAIL
: Wenn Siegcpserviceaccount
fürAUTH_TYPE
angegeben haben, fügen Sie die E-Mail-Adresse Ihres Google-Dienstkontos hinzu. Beispiel:acm@PROJECT_ID.iam.gserviceaccount.com
.NAMESPACE_SECRET_NAME
: Fügen Sie den Namen hinzu, den Sie dem Secret geben möchten. Dieses Feld ist optional.NAMESPACE_NO_SSL_VERIFY
: Setzen Sie dieses Feld auftrue
, um die SSL-Zertifikatsüberprüfung zu deaktivieren. Der Standardwert istfalse
.
Eine Erläuterung der Felder und eine vollständige Liste der Felder, die Sie dem Feld
spec
hinzufügen können, finden Sie unter RepoSync-Felder.Es kann höchstens ein RepoSync-Objekt pro Namespace vorhanden sein. Damit dies erzwungen werden kann, muss der
name
des Objektsrepo-sync
lauten. Alle Konfigurationen in dem Verzeichnis, auf dasRepoSync
verweist, müssen sich ebenfalls im selben Namespace wie dasRepoSync
-Objekt befinden.Wenden Sie die Konfiguration
RepoSync
an:kubectl apply -f repo-sync.yaml
Verwenden Sie
kubectl get
für eines der Objekte im Namespace-Repository, um die Konfiguration zu prüfen. Beispiel:kubectl get rolebindings -n NAMESPACE
Synchronisierungsstatus des Namespace-Repositorys prüfen
Mit dem Befehl nomos status
können Sie den Synchronisierungsstatus des Namespace-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
--------------------
bookstore git@github.com:foo-corp/acme/bookstore@v1
SYNCED 34d1a8c8
In dieser Beispielausgabe ist das Namespace-Repository für den Namespace bookstore
konfiguriert.
RepoSync-Installation prüfen
Wenn Sie ein RepoSync-Objekt erstellen, erstellt Config Sync einen Abgleich mit dem Namen ns-reconciler-NAMESPACE
, wobei NAMESPACE
der Namespace ist, in dem Sie das RepoSync-Objekt erstellt haben.
Sie können überprüfen, ob das RepoSync-Objekt ordnungsgemäß funktioniert, indem Sie den Status des Deployments ns-reconciler-NAMESPACE
überprüfen:
kubectl get -n config-management-system deployment/ns-reconciler-NAMESPACE
Ersetzen Sie NAMESPACE
durch den Namespace, in dem Sie Ihr Namespace-Repository erstellt haben.
Weitere Möglichkeiten, den Status Ihres RepoSync-Objekts zu untersuchen, finden Sie im Abschnitt RootSync- und RepoSync-Objekte untersuchen.
Namespace-Repository entfernen
Wählen Sie den Tab Stamm-Repository-Methode oder Kubernetes API-Methode aus, um die relevanten Anleitungen aufzurufen.
Stamm-Repository-Methode
Wenn Sie die Methode Namespace-Repositories im Root-Repository steuern verwendet haben, kann ein zentraler Administrator die folgenden zwei Schritte ausführen, um ein Namespace-Repository zu entfernen:
Heben Sie die Verwaltung der vom RepoSync-Objekt verwalteten Ressourcen auf oder löschen Sie diese, indem Sie der Anleitung zur Fehlerbehebung folgen.
Entfernen Sie das RepoSync-Objekt aus dem Git-Repository.
Kubernetes API-Methode
Wenn Sie die Namespace-Repositories mit der Kubernetes API steuern-Methode verwendet, können Anwendungsoperatoren die folgenden zwei Schritte ausführen, um ein Namespace-Repository zu entfernen:
Heben Sie die Verwaltung der vom RepoSync-Objekt verwalteten Ressourcen auf oder löschen Sie diese, indem Sie der Anleitung zur Fehlerbehebung folgen.
Löschen Sie das Objekt
RepoSync
mit folgendem Befehl:kubectl delete -f repo-sync.yaml
Nächste Schritte
- Erfahren Sie, wie Sie Konfigurations-Drift in Namespace-Repositories verhindern können.
- Monitoring von RootSync- und RepoSync-Objekten.