El Sincronizador de configuración te permite administrar de forma declarativa objetos con permiso de clúster, como los recursos Namespace, ClusterRole y CustomResourceDefinition, en tus clústeres de Kubernetes desde una fuente de información central. Sincronizar los parámetros de configuración con alcance de clúster te ayuda a aplicar políticas coherentes en todo el clúster, controles de acceso basado en roles (RBAC) y APIs personalizadas en toda tu flota. También puedes segmentar clústeres específicos con selectores. Para administrar recursos dentro de espacios de nombres individuales, consulta Sincroniza objetos con varios espacios de nombres.
Configurar clústeres y objetos con permisos de clúster
En los repositorios no estructurados, puedes organizar los parámetros de configuración de los clústeres y los objetos con alcance de clúster de la manera que te resulte más conveniente. Todas las opciones de configuración organizadas de esta manera se aplican a todos los clústeres inscritos en el Sincronizador de configuración.
Configura CustomResourceDefinitions
El Sincronizador de configuración te permite sincronizar CustomResourceDefinitions (CRD) de la misma manera que sincronizarías cualquier otro recurso. Cuando sincronizas CRD, debes tener en cuenta la siguiente información:
Las actualizaciones de CRD y sus CustomResources correspondientes no ocurren en ningún orden predecible. Si modificas las CRD y los CustomResources correspondientes en la misma confirmación, no se espera que se lleven a cabo actualizaciones de CRD antes de las actualizaciones de los recursos personalizados. Esto puede provocar que el
nomos statusinforme sobre un error transitorio durante un período breve, hasta que el CustomResource y la CRD estén presentes en el clúster.El Sincronizador de configuración no permite la eliminación de una CRD si algún CustomResource en el repositorio depende de esta. Para quitar una CRD, también debes quitar su CustomResource. Te recomendamos quitar ambos en la misma confirmación para el repositorio.
Puedes sincronizar un CustomResource sin sincronizar su CRD, siempre y cuando puedas garantizar que la CRD ya exista en el clúster.
Limita los clústeres a los que afecta un archivo de configuración
De forma predeterminada, el Sincronizador de configuración aplica un parámetro de configuración a cada clúster inscrito. Sin embargo, si necesitas aplicar un archivo de configuración solo a un subconjunto de clústeres, puedes agregar una anotación cluster-name-selector o un archivo de configuración ClusterSelector a tu repositorio.
La anotación cluster-name-selector proporciona una forma sencilla de especificar un subconjunto
de clústeres a los que se aplicará una configuración. Esta opción solo admite la selección de clústeres
por nombre.
El objeto ClusterSelector admite la selección de clústeres por etiquetas, pero
requiere configuraciones más complejas.
Ambas opciones requieren que se especifique clusterName en el Sincronizador de configuración en
el clúster. Según cómo hayas instalado el Sincronizador de configuración, puedes proporcionar el
nombre del clúster de las siguientes maneras:
Si instalaste el Sincronizador de configuración con Google Cloud CLI o la consola de Cloud de Confiance ,
clusterNamese establece de forma automática en el nombre de la membresía de la flota.Si instalaste el Sincronizador de configuración de forma manual con
kubectl, debes configurar la variable de entornoCLUSTER_NAMEen la implementación dereconciler-manager. Para obtener más información, consulta Proporciona un nombre de clúster para los selectores de clústeres.
Configura con la anotación cluster-name-selector
Puedes aplicar una configuración a un subconjunto de clústeres con la
anotación configsync.gke.io/cluster-name-selector. Puedes usar
esta anotación para aplicar un archivo de configuración a un conjunto de clústeres, indicados por nombres de clústeres.
El valor de la anotación es una lista separada por comas de nombres de clústeres de destino.
Puedes aplicar la anotación en objetos con permisos de clúster y de espacio de nombres. Los objetos de espacio de nombres se seleccionan cuando la anotación coincide con el nombre del clúster
y cuando también se selecciona el espacio de nombres al que pertenecen los clústeres.
Selecciona un solo clúster
El siguiente archivo de configuración crea una función denominada namespace-reader que define un conjunto de permisos para leer espacios de nombres. Este rol solo se aplica al clúster
que tiene el nombre cluster-1.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: my-namespace
name: namespace-reader
annotations:
configsync.gke.io/cluster-name-selector: cluster-1
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
Selecciona una lista de clústeres
La siguiente configuración crea el mismo rol que el ejemplo anterior, pero este
rol solo se aplica en los clústeres que tienen el nombre cluster-1,
cluster-2 o cluster-3.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: my-namespace
name: namespace-reader
annotations:
configsync.gke.io/cluster-name-selector: cluster-1,cluster-2,cluster-3
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
Configura con el objeto ClusterSelector
Un ClusterSelector es un tipo de archivo de configuración especial que usa labelSelectors de Kubernetes. Puedes usar un ClusterSelector para limitar los clústeres a los que se aplica un archivo de configuración determinado, según las etiquetas del clúster. También puedes usar ClusterSelectors para limitar qué clústeres crean una instancia de un objeto con alcance de espacio de nombres.
Al igual que otros labelSelectors, los ClusterSelectors operan con la lógica AND. Dado que los ClusterSelectors usan la lógica AND, los objetos solo se seleccionan cuando coinciden con todas las etiquetas que defines.
Una configuración ClusterSelector no perdura en un clúster. En cambio, puedes hacerle referencia en otro archivo de configuración mediante una anotación y este solo se aplica a los clústeres que coinciden con el ClusterSelector.
Antes de poder usar ClusterSelectors, cada clúster debe tener un nombre único y un conjunto de etiquetas que se puedan seleccionar. Los metadatos del clúster se especifican en una configuración de clúster en tu fuente de información.
Luego, agrega etiquetas a un clúster, crea el ClusterSelector y, luego, hazle referencia en otro archivo de configuración.
Agrega etiquetas a un clúster
Para usar ClusterSelectors, cada clúster debe tener un conjunto de etiquetas que puedan seleccionarse. En los repositorios no estructurados, los archivos de configuración de clúster se pueden almacenar de forma arbitraria en el directorio de configuración o en sus directorios subordinados.
Para aplicar parámetros de configuración a un clúster, el campo metadata.name de la configuración del clúster
debe coincidir con el
campo clusterName
de tu objeto ConfigManagement.
El siguiente archivo de configuración de clúster de ejemplo declara que cluster-2 tiene las etiquetas environment: prod y location: central.
kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
name: cluster-2
labels:
environment: prod
location: central
También puedes aplicar anotaciones mediante una configuración de clúster.
Crea un ClusterSelector
Un ClusterSelector selecciona solo clústeres con una etiqueta determinada o una combinación de etiquetas. En los repositorios no estructurados, los ClusterSelectors se puede almacenar de forma arbitraria en el directorio de sincronización o en sus directorios subordinados.
El siguiente ClusterSelector selecciona solo clústeres con la etiqueta environment: prod.
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-env-prod
spec:
selector:
matchLabels:
environment: prod
El siguiente ClusterSelector selecciona cualquier clúster con las etiquetas location: central o location: west.
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-central-or-west
spec:
selector:
matchExpressions:
- key: location
operator: In
values:
- central
- west
Un ClusterSelector no tiene efecto hasta que le hagas referencia en otro archivo de configuración.
Haz referencia a un ClusterSelector
Para hacerle referencia a un ClusterSelector en otro archivo de configuración, establece la anotación configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME.
El siguiente archivo de configuración crea un ClusterRole denominado namespace-reader que define un conjunto de permisos para leer espacios de nombres. Este ClusterRole solo crea instancias en clústeres que coinciden con el ClusterSelector selector-env-prod.
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: namespace-reader
annotations:
configmanagement.gke.io/cluster-selector: selector-env-prod
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
Limita los clústeres a los que afecta un archivo de configuración con permisos de espacio de nombres
De forma predeterminada, el Sincronizador de configuración aplica archivos de configuración heredados por un espacio de nombres a ese espacio de nombres en cada clúster en el que se encuentra. Puedes usar un ClusterSelector para aplicar el archivo de configuración solo a un subconjunto de esos clústeres.
Por ejemplo, puedes configurar clústeres de manera diferente según su ubicación geográfica o la de sus clientes. Esta configuración podría
ser útil para la localización o el cumplimiento de los requisitos legales. En los ejemplos de esta sección, se aplican archivos de configuración específicos de la configuración regional solo a clústeres con la etiqueta location: france.
El siguiente archivo de configuración de clúster agrega una etiqueta location: france a un clúster denominado cluster-1:
kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
name: cluster-1
labels:
location: france
Crea un archivo de configuración de ClusterSelector que haga referencia a las etiquetas que deseas seleccionar. El siguiente ClusterConfig selecciona la etiqueta location: france:
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-location-france
spec:
selector:
matchLabels:
location: france
Un ClusterSelector no tiene efecto hasta que le hagas referencia en otro archivo de configuración.
El siguiente archivo de configuración de RoleBinding selecciona solo clústeres que coinciden con el ClusterSelector selector-location-france. Esta configuración podría ser útil, por ejemplo, si una guía de cumplimiento solo permitiera que un objeto serviceaccount determinado viera información sobre clústeres en la región geográfica designada.
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: viewers
annotations:
configmanagement.gke.io/cluster-selector: selector-location-france
subjects:
- kind: Group
name: system:serviceaccounts:foo
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: view
apiGroup: rbac.authorization.k8s.io
Si colocas este archivo de configuración en un espacio de nombres abstracto o en un directorio de espacios de nombres, como namespaces/eng, este se aplica a los espacios de nombres que lo heredan, pero solo en clústeres con la etiqueta location: france.
¿Qué sigue?
- Obtén más información sobre la configuración de espacios de nombres y objetos con alcance de espacios de nombres.