Configura la sincronización desde repositorios de espacios de nombres
Cuando instalas el Sincronizador de configuración, debes configurar tu repositorio raíz. Después de configurar el repositorio raíz, tienes la opción de configurar los repositorios de espacio de nombres. Los repositorios de espacio de nombres te permiten realizar acciones como delegar la configuración y el control de los repositorios a los usuarios no administrativos. Para obtener más información sobre estos tipos de repositorios, consulta la sección Repositorios en la descripción general de Sincronizador de configuración.
Los repositorios de espacio de nombres requieren la API de RepoSync
. Si instalaste el Sincronizador de configuración con Google Cloud Console o la CLI de Google Cloud y una versión de 1.7.0 o posterior, esta API ya está habilitada. Si instalaste el Sincronizador de configuración con kubectl
y usas un objeto ConfigManagement
a fin de configurar tu repositorio de Git, te recomendamos que migres tu objeto ConfigManagement para habilitar la API de RepoSync
.
Si bien el Sincronizador de configuración detecta de forma automática los cambios de la fuente de información, puedes agregar una capa adicional de detección de desvío si agregas un webhook de admisión a los repositorios de espacio de nombres. Si deseas obtener detalles para hacerlo, consulta Evita el desvío de la configuración.
Antes de comenzar
- Crea o asegúrate de tener acceso a un repositorio de Git no estructurado que pueda contener las opciones de configuración con las que se sincroniza el Sincronizador de configuración. Los repositorios de espacios de nombres deben usar el formato de repositorio no estructurado.
- Crea o asegúrate de tener acceso a un clúster que se encuentre en una plataforma y versión compatibles de Anthos.
- Crea o asegúrate de tener acceso a un clúster de GKE que cumpla con los requisitos del Sincronizador de configuración.
Limitaciones
NamespaceSelectors
y (incluidas las anotaciones que apuntan a los selectores) solo funcionan en el repositorio raíz.
Elige tu método de configuración preferido
Elige entre uno de los dos métodos para configurar los repositorios de espacio de nombres:
Controla los repositorios de espacio de nombres en el repositorio raíz. Este método centraliza toda la configuración de los repositorios de espacios de nombres en el repositorio raíz, lo que le proporciona a un administrador central el control completo de la configuración.
Controla los repositorios de espacios de nombres con la API de Kubernetes. Usa este método si deseas delegar el control del repositorio del espacio de nombres a los propietarios del espacio de nombres.
Controla los repositorios de espacio de nombres en el repositorio raíz.
En este método, el administrador central administra la configuración de los repositorios de espacios de nombres directamente desde el repositorio raíz. Debido a que el Sincronizador de configuración administra los recursos del repositorio de espacios de nombres, este método evita cualquier cambio local en las definiciones del repositorio de espacios de nombres.
Para usar este método, completa las siguientes tareas:
En el repositorio raíz, declara una configuración
namespace
:# ROOT_REPO/namespaces/NAMESPACE/namespace.yaml apiVersion: v1 kind: Namespace metadata: name: NAMESPACE
Reemplaza
NAMESPACE
por un nombre para el espacio de nombres.En el repositorio raíz, crea un objeto
RepoSync
en el mismo espacio de nombres:# 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
Reemplaza lo siguiente:
NAMESPACE
: Agrega el nombre de tu espacio de nombres.NAMESPACE_REPOSITORY
: agrega la URL del repositorio de Git para usarlo como repositorio de espacio de nombres. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo,https://github.com/GoogleCloudPlatform/anthos-config-management-samples
usa el protocolo HTTPS. Si no ingresas un protocolo, la URL se trata como una URL HTTPS. Este campo es obligatorio.NAMESPACE_REVISION
: Agrega la revisión de Git (etiqueta o hash) que deseas consultar. Este campo es opcional y el valor predeterminado esHEAD
.NAMESPACE_BRANCH
: Agrega la rama del repositorio desde la que se realiza la sincronización. Este campo es opcional y el valor predeterminado esmaster
.NAMESPACE_DIRECTORY
: agrega la ruta de acceso en el repositorio de Git al directorio raíz que contiene la configuración con la que deseas sincronizar. Este campo es opcional y el predeterminado es el directorio raíz (/
) del repositorio.NAMESPACE_AUTH_TYPE
: Agrega uno de los siguientes tipos de autenticación:none
: No usa autenticaciónssh
: Usa un par de claves SSHcookiefile
: Usa un objetocookiefile
token
: Usa un tokengcpserviceaccount
: Usa una cuenta de servicio de Google para acceder a un repositorio en Cloud Source Repositories.gcenode
: Usa una cuenta de servicio de Google para acceder a un repositorio en Cloud Source Repositories. Selecciona esta opción solo si Workload Identity no está habilitado en tu clúster.Para obtener más información sobre estos tipos de autenticación, consulta Otorga al Sincronizador de configuración acceso de solo lectura a Git.
Este campo es obligatorio.
NAMESPACE_EMAIL
: Si agregastegcpserviceaccount
como tuAUTH_TYPE
, agrega la dirección de correo electrónico de la cuenta de servicio de Google. Por ejemplo,acm@PROJECT_ID.iam.gserviceaccount.com
NAMESPACE_SECRET_NAME
: Agrega el nombre que deseas darle a tu objeto Secret. Este campo es opcional.NAMESPACE_NO_SSL_VERIFY
: Para inhabilitar la verificación del certificado SSL, establece este campo entrue
. El valor predeterminado esfalse
.
Para obtener una explicación de los campos y una lista completa de los campos que puedes agregar al campo
spec
, consulta Campos de RepoSync.Puede haber, como máximo, un objeto RepoSync por espacio de nombres. Para aplicar esta restricción, el objeto
name
debe serrepo-sync
. Todas las configuraciones que se encuentran en el directorio al que hace referenciaRepoSync
deben estar en el mismo espacio de nombres que el recursoRepoSync
.En el repositorio raíz, declara una configuración
RoleBinding
que otorgue a la cuenta de servicions-reconciler-NAMESPACE
permiso para administrar recursos en el espacio de nombres. El Sincronizador de configuración crea de forma automática la cuenta de servicions-reconciler-NAMESPACE
cuando la configuraciónRepoSync
se sincroniza con el clúster.Para declarar
RoleBinding
, crea el siguiente manifiesto:# 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
Reemplaza lo siguiente:
NAMESPACE
: Agrega el nombre de tu espacio de nombres.RECONCILER_ROLE
: como administrador central, puedes configurarRECONCILER_ROLE
para que se apliquen los tipos de configuración que se pueden sincronizar desde el repositorio de espacios de nombres. Puedes elegir una de las siguientes funciones:Una ClusterRole predeterminada:
admin
edit
Para obtener más información, consulta Funciones orientadas al usuario.
Un
ClusterRole
oRole
definido por el usuario declarado en el repositorio raíz. Esta función admite permisos detallados.
Confirme los cambios en el repositorio raíz:
git add . git commit -m 'Setting up new namespace repository.' git push
Si es necesario, crea un Secret según tu método de autenticación preferido. Si usaste
none
como el tipo de autenticación, puedes omitir este paso.El Secret debe cumplir con los siguientes requisitos:
- Crea el Secret en el mismo espacio de nombres que RepoSync.
- El nombre del Secret debe coincidir con el nombre de
spec.git.secretRef
que definiste enrepo-sync.yaml
. - Debes agregar la clave pública del Secret al proveedor de Git.
Para verificar la configuración, usa
kubectl get
en uno de los objetos del repositorio de espacios de nombres. Por ejemplo:kubectl get rolebindings -n NAMESPACE
Controla los repositorios de espacios de nombres con la API de Kubernetes.
En este método, el administrador central solo declara el espacio de nombres en el repositorio raíz y delega la declaración del archivo RepoSync
al operador de la aplicación.
Tareas del administrador central
El administrador central completa las siguientes tareas:
En el repositorio raíz, declara una configuración
namespace
:# ROOT_REPO/namespaces/NAMESPACE/namespace.yaml apiVersion: v1 kind: Namespace metadata: name: NAMESPACE
Reemplaza
NAMESPACE
por un nombre para el espacio de nombres.En el repositorio raíz, declara una configuración
RoleBinding
para otorgar permisos a los operadores de la aplicación. Usa la Prevención de elevación del RBAC para asegurarte de que el operador de la aplicación no pueda aplicar una vinculación de función con permisos que no otorga esta vinculación de función.Para declarar RoleBinding, crea el siguiente manifiesto:
# 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
Reemplaza lo siguiente:
NAMESPACE
: Agrega el espacio de nombres que creaste al repositorio raíz.USERNAME
: Agrega el nombre de usuario del operador de la aplicación.OPERATOR_ROLE
: Como administrador central, puedes configurarOPERATOR_ROLE
para aplicar de forma forzosa los tipos de configuraciones que se pueden sincronizar desde el repositorio de espacios de nombres. Puedes elegir una de las siguientes funciones:Una ClusterRole predeterminada:
admin
edit
Para obtener más información, consulta Funciones orientadas al usuario.
Una ClusterRole o una Role definida por el usuario que se declara en el repositorio raíz. Esta función admite permisos detallados.
Confirme los cambios en el repositorio raíz:
git add . git commit -m 'Setting up new namespace repository.' git push
Tareas del operador de la aplicación
El operador de la aplicación completa las siguientes tareas:
Declara una configuración
RoleBinding
que otorga el permisons-reconciler-NAMESPACE
de la cuenta de servicio aprovisionado de forma automática para administrar los recursos en el espacio de nombres. El Sincronizador de configuración crea de forma automática la cuenta de servicions-reconciler-NAMESPACE
cuando la configuraciónRepoSync
se sincroniza con el clúster.Para declarar RoleBinding, crea el siguiente manifiesto:
# 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
Reemplaza lo siguiente:
NAMESPACE
: Agrega el espacio de nombres que creaste al repositorio raíz.RECONCILER_ROLE
: Como operador de la aplicación, puedes configurarRECONCILER_ROLE
para aplicar los tipos de configuración que se pueden sincronizar desde el repositorio de espacios de nombres. Solo puedes restringir aún más el conjunto de permisos que te otorgó el administrador central. Como resultado, esta función no puede ser más permisiva que laOPERATOR_ROLE
que el administrador central declaró en la sección anterior.
Aplica la configuración de RoleBinding:
kubectl apply -f sync-rolebinding.yaml
Si es necesario, crea un Secret según tu método de autenticación preferido. Si usaste
none
como el tipo de autenticación, puedes omitir este paso.El Secret debe cumplir con los siguientes requisitos:
- Crea el Secret en el mismo espacio de nombres que RepoSync.
- El nombre del Secret debe coincidir con el nombre de
spec.git.secretRef
que definiste enroot-sync.yaml
. - Debes agregar la clave pública del Secret al proveedor de Git.
Declara una configuración de
RepoSync
:# 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
Reemplaza lo siguiente:
NAMESPACE_REPOSITORY
: agrega la URL del repositorio de Git para usarlo como repositorio de espacio de nombres. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo,https://github.com/GoogleCloudPlatform/anthos-config-management-samples
usa el protocolo HTTPS. Si no ingresas un protocolo, la URL se trata como una URL HTTPS. Este campo es obligatorio.NAMESPACE_REVISION
: Agrega la revisión de Git (etiqueta o hash) que deseas consultar. Este campo es opcional y el valor predeterminado esHEAD
.NAMESPACE_BRANCH
: Agrega la rama del repositorio desde la que se realiza la sincronización. Este campo es opcional y el valor predeterminado esmaster
.NAMESPACE_DIRECTORY
: agrega la ruta de acceso en el repositorio de Git al directorio raíz que contiene la configuración con la que deseas sincronizar. Este campo es opcional y el predeterminado es el directorio raíz (/
) del repositorio.NAMESPACE_AUTH_TYPE
: Agrega uno de los siguientes tipos de autenticación:none
: No usa autenticaciónssh
: Usa un par de claves SSHcookiefile
: Usa un objetocookiefile
token
: Usa un tokengcpserviceaccount
: Usa una cuenta de servicio de Google para acceder a un repositorio en Cloud Source Repositories.gcenode
: Usa una cuenta de servicio de Google para acceder a un repositorio en Cloud Source Repositories. Selecciona esta opción solo si Workload Identity no está habilitado en tu clúster.Para obtener más información sobre estos tipos de autenticación, consulta Otorga a Git acceso de solo lectura al Sincronizador de configuración.
Este campo es obligatorio.
NAMESPACE_EMAIL
: Si agregastegcpserviceaccount
como tuAUTH_TYPE
, agrega la dirección de correo electrónico de la cuenta de servicio de Google. Por ejemplo,acm@PROJECT_ID.iam.gserviceaccount.com
NAMESPACE_SECRET_NAME
: Agrega el nombre que deseas darle a tu objeto Secret. Este campo es opcional.NAMESPACE_NO_SSL_VERIFY
: Para inhabilitar la verificación del certificado SSL, establece este campo entrue
. El valor predeterminado esfalse
.
Para obtener una explicación de los campos y una lista completa de los campos que puedes agregar al campo
spec
, consulta Campos de RepoSync.Puede haber, como máximo, un objeto RepoSync por espacio de nombres. Para hacer esto, el
name
del objeto debe serrepo-sync
. Todas las configuraciones que se encuentran en el directorio al que hace referenciaRepoSync
deben estar en el mismo espacio de nombres que el recursoRepoSync
.Aplica la configuración de
RepoSync
:kubectl apply -f repo-sync.yaml
Para verificar la configuración, usa
kubectl get
en uno de los objetos del repositorio de espacios de nombres. Por ejemplo:kubectl get rolebindings -n NAMESPACE
Verifica el estado de sincronización del repositorio de espacio de nombres
Puedes usar el comando nomos status
para inspeccionar el estado de sincronización del repositorio de espacio de nombres:
nomos status
Deberías ver un resultado similar al siguiente:
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
En este resultado de ejemplo, el repositorio del espacio de nombres se configura para un espacio de nombres llamado bookstore
.
Verifica la instalación de RepoSync
Cuando creas un objeto RepoSync, el Sincronizador de configuración crea un conciliador llamado ns-reconciler-NAMESPACE
, en el que NAMESPACE
es el espacio de nombres en el que creaste el objeto RepoSync.
Para verificar que el objeto RepoSync funcione correctamente, verifica el estado de la implementación de ns-reconciler-NAMESPACE
:
kubectl get -n config-management-system deployment/ns-reconciler-NAMESPACE
Reemplaza NAMESPACE
por el espacio de nombres en el que creaste el repositorio de espacio de nombres.
Para conocer más formas de explorar el estado del objeto RepoSync, consulta la sección Explora los objetos RootSync y RepoSync.
Quita un repositorio de espacio de nombres
Selecciona la pestaña Método del repositorio raíz o Método de la API de Kubernetes para ver las instrucciones relevantes.
Método del repositorio raíz
Si usaste el método Control de repositorios de espacios de nombres en el repositorio raíz, un administrador central puede seguir los dos pasos siguientes para quitar un repositorio de espacios de nombres:
Para administrar o borrar los recursos administrados por el objeto RepoSync, sigue las instrucciones para solucionar problemas.
Quita el objeto RepoSync del repositorio de Git.
Método de la API de Kubernetes
Si usaste el método Controla repositorios de espacios de nombres con la API de Kubernetes, los operadores de aplicaciones pueden seguir estos dos pasos para quitar un repositorio de espacio de nombres:
Para administrar o borrar los recursos administrados por el objeto RepoSync, sigue las instrucciones para solucionar problemas.
Borra el objeto
RepoSync
mediante la ejecución del siguiente comando:kubectl delete -f repo-sync.yaml
¿Qué sigue?
- Obtén más información para evitar el desvío de configuración en los repositorios de espacios de nombres.
- Descubre cómo supervisar tus objetos de RootSync y RepoSync.