Sincronizza gli artefatti OCI da Artifact Registry

Questa pagina mostra come sincronizzare un artefatto OCI da Artifact Registry.

Puoi configurare Config Sync per eseguire la sincronizzazione dalle immagini OCI utilizzando Artifact Registry. Per utilizzare questa funzionalità, devi abilitare le API RootSync e RepoSync.

Poiché Artifact Registry è un servizio completamente gestito che supporta immagini container e artefatti non containerizzati, ti consigliamo di utilizzare per l'archiviazione e la gestione delle immagini container su Google Cloud. Esistono più strumenti disponibili per eseguire il push degli artefatti in Artifact Registry. Ad esempio: puoi eseguire il push di un'immagine Docker, esegui il push di un grafico Helm oppure usa il libreria go-containerregistry per lavorare con i registri di container. Scegli lo strumento più adatto a te. Questa pagina mostra come creare e pubblicare un'immagine su un repository in Artifact Registry con crane e oras.

Crea un repository Artifact Registry

In questa sezione viene creato un repository Artifact Registry. Per scoprire di più sulla creazione di repository Artifact Registry, consulta Creare repository.

  1. Abilita l'API Artifact Registry:

    gcloud services enable artifactregistry.googleapis.com --project=PROJECT_ID
    
  2. Crea un repository Artifact Registry:

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

Sostituisci quanto segue:

  • PROJECT_ID: ID progetto dell'organizzazione.
  • AR_REPO_NAME: l'ID del repository.
  • AR_REGION: la posizione regionale o su più regioni del repository.

Variabili utilizzate nelle seguenti sezioni:

  • FLEET_HOST_PROJECT_ID: se utilizzi Workload Identity Federation for GKE, è lo stesso valore di PROJECT_ID. Se utilizzi un parco risorse Federazione delle identità per i carichi di lavoro per GKE, si tratta dell'ID progetto del parco risorse in cui è registrato un cluster.
  • GSA_NAME: il nome dell'account di servizio Google personalizzato che vuoi utilizzare per connetterti ad Artifact Registry.
  • KSA_NAME: l'account di servizio Kubernetes per riconciliatore.
    • Per i repository principali, se il nome RootSync è root-sync, aggiungi root-reconciler. Altrimenti, aggiungi root-reconciler-ROOT_SYNC_NAME.
    • Per i repository di spazi dei nomi, se il nome RepoSync è repo-sync, aggiungi ns-reconciler-NAMESPACE. Altrimenti, aggiungi ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH dove REPO_SYNC_NAME_LENGTH è il numero di caratteri in REPO_SYNC_NAME.

Concedi l'autorizzazione di lettore

Se la versione di Config Sync del tuo cluster è 1.17.2 o successiva, puoi utilizzare l'account di servizio Kubernetes per l'autenticazione in Artifact Registry. Altrimenti, utilizzare l'account di servizio Google per l'autenticazione.

Utilizzo dell'account di servizio Kubernetes

Concedi il ruolo IAM Lettore del registry di elementi (roles/artifactregistry.reader) all'account di servizio Kubernetes con il pool della federazione delle identità per i carichi di lavoro per GKE:

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

Utilizzo dell'account di servizio Google

  1. Concedi il ruolo IAM Artifact Registry Reader (roles/artifactregistry.reader) all'account di servizio Google:

    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. Crea un'associazione dei criteri IAM tra l'account di servizio Kubernetes e l'account di servizio Google:

    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
    

Eseguire il push di un'immagine nel repository Artifact Registry

In questa sezione creerai un'immagine OCI ed eseguirai il push ad Artifact Registry.

  1. Crea un file manifest Namespace:

    cat <<EOF> test-namespace.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      name: test
    EOF
    
  2. Accedi ad Artifact Registry:

    gcloud auth configure-docker AR_REGION-docker.pkg.dev
    
  3. Impacchetta e esegui il push dell'immagine in Artifact Registry:

    crane

    I comandi in questa sezione utilizzano crane per interagire con immagini e registri remoti.

    1. Impacchetta il file:

      tar -cf test-namespace.tar test-namespace.yaml
      
    2. Installa il crane lo strumento a riga di comando gcloud.

    3. Esegui il push dell'immagine in Artifact Registry:

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

    oras

    I comandi in questa sezione usano oras per interagire con immagini remote e registri.

    1. Compila il file:

      tar -czf test-namespace.tar.gz test-namespace.yaml
      
    2. Installa lo strumento oras.

    3. Esegui il push dell'immagine ad Artifact Registry:

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

Configura Config Sync per la sincronizzazione dall'immagine

In questa sezione, creerai un oggetto RootSync e configurerai Config Sync da sincronizzare dall'immagine OCI.

  1. Crea un oggetto RootSync con un nome univoco:

    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
    

    Sostituisci ROOT_SYNC_NAME con il nome dell'oggetto RootSync. Il nome deve essere univoco nel cluster e non deve contenere più di 26 caratteri. Per l'elenco completo delle opzioni per la configurazione degli oggetti RootSync, consulta Campi RootSync e RepoSync.

  2. Applica l'oggetto RootSync:

    kubectl apply -f ROOT_SYNC_NAME.yaml
    
  3. Verifica che Config Sync venga sincronizzato dall'immagine:

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

    Dovresti vedere un output simile al seguente esempio:

    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
    

    Hai sincronizzato un'immagine nel cluster.

Passaggi successivi