Configura solo un subconjunto de clústeres

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

Un ClusterSelector es un tipo especial de configuración que usa labelSelectors de Kubernetes. Puedes usar un ClusterSelector para limitar los clústeres a los que se aplica una configuración determinada, 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.

Una configuración ClusterSelector no perdura en un clúster. En cambio, puedes hacerle referencia en otra configuración mediante una anotación y esa configuración 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 de administrador de configuración. Puedes aplicar etiquetas a cada clúster de forma manual, pero recomendamos usar una configuración de clúster.

Luego, crea el ClusterSelector y hazle referencia en otra 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 una configuración de clúster para cada uno de ellos. Los ajustes de configuración de clúster se almacenan en el directorio clusterregistry/ del repositorio.

El siguiente ejemplo 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 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. 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 otra configuración.

Haz referencia a un ClusterSelector

Para hacerle referencia a un ClusterSelector en otra configuración, establece la anotación configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME.

La siguiente 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 afectan una configuración con alcance de espacio de nombres

De manera predeterminada, Anthos Config Management aplica ajustes de configuración heredados por un espacio de nombres a ese espacio de nombres en cada clúster donde se encuentra. Puedes usar un ClusterSelector para aplicar la 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. Esto podría ser útil para la localización o el cumplimiento legal. Los ejemplos en esta sección aplican ajustes de configuración específicos de la configuración regional solo a clústeres con la etiqueta location: france.

La siguiente 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 esto crea un margen de error y no se recomienda.

Crea una configuración 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 otra configuración. La siguiente configuración de RoleBinding selecciona solo clústeres que coinciden con el ClusterSelector selector-location-france. Esto 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 coloca esta configuración en un espacio de nombres abstracto o en un directorio de espacio de nombres, como namespaces/online/shipping-app-backend/, esta se aplica a los espacios de nombres que la heredan, pero solo en clústeres con la etiqueta location: france.

¿Qué sigue?