En esta página se explica cómo configurar clústeres y objetos centrados en clústeres. También puedes consultar información sobre cómo configurar espacios de nombres y objetos centrados en espacios de nombres.
Configurar clústeres y objetos centrados en clústeres
En los repositorios sin estructura, puedes organizar las configuraciones de los clústeres y los objetos con ámbito de clúster de la forma que más te convenga. Todas las configuraciones organizadas de esta forma se aplican a todos los clústeres registrados en Config Sync.
En los repositorios jerárquicos, todas las configuraciones de los clústeres y los objetos centrados en clústeres se encuentran en el directorio cluster/
. Todas las configuraciones de cluster/
se aplican a todos los clústeres registrados en Config Sync.
Configurar CustomResourceDefinitions
Config Sync te permite sincronizar CustomResourceDefinitions (CRDs) de la misma forma que sincronizarías cualquier otro recurso. Hay algunos aspectos que debes tener en cuenta al sincronizar CRDs:
Los CRDs de los repositorios jerárquicos, incluso cuando se declara un CustomResource con espacio de nombres, deben colocarse en el directorio
cluster/
.Las CRDs y sus CustomResources correspondientes no se actualizan en ningún orden predecible. Si modificas CRDs y los CustomResources correspondientes en la misma confirmación, no se espera que las actualizaciones de CRDs se produzcan antes que las de Custom Resources. Esto puede provocar que
nomos status
informe de un error transitorio durante un breve periodo hasta que tanto CustomResource como CRD estén presentes en el clúster.Config Sync no permite eliminar un CRD si algún CustomResource del repositorio depende de él. Para eliminar un CRD, también debe eliminar su CustomResource. Te recomendamos que los elimines en la misma confirmación del repositorio.
Puedes sincronizar un CustomResource sin sincronizar su CRD, siempre que puedas garantizar que el CRD ya existe en el clúster.
Limitar los clústeres a los que afecta una configuración
De forma predeterminada, Config Sync aplica una configuración a todos los clústeres registrados. Sin embargo, si necesitas aplicar una configuración a un subconjunto de clústeres, puedes añadir una anotación cluster-name-selector o una configuración ClusterSelector a tu repositorio.
La anotación cluster-name-selector
ofrece una forma sencilla de especificar un subconjunto de clústeres al que aplicar una configuración. Esta opción solo permite seleccionar clústeres por nombre.
El objeto ClusterSelector
permite seleccionar clústeres por etiquetas, pero requiere configuraciones más complejas.
Configurar 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 una configuración a un conjunto de clústeres, que se denotan mediante nombres de clústeres.
El valor de la anotación es una lista de nombres de clústeres de destino separados por comas.
Puedes aplicar la anotación a objetos centrados en clústeres y en espacios 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.
Seleccionar un solo clúster
La siguiente configuración crea un rol llamado 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"]
Seleccionar una lista de clústeres
La siguiente configuración crea el mismo rol que en el ejemplo anterior, pero este rol solo se aplica a 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"]
Configurar con el objeto ClusterSelector
Un ClusterSelector es un tipo especial de configuración que usa labelSelectors de Kubernetes. Puedes usar un ClusterSelector para limitar a qué clústeres se aplica una configuración concreta en función de las etiquetas del clúster. También puedes usar ClusterSelectors para limitar los clústeres que instancian un objeto con ámbito de espacio de nombres.
Al igual que otros labelSelectors, los ClusterSelectors funcionan con la lógica AND. Como los ClusterSelectors usan la lógica AND, los objetos solo se seleccionan cuando coinciden con todas las etiquetas que definas.
Una configuración de ClusterSelector no se conserva en un clúster. En su lugar, puedes hacer referencia a ella en otra configuración mediante una anotación. Esa configuración solo se aplica a los clústeres que coincidan con ClusterSelector.
Para 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 veraz.
A continuación, añade etiquetas a un clúster, crea el ClusterSelector y, después, haz referencia a él en otra configuración.
Añadir etiquetas a un clúster
Para usar ClusterSelectors, cada clúster debe tener un conjunto de etiquetas que se puedan seleccionar. En los repositorios no estructurados, las configuraciones de clúster se pueden almacenar de forma arbitraria en el directorio de configuración o en sus subdirectorios.
En los repositorios jerárquicos, las configuraciones de clúster se almacenan en el directorio clusterregistry/
.
Para aplicar configuraciones a un clúster, el campo metadata.name
de la configuración de clúster debe coincidir con el campo clusterName
de tu objeto ConfigManagement.
En la siguiente configuración de clúster se 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.
Crear un ClusterSelector
ClusterSelector solo selecciona clústeres con una etiqueta o una combinación de etiquetas determinadas. En los repositorios no estructurados, los ClusterSelectors se pueden almacenar de forma arbitraria en el directorio de sincronización o en sus directorios descendientes. En los repositorios jerárquicos, los ClusterSelectors se almacenan en el directorio clusterregistry/
de nivel superior del repositorio.
El siguiente ClusterSelector selecciona solo los 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 ningún efecto hasta que lo referencias en otra configuración.
Hacer referencia a un ClusterSelector
Para hacer referencia a un ClusterSelector en otra configuración, define la anotación
configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME
.
La siguiente configuración crea un ClusterRole llamado namespace-reader
que define un conjunto de permisos para leer espacios de nombres. Este ClusterRole solo se crea en clústeres que coincidan con el selector-env-prod
ClusterSelector.
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"]
Limitar los clústeres a los que afecta una configuración centrada en un espacio de nombres
De forma predeterminada, Config Sync aplica las configuraciones heredadas por un espacio de nombres a ese espacio de nombres en cada clúster en el que se encuentre. Puedes usar un ClusterSelector para aplicar la configuración solo a un subconjunto de esos clústeres.
Por ejemplo, puedes configurar los clústeres de forma diferente en función de su ubicación geográfica o de la ubicación geográfica de sus clientes. Esta configuración puede ser útil para la localización o para cumplir la normativa. Los ejemplos de esta sección aplican configuraciones específicas de la configuración regional solo a los clústeres con la etiqueta location: france
.
La siguiente configuración de clúster añade una etiqueta location: france
a un clúster llamado cluster-1
:
kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
name: cluster-1
labels:
location: france
Crea una configuración de ClusterSelector que haga referencia a las etiquetas que quieras 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 ningún efecto hasta que lo referencias en otra configuración.
La siguiente configuración de RoleBinding selecciona solo los clústeres que coinciden con el selector-location-france
ClusterSelector. Esta configuración puede ser útil, por ejemplo, si una directriz de cumplimiento solo permite que una cuenta de servicio concreta vea información sobre los clústeres de su 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 esta configuración en un espacio de nombres abstracto o en un directorio de espacio de nombres, como namespaces/eng
, se aplicará a los espacios de nombres que la hereden, pero solo en los clústeres con la etiqueta location: france
.
Siguientes pasos
- Consulta más información sobre cómo configurar espacios de nombres y objetos centrados en espacios de nombres.