Configura solo un subconjunto de clústeres

Por lo general, Config Sync aplica una configuración a cada clúster inscrito. Si el archivo de configuración está dentro del subdirectorio namespaces/, el Sincronizador de configuración primero crea el espacio de nombres dentro de cada clúster y, luego, aplica todos los archivos de configuración heredados al espacio de nombres.

Sin embargo, puedes aplicar una configuración a un subconjunto de clústeres. A partir de la versión 1.6.1, puedes agregar la anotación configsync.gke.io/cluster-name-selector a los archivos de configuración. Si usas una versión anterior a la 1.6.1, puedes usar un ClusterSelector.

Utiliza la anotación del selector de clúster

Puedes usar la anotación configsync.gke.io/cluster-name-selector con repositorios raíz y repositorios de espacios de nombres. El valor de la anotación es una lista separada por comas de los nombres de clústeres de destino. Puedes aplicar la anotación en objetos con permisos de clúster y objetos con permisos de espacio de nombres. Los objetos del espacio de nombres se seleccionan cuando la anotación coincide con el nombre del clúster y cuando el espacio de nombres al que pertenecen los clústeres también se selecciona.

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. Esta función solo crea instancias en el 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 la misma función que en el ejemplo anterior, pero solo se crea una instancia 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"]

Usa ClusterSelectors

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 instancias de un objeto con alcance de espacio de nombres.

Al igual que otros labelSelectors, los ClusterSelectors operan con lógica Y. Debido a que ClusterSelectors utiliza la lógica Y, 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. Establece el nombre del clúster cuando configures el operador del Sincronizador de configuración. Puedes aplicar etiquetas a cada clúster de forma manual, pero recomendamos usar un archivo de configuración de clúster.

Luego, crea el ClusterSelector y 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. Puedes etiquetar clústeres de forma manual, pero se recomienda que uses un archivo de configuración de clúster para cada uno de ellos. Los archivos de configuración de clúster se almacenan en el directorio clusterregistry/ del repositorio de Git.

El campo clusterName del archivo config-management.yaml debe coincidir con el campo metadata.name de, al menos, uno de los archivos de configuración de clúster.

El siguiente ejemplo de archivo de configuración de clúster declara que el cluster-2 tiene la etiqueta environment: prod.

kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
  name: cluster-2
  labels:
    environment: prod

También puedes aplicar anotaciones mediante un archivo de configuración de clúster.

Crea un ClusterSelector

Un ClusterSelector selecciona solo clústeres con una etiqueta determinada o una combinación de etiquetas. Los ClusterSelectors se almacenan en el directorio principal clusterregistry/ en el repositorio.

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

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 que afecta un archivo de configuración con alcance 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 legal. 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

Puedes etiquetar cada clúster relevante de forma manual, pero este proceso crea un margen de error y no se recomienda.

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 les permitiera a los auditores examinar 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:audit
  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/online/shipping-app-backend/, este se aplica a los espacios de nombres que lo heredan, pero solo en clústeres con la etiqueta location: france.

¿Qué sigue?