Cette page explique comment synchroniser un artefact OCI à partir d'Artifact Registry.
Vous pouvez configurer Config Sync pour la synchronisation à partir d'images OCI à l'aide d'Artifact Registry. Pour utiliser cette fonctionnalité, vous devez activer les API RootSync et RepoSync.
Comme Artifact Registry est un service entièrement géré compatible avec les images de conteneurs et les artefacts non issus de conteneurs, nous vous recommandons de l'utiliser pour le stockage et la gestion des images de conteneurs sur Google Cloud. Plusieurs outils permettent de transférer des artefacts vers Artifact Registry. Par exemple, vous pouvez transférer une image Docker,transférer un chart Helm ou utiliser la bibliothèque go-containerregistry pour travailler avec des registres de conteneurs. Choisissez l'outil qui vous convient le mieux.
Cette page explique comment créer et publier votre image dans un dépôt dans Artifact Registry avec crane
et oras
.
Créer un dépôt Artifact Registry
Dans cette section, vous allez créer un dépôt Artifact Registry. Pour en savoir plus sur la création de dépôts Artifact Registry, consultez la section Créer des dépôts.
Activez l'API Artifact Registry :
gcloud services enable artifactregistry.googleapis.com --project=PROJECT_ID
Créer un dépôt Artifact Registry :
gcloud artifacts repositories create AR_REPO_NAME \ --repository-format=docker \ --location=AR_REGION \ --description="Config Sync Helm repo" \ --project=PROJECT_ID
Remplacez les éléments suivants :
PROJECT_ID
: ID de projet de l'organisation.AR_REPO_NAME
: ID du dépôt.AR_REGION
: emplacement régional ou multirégional du dépôt.
Variables utilisées dans les sections suivantes :
FLEET_HOST_PROJECT_ID
: si vous utilisez Workload Identity de GKE, ce champ d'application est identique àPROJECT_ID
. Si vous utilisez Workload Identity pour parc, il s'agit de l'ID du projet dans lequel votre cluster est enregistré.GSA_NAME
: nom du compte de service Google personnalisé que vous souhaitez utiliser pour vous connecter à Artifact Registry.KSA_NAME
: compte de service Kubernetes pour le rapprochement.- Pour les dépôts racine, si le nom
RootSync
estroot-sync
, ajoutezroot-reconciler
. Sinon, ajoutezroot-reconciler-ROOT_SYNC_NAME
. - Pour les dépôts d'espaces de noms, si le nom
RepoSync
estrepo-sync
, ajoutezns-reconciler-NAMESPACE
. Sinon, ajoutezns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH
, oùREPO_SYNC_NAME_LENGTH
est le nombre de caractères dansREPO_SYNC_NAME
.
- Pour les dépôts racine, si le nom
Accorder l'autorisation de lecture
Si la version de Config Sync est 1.17.2 ou ultérieure sur votre cluster, vous pouvez utiliser le compte de service Kubernetes pour vous authentifier auprès d'Artifact Registry. Sinon, utilisez le compte de service Google pour l'authentification.
Utiliser le compte de service Kubernetes
Attribuez le rôle IAM de lecteur Artifact Registry (roles/artifactregistry.reader
) au compte de service Kubernetes avec le pool d'identités de charge de travail :
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
Utiliser le compte de service Google
Attribuez le rôle IAM de lecteur Artifact Registry (
roles/artifactregistry.reader
) au compte de service 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
Créez une liaison de stratégie IAM entre le compte de service Kubernetes et le compte de service 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
Transférer une image vers le dépôt Artifact Registry
Dans cette section, vous allez créer une image OCI et la transférer dans Artifact Registry.
Créez un fichier manifeste
Namespace
:cat <<EOF> test-namespace.yaml apiVersion: v1 kind: Namespace metadata: name: test EOF
Connectez-vous à Artifact Registry :
gcloud auth configure-docker AR_REGION-docker.pkg.dev
Empaquetez et transférez l'image vers Artifact Registry :
crane
Les commandes de cette section utilisent
crane
pour interagir avec les images et registres distants.Empaquetez le fichier :
tar -cf test-namespace.tar test-namespace.yaml
Installez l'outil
crane
.Transférez l'image vers Artifact Registry :
crane append -f test-namespace.tar -t AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1
oras
Les commandes de cette section utilisent
oras
pour interagir avec les images et registres distants.Empaquetez le fichier :
tar -czf test-namespace.tar.gz test-namespace.yaml
Installez l'outil
oras
.Transférez l'image vers Artifact Registry :
oras push AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 test-namespace.tar.gz
Configurer Config Sync pour la synchronisation à partir de votre image
Dans cette section, vous allez créer un objet RootSync
et configurer Config Sync pour la synchronisation à partir de l'image OCI.
Créez un objet
RootSync
avec un nom unique :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
Remplacez
ROOT_SYNC_NAME
par le nom de votre objetRootSync
. Le nom doit être unique dans le cluster et ne pas dépasser 26 caractères. Pour obtenir la liste complète des options lors de la configuration d'objetsRootSync
, consultez la section ChampsRootSync
etRepoSync
.Appliquez l'objet
RootSync
:kubectl apply -f ROOT_SYNC_NAME.yaml
Vérifiez que Config Sync est synchronisé à partir de l'image :
nomos status --contexts=$(kubectl config current-context)
Un résultat semblable aux lignes suivantes doit s'afficher :
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
Vous venez de synchroniser une image avec votre cluster.
Étapes suivantes
- Découvrez comment installer Config Sync.