En esta página, se muestra cómo sincronizar un artefacto de OCI desde Artifact Registry.
Puedes configurar el Sincronizador de configuración para que se sincronice desde imágenes de OCI con Artifact Registry. Para usar esta función, debes habilitar las API de RootSync y RepoSync.
Debido a que Artifact Registry es un servicio completamente administrado compatible con imágenes de contenedores y artefactos que no son de contenedores, te recomendamos que lo uses para la administración y el almacenamiento de imágenes de contenedores en Google Cloud. Hay varias herramientas disponibles para enviar artefactos a Artifact Registry. Por ejemplo, puedes hacer lo siguiente: enviar una imagen de Docker ,enviar un gráfico de Helm o usar la biblioteca go-containerregistry para trabajar con registros de contenedores. Elige la herramienta que te resulte más conveniente.
En esta página, se muestra cómo crear y publicar tu imagen en un repositorio en Artifact Registry con crane
y oras
.
Crea un repositorio de Artifact Registry
En esta sección, crearás un repositorio de Artifact Registry. Para obtener más información sobre cómo crear repositorios de Artifact Registry, consulta Crea repositorios.
Habilita la API de Artifact Registry:
gcloud services enable artifactregistry.googleapis.com --project=PROJECT_ID
Crea un repositorio de Artifact Registry:
gcloud artifacts repositories create AR_REPO_NAME \ --repository-format=docker \ --location=AR_REGION \ --description="Config Sync Helm repo" \ --project=PROJECT_ID
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyecto de la organización.AR_REPO_NAME
: Es el ID del repositorio.AR_REGION
: es la ubicación regional o multirregional del repositorio.
Variables que se usan en las siguientes secciones:
FLEET_HOST_PROJECT_ID
: Si usas Workload Identity Federation for GKE, esto es lo mismo quePROJECT_ID
. Si usas la flota Workload Identity Federation for GKE, este es el ID del proyecto de la flota en la que está registrado tu clúster.GSA_NAME
: Es el nombre de la cuenta de servicio personalizada de Google que deseas usar para conectarte a Artifact Registry.KSA_NAME
: Es la cuenta de servicio de Kubernetes para el conciliador.- Para los repositorios raíz, si el nombre
RootSync
esroot-sync
, agregaroot-reconciler
. De lo contrario, agregaroot-reconciler-ROOT_SYNC_NAME
. - Para los repositorios de espacios de nombres, si el nombre de
RepoSync
esrepo-sync
, agregans-reconciler-NAMESPACE
. De lo contrario, agregans-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH
, dondeREPO_SYNC_NAME_LENGTH
es la cantidad de caracteres enREPO_SYNC_NAME
.
- Para los repositorios raíz, si el nombre
Otorga permiso de lector
Si la versión del Sincronizador de configuración es 1.17.2 o posterior en tu clúster, puedes usar la cuenta de servicio de Kubernetes para autenticarte en Artifact Registry. De lo contrario, usa la cuenta de servicio de Google para la autenticación.
Usa la cuenta de servicio de Kubernetes
Otorga el rol de IAM de lector de Artifact Registry (roles/artifactregistry.reader
) a la cuenta de servicio de Kubernetes con el grupo de Workload Identity Federation for 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
Usa la cuenta de servicio de Google
Otorga el rol de IAM de lector de Artifact Registry (
roles/artifactregistry.reader
) a la cuenta de servicio de 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
Crea una vinculación de políticas de IAM entre la cuenta de servicio de Kubernetes y la cuenta de servicio de 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
Envía una imagen al repositorio de Artifact Registry
En esta sección, crearás una imagen de OCI y la enviarás a Artifact Registry.
Crea un archivo de manifiesto
Namespace
:cat <<EOF> test-namespace.yaml apiVersion: v1 kind: Namespace metadata: name: test EOF
Accede a Artifact Registry:
gcloud auth configure-docker AR_REGION-docker.pkg.dev
Compila y envía la imagen a Artifact Registry:
crane
Los comandos de esta sección usan
crane
para interactuar con imágenes y registros remotos.Empaqueta el archivo:
tar -cf test-namespace.tar test-namespace.yaml
Instala la herramienta
crane
.Envía la imagen a Artifact Registry:
crane append -f test-namespace.tar -t AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1
oras
Los comandos de esta sección usan
oras
para interactuar con imágenes y registros remotos.Empaqueta el archivo:
tar -czf test-namespace.tar.gz test-namespace.yaml
Instala la herramienta
oras
.Envía la imagen a Artifact Registry:
oras push AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 test-namespace.tar.gz
Configura el Sincronizador de configuración para que se sincronice desde tu imagen
En esta sección, crearás un objeto RootSync
y configurarás el Sincronizador de configuración para sincronizar desde la imagen de OCI.
Crea un objeto
RootSync
con un nombre único: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
Reemplaza
ROOT_SYNC_NAME
por el nombre del objetoRootSync
. El nombre debe ser único en el clúster y no debe tener más de 26 caracteres. Para obtener la lista completa de opciones cuando configures objetosRootSync
, consulta CamposRootSync
yRepoSync
.Aplica el objeto
RootSync
:kubectl apply -f ROOT_SYNC_NAME.yaml
Verifica que el Sincronizador de configuración se sincronice desde la imagen:
nomos status --contexts=$(kubectl config current-context)
Deberías ver un resultado similar al siguiente:
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
Ya sincronizaste correctamente una imagen con tu clúster.
¿Qué sigue?
- Obtén más información sobre cómo instalar el Sincronizador de configuración.