OCI-Artefakte aus Artifact Registry synchronisieren

Auf dieser Seite erfahren Sie, wie Sie ein OCI-Artefakt aus Artifact Registry synchronisieren.

Sie können Config Sync für die Synchronisierung aus OCI-Images mithilfe von Artifact Registry konfigurieren. Um diese Funktion verwenden zu können, müssen Sie die RootSync- und RepoSync APIs aktivieren.

Da Artifact Registry ein vollständig verwalteter Dienst ist, der sowohl Container-Images als auch Nicht-Container-Artefakte unterstützt, empfehlen wir die Verwendung für die Speicherung und Verwaltung von Container-Images in Google Cloud. Es gibt mehrere Tools, um Artefakte per Push in Artifact Registry zu übertragen. Sie können beispielsweise ein Docker-Image oder ein Helm-Diagramm per Push hochladen oder die Go-ContainerRegistry-Bibliothek für die Arbeit mit Container-Registries verwenden. Entscheiden Sie sich für das Tool, das für Sie am besten funktioniert. Auf dieser Seite wird gezeigt, wie Sie Ihr Image mit crane und oras erstellen und in einem Repository in Artifact Registry veröffentlichen.

Artifact Registry-Repository erstellen

In diesem Abschnitt erstellen Sie ein Artifact Registry-Repository. Weitere Informationen zum Erstellen von Artifact Registry-Repositories finden Sie unter Repositories erstellen.

  1. Aktivieren Sie die Artifact Registry API:

    gcloud services enable artifactregistry.googleapis.com --project=PROJECT_ID
    
  2. Erstellen Sie ein Artifact Registry-Repository:

    gcloud artifacts repositories create AR_REPO_NAME \
       --repository-format=docker \
       --location=AR_REGION \
       --description="Config Sync Helm repo" \
       --project=PROJECT_ID
    

Ersetzen Sie Folgendes:

  • PROJECT_ID: die Projekt-ID der Organisation.
  • AR_REPO_NAME: ID des Repositorys.
  • AR_REGION: der regionale oder multiregionale Speicherort für das Repository.

In den folgenden Abschnitten verwendete Variablen:

  • FLEET_HOST_PROJECT_ID: Wenn Sie GKE Workload Identity verwenden, entspricht dies PROJECT_ID. Wenn Sie Flotten-Workload Identity verwenden, ist dies die Projekt-ID der Flotte, für die Ihr Cluster registriert ist.
  • GSA_NAME: Name des benutzerdefinierten Google-Dienstkontos, mit dem Sie eine Verbindung zu Artifact Registry herstellen möchten.
  • KSA_NAME: das Kubernetes-Dienstkonto für den Abgleich.
    • Fügen Sie für Stamm-Repositories root-reconciler hinzu, wenn der Name RootSync root-sync ist. Fügen Sie andernfalls root-reconciler-ROOT_SYNC_NAME hinzu.
    • Für Namespace-Repositories gilt: Wenn der RepoSync-Name repo-sync lautet, fügen Sie ns-reconciler-NAMESPACE hinzu. Fügen Sie andernfalls ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH hinzu, wobei REPO_SYNC_NAME_LENGTH die Anzahl der Zeichen in REPO_SYNC_NAME ist.

Leseberechtigung erteilen

Wenn die Config Sync-Version 1.17.2 oder höher in Ihrem Cluster ist, können Sie sich mit dem Kubernetes-Dienstkonto bei Artifact Registry authentifizieren. Andernfalls verwenden Sie das Google-Dienstkonto zur Authentifizierung.

Kubernetes-Dienstkonto verwenden

Weisen Sie dem Kubernetes-Dienstkonto mit dem Workload Identity-Pool die IAM-Rolle Artifact Registry-Leser (roles/artifactregistry.reader) zu:

gcloud artifacts repositories add-iam-policy-binding AR_REPO_NAME \
   --location=AR_REGION \
   --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
   --role=roles/artifactregistry.reader \
   --project=PROJECT_ID

Google-Dienstkonto verwenden

  1. Weisen Sie dem Google-Dienstkonto die IAM-Rolle Artifact Registry-Leser (roles/artifactregistry.reader) zu:

    gcloud artifacts repositories add-iam-policy-binding AR_REPO_NAME \
       --location=AR_REGION \
       --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
       --role=roles/artifactregistry.reader \
       --project=PROJECT_ID
    
  2. Erstellen Sie eine IAM-Richtlinienbindung zwischen dem Kubernetes-Dienstkonto und dem Google-Dienstkonto:

    gcloud iam service-accounts add-iam-policy-binding \
       --role roles/iam.workloadIdentityUser \
       --member "serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
       GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
       --project=PROJECT_ID
    

Image in das Artifact Registry-Repository hochladen

In diesem Abschnitt erstellen Sie ein OCI-Image und übertragen es per Push in Artifact Registry.

  1. Erstellen Sie eine Namespace-Manifestdatei:

    cat <<EOF> test-namespace.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      name: test
    EOF
    
  2. Melden Sie sich bei Artifact Registry an:

    gcloud auth configure-docker AR_REGION-docker.pkg.dev
    
  3. Verpacken Sie das Image und übertragen Sie es per Push in die Artifact Registry:

    crane

    Die Befehle in diesem Abschnitt verwenden crane, um mit Remote-Images und Registries zu interagieren.

    1. Verpacken Sie die Datei:

      tar -cf test-namespace.tar test-namespace.yaml
      
    2. Sie haben das crane-Tool installiert.

    3. Übertragen Sie das Image per Push an Artifact Registry.

      crane append -f test-namespace.tar -t AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1
      

    oras

    Die Befehle in diesem Abschnitt verwenden oras, um mit Remote-Images und Registries zu interagieren.

    1. Verpacken Sie die Datei:

      tar -czf test-namespace.tar.gz test-namespace.yaml
      
    2. Sie haben das oras-Tool installiert.

    3. Übertragen Sie das Image per Push an Artifact Registry.

      oras push AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 test-namespace.tar.gz
      

Config Sync für die Synchronisierung aus Ihrem Image konfigurieren

In diesem Abschnitt erstellen Sie ein RootSync-Objekt und konfigurieren Config Sync für die Synchronisierung aus dem OCI-Image.

  1. Erstellen Sie ein RootSync-Objekt mit einem eindeutigen Namen:

    cat <<EOF>> ROOT_SYNC_NAME.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceFormat: unstructured
      sourceType: oci
      oci:
        image: AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1
        dir: .
        # The k8sserviceaccount auth type is available in version 1.17.2 and
        # later. Use `gcpserviceaccount` if using an older version.
        # auth: gcpserviceaccount
        # gcpServiceAccountEmail: GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
        auth: k8sserviceaccount
    EOF
    

    Ersetzen Sie ROOT_SYNC_NAME durch den Namen Ihres RootSync-Objekts. Der Name darf im Cluster nur einmal vorkommen und darf nicht mehr als 26 Zeichen haben. Eine vollständige Liste der Optionen beim Konfigurieren von RootSync-Objekten finden Sie unter Felder RootSync und RepoSync.

  2. Wenden Sie das RootSync-Objekt an:

    kubectl apply -f ROOT_SYNC_NAME.yaml
    
  3. Prüfen Sie, ob Config Sync mit dem Image synchronisiert wird:

    nomos status --contexts=$(kubectl config current-context)
    

    Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:

    Connecting to clusters...
    
    *publish-config-registry
       --------------------
       <root>:root-sync-test   AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1   
       SYNCED                  05e6a6b77de7a62286387cfea833d45290105fe84383224938d7b3ab151a55a1                        
       Managed resources:
          NAMESPACE   NAME             STATUS    SOURCEHASH
                      namespace/test   Current   05e6a6b
    

    Sie haben jetzt ein Image erfolgreich mit Ihrem Cluster synchronisiert.

Nächste Schritte