Configuration d'un sous-ensemble de clusters uniquement

Généralement, Config Sync applique une configuration à chaque cluster enregistré. Si la configuration se trouve dans le sous-répertoire namespaces/, Config Sync crée d'abord l'espace de noms dans chaque cluster, puis applique toutes les configurations héritées à cet espace de noms.

Toutefois, vous avez la possibilité d'appliquer une configuration à un sous-ensemble de clusters. À partir de la version 1.6.1, vous pouvez ajouter l'annotation configsync.gke.io/cluster-name-selector à vos configurations. Si vous utilisez une version antérieure à la version 1.6.1, vous pouvez utiliser un objet ClusterSelector.

Utiliser l'annotation de sélecteur de cluster

Vous pouvez utiliser l'annotation configsync.gke.io/cluster-name-selector avec des dépôts racines et des dépôts d'espaces de noms. La valeur de l'annotation est une liste de noms de clusters cibles séparés par une virgule. Vous pouvez appliquer l'annotation à des objets à l'échelle d'un cluster et à des objets à l'échelle d'un espace de noms. Les objets Namespace sont sélectionnés lorsque l'annotation correspond au nom du cluster et que l'espace de noms auquel les clusters appartiennent est également sélectionné.

Sélectionner un cluster unique

La configuration suivante crée un objet Role appelé namespace-reader qui définit un ensemble d'autorisations pour la lecture des espaces de noms. Cet objet Role n'est instancié que sur le cluster dont le nom est 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"]

Sélectionner une liste de clusters

La configuration suivante crée le même objet Role que l'exemple précédent, mais cet objet Role n'est instancié que sur les clusters portant les noms cluster-1, cluster-2 ou 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"]

Utiliser des objets ClusterSelectors

ClusterSelector est un type de configuration spécial qui utilise les objets labelSelector Kubernetes. Vous pouvez utiliser un objet ClusterSelector pour limiter les clusters auxquels s'applique une configuration particulière, en fonction des libellés des clusters. Vous pouvez également utiliser des objets ClusterSelector pour limiter les clusters qui instancient un objet à l'échelle d'un espace de noms.

Comme les autres objets labelSelector, les objets ClusterSelector fonctionnent à l'aide de la logique ET. Comme les objets ClusterSelector utilisent la logique ET, les objets ne sont sélectionnés que s'ils correspondent à tous les libellés que vous définissez.

Une configuration ClusterSelector ne persiste pas dans un cluster. À la place, vous la référencez dans une autre configuration à l'aide d'une annotation, et cette configuration ne s'applique qu'aux clusters qui correspondent à l'objet ClusterSelector.

Avant de pouvoir utiliser des objets ClusterSelector, chaque cluster doit avoir un nom unique. Vous définissez le nom du cluster lorsque vous configurez Config Sync Operator. Vous pouvez appliquer des libellés à chaque cluster manuellement, mais nous vous recommandons d'utiliser une configuration Cluster.

Ensuite, créez l'objet ClusterSelector, puis référencez-le dans une autre configuration.

Ajouter des libellés à un cluster

Pour utiliser des objets ClusterSelector, chaque cluster doit avoir un ensemble de libellés pouvant être sélectionnés. Vous pouvez attribuer un libellé aux clusters manuellement, mais il est recommandé d'utiliser une configuration Cluster pour chaque cluster. Les configurations de cluster sont stockées dans le répertoire clusterregistry/ de votre dépôt Git.

Le champ clusterName de votre fichier config-management.yaml doit correspondre au champ metadata.name d'au moins une des configurations de cluster.

L'exemple de configuration Cluster suivant déclare que cluster-2 a le libellé environment: prod.

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

Vous pouvez également appliquer des annotations à l'aide d'une configuration Cluster.

Créer un objet ClusterSelector

Un objet ClusterSelector ne sélectionne que les clusters associés à un libellé ou à une combinaison de libellés donnés. Les objets ClusterSelector sont stockés dans le répertoire de premier niveau clusterregistry/ du dépôt.

L'objet ClusterSelector suivant ne sélectionne que les clusters dotés du libellé environment: prod.

kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: selector-env-prod
spec:
  selector:
    matchLabels:
      environment: prod

Un objet ClusterSelector n'a aucun effet tant que vous ne le référencez pas dans une autre configuration.

Référencer un objet ClusterSelector

Pour référencer un objet ClusterSelector dans une autre configuration, définissez l'annotation configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME.

La configuration suivante crée un objet ClusterRole appelé namespace-reader qui définit un ensemble d'autorisations pour la lecture des espaces de noms. Cet objet ClusterRole n'est instancié que sur les clusters qui correspondent à l'objet 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"]

Limiter les clusters concernés par une configuration à l'échelle d'un espace de noms

Par défaut, Config Sync applique des configurations héritées par un espace de noms à cet espace de noms, dans chaque cluster où il existe. Vous pouvez utiliser un objet ClusterSelector pour n'appliquer la configuration qu'à un sous-ensemble de ces clusters.

Par exemple, vous pouvez configurer les clusters différemment en fonction de leur emplacement géographique ou de l'emplacement géographique de leurs clients. Cette configuration peut être utile pour la localisation ou la conformité légale. Les exemples de cette section n'appliquent des configurations spécifiques aux paramètres régionaux qu'aux clusters portant le libellé location: france.

La configuration Cluster suivante ajoute un libellé location: france à un cluster appelé cluster-1 :

kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
  name: cluster-1
  labels:
    location: france

Vous pouvez attribuer un libellé à chaque cluster pertinent manuellement, mais cela constitue une source d'erreur potentielle et n'est pas recommandé.

Créez une configuration ClusterSelector référençant les libellés que vous souhaitez sélectionner. L'objet ClusterConfig suivant sélectionne le libellé location: france :

kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: selector-location-france
spec:
  selector:
    matchLabels:
      location: france

Un objet ClusterSelector n'a aucun effet tant que vous ne le référencez pas dans une autre configuration. La configuration RoleBinding suivante ne sélectionne que les clusters correspondant à l'objet ClusterSelector selector-location-france. Cette configuration peut être utile, par exemple, si une consigne de conformité restreint les auditeurs à ne contrôler les informations sur les clusters que dans leur région géographique désignée.

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 vous placez cette configuration dans un espace de noms abstrait ou un répertoire d'espaces de noms, tel que namespaces/online/shipping-app-backend/, elle est appliquée aux espaces de noms qui en héritent, mais uniquement sur les clusters avec le libellé location: france.

Étapes suivantes