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

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:

  1. 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.

  2. 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 ist HEAD.
    • NAMESPACE_BRANCH: Der Zweig des Repositorys, von dem aus synchronisiert werden soll. Dieses Feld ist optional und der Standardwert ist master.
    • 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 verwenden
      • ssh: Ein SSH-Schlüsselpaar verwenden
      • cookiefile: Nutzen Sie einen cookiefile.
      • token: Ein Token verwenden
      • gcpserviceaccount: 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 Sie gcpserviceaccount für AUTH_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 auf true, um die SSL-Zertifikatsüberprüfung zu deaktivieren. Der Standardwert ist false.

    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 Wert repo-sync haben. Alle Konfigurationen in dem Verzeichnis, auf das RepoSync verweist, müssen sich ebenfalls im selben Namespace wie das RepoSync-Objekt befinden.

  3. Deklarieren Sie im Stamm-Repository eine RoleBinding-Konfiguration, die dem Dienstkonto ns-reconciler-NAMESPACE die Berechtigung zur Verwaltung von Objekten im Namespace gewährt. Config Sync erstellt automatisch das Dienstkonto ns-reconciler-NAMESPACE, wenn die Konfiguration RepoSync 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 Sie RECONCILER_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 oder Role, der im Root-Repository deklariert ist. Diese Rolle ermöglicht differenzierte Berechtigungen.

  4. Übernehmen Sie die Änderungen für das lokale Repository:

     git add .
     git commit -m 'Setting up new namespace repository.'
     git push
    
  5. 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 in repo-sync.yaml definiert haben.
    • Sie müssen den öffentlichen Schlüssel des Secrets dem Git-Anbieter hinzufügen.
  6. 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:

  1. 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.

  2. 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 Sie OPERATOR_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.

  3. Ü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:

  1. Deklarieren Sie eine RoleBinding-Konfiguration, die dem automatisch bereitgestellten Dienstkonto ns-reconciler-NAMESPACE die Berechtigung zur Verwaltung von Objekten im Namespace gewährt. Config Sync erstellt automatisch das Dienstkonto ns-reconciler-NAMESPACE, wenn die Konfiguration RepoSync 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 mit RECONCILER_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 die OPERATOR_ROLE, die der zentrale Administrator im vorherigen Abschnitt deklariert hat.
  2. Wenden Sie die RoleBinding-Konfiguration an:

    kubectl apply -f sync-rolebinding.yaml
    
  3. 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 in root-sync.yaml definiert haben.
    • Sie müssen den öffentlichen Schlüssel des Secrets dem Git-Anbieter hinzufügen.
  4. 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 ist HEAD.
    • NAMESPACE_BRANCH: Der Zweig des Repositorys, von dem aus synchronisiert werden soll. Dieses Feld ist optional und der Standardwert ist master.
    • 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 verwenden
      • ssh: Ein SSH-Schlüsselpaar verwenden
      • cookiefile: Nutzen Sie einen cookiefile.
      • token: Ein Token verwenden
      • gcpserviceaccount: 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 Sie gcpserviceaccount für AUTH_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 auf true, um die SSL-Zertifikatsüberprüfung zu deaktivieren. Der Standardwert ist false.

    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 Objekts repo-sync lauten. Alle Konfigurationen in dem Verzeichnis, auf das RepoSync verweist, müssen sich ebenfalls im selben Namespace wie das RepoSync-Objekt befinden.

  5. Wenden Sie die Konfiguration RepoSync an:

    kubectl apply -f repo-sync.yaml
    
  6. 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:

  1. Heben Sie die Verwaltung der vom RepoSync-Objekt verwalteten Ressourcen auf oder löschen Sie diese, indem Sie der Anleitung zur Fehlerbehebung folgen.

  2. 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:

  1. Heben Sie die Verwaltung der vom RepoSync-Objekt verwalteten Ressourcen auf oder löschen Sie diese, indem Sie der Anleitung zur Fehlerbehebung folgen.

  2. Löschen Sie das Objekt RepoSync mit folgendem Befehl:

    kubectl delete -f repo-sync.yaml
    

Nächste Schritte