Configura un sottoinsieme di cluster

Normalmente, Config Sync applica una configurazione a ogni cluster registrato. Se la configurazione si trova all'interno della sottodirectory namespaces/ di un repository di gerarchia, Config Sync crea prima lo spazio dei nomi all'interno di ogni cluster, quindi applica tutte le configurazioni ereditate a quello spazio dei nomi.

Tuttavia, hai la possibilità di applicare una configurazione a un sottoinsieme di cluster. A partire dalla versione 1.6.1, puoi aggiungere l'annotazione configsync.gke.io/cluster-name-selector alle configurazioni. Se usi una versione precedente alla 1.6.1, puoi usare un ClusterSelector.

usando l'annotazione del selettore del cluster.

Puoi utilizzare l'annotazione configsync.gke.io/cluster-name-selector per applicare una configurazione a un set di cluster, indicato da nomi di cluster. Il valore dell'annotazione è un elenco separato da virgole di nomi dei cluster di destinazione. Puoi applicare l'annotazione a oggetti con ambito cluster e oggetti con ambito a livello di spazio dei nomi. Gli oggetti Spazio dei nomi sono selezionati quando l'annotazione corrisponde al nome del cluster e quando è selezionato anche lo spazio dei nomi a cui appartengono i cluster.

Selezione di un singolo cluster

La configurazione seguente crea un ruolo denominato namespace-reader che definisce un insieme di autorizzazioni per la lettura degli spazi dei nomi. L'istanza di questo ruolo è creata solo nel cluster con il nome 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"]

Seleziona un elenco di cluster

La configurazione seguente crea lo stesso ruolo dell'esempio precedente, ma questo ruolo viene creato in modo istantaneo solo nei cluster con nome 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"]

Utilizzo dei ClusterSelector

Un ClusterSelector è un tipo speciale di configurazione che utilizza labelSelector di Kubernetes. Puoi utilizzare un ClusterSelector per limitare i cluster a cui si applica una determinata configurazione, in base alle etichette del cluster. Puoi anche utilizzare ClusterSelector per limitare i cluster che creano un'istanza di un oggetto con ambito nello spazio dei nomi.

Come altri labelSelector, i ClusterSelector funzionano utilizzando la logica E. Dal momento che i ClusterSelector utilizzano la logica E, gli oggetti vengono selezionati solo quando soddisfano tutte le etichette da te definite.

Una configurazione ClusterSelector non viene mantenuta in un cluster. Invece, fai riferimento a un'altra configurazione utilizzando un'annotazione e questa configurazione si applica solo ai cluster che corrispondono al ClusterSelector.

Prima di poter utilizzare i ClusterSelector, ogni cluster deve avere un nome univoco. Puoi applicare le etichette a ogni cluster manualmente, ma consigliamo di utilizzare una configurazione Cluster.

A questo punto, crea il ClusterSelector, quindi fai riferimento a esso in un'altra configurazione.

Aggiungi etichette a un cluster

Per utilizzare i ClusterSelector, ogni cluster deve avere un insieme di etichette che possono essere selezionate. Puoi etichettare manualmente i cluster, ma è consigliabile utilizzare una configurazione cluster per ogni cluster. Nei repository non strutturati, le configurazioni del cluster possono essere archiviate arbitrariamente nella directory di sincronizzazione o nelle directory discendenti. Nei repository gerarchici, le configurazioni del cluster vengono archiviate nella directory clusterregistry/ del repository Git.

Il campo clusterName del file config-management.yaml deve corrispondere al campo metadata.name di almeno una delle configurazioni del cluster.

La configurazione del cluster di esempio seguente dichiara che cluster-2 ha le etichette environment: prod e location: central.

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

Puoi anche applicare annotazioni utilizzando una configurazione cluster.

Creazione di un ClusterSelector

Un ClusterSelector seleziona solo i cluster con una determinata etichetta o combinazione di etichette. Nei repository non strutturati, i ClusterSelector possono essere archiviati in modo arbitrario nella directory di sincronizzazione o nelle directory discendenti. Nei repository gerarchici, i ClusterSelector vengono archiviati nella directory clusterregistry/ di primo livello nel repository.

Il seguente ClusterSelector seleziona solo i cluster con l'etichetta environment: prod.

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

Il seguente ClusterSelector seleziona tutti i cluster con le location: central o le etichette di 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 non ha alcun effetto finché non lo fai riferimento a un'altra configurazione.

Riferimento a un ClusterSelector

Per fare riferimento a un ClusterSelector in un'altra configurazione, imposta l'annotazione configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME.

La configurazione seguente crea un ClusterRole denominato namespace-reader, che definisce un insieme di autorizzazioni per la lettura degli spazi dei nomi. Questo ClusterRole viene determinato solo sui cluster che corrispondono a ClusterSelector di 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"]

Limitazione dei cluster interessati da una configurazione con ambito a livello di spazio dei nomi

Per impostazione predefinita, Config Sync applica le configurazioni ereditate da uno spazio dei nomi a tale spazio dei nomi in ogni cluster in cui esiste. Puoi utilizzare un ClusterSelector per applicare la configurazione solo a un sottoinsieme di questi cluster.

Ad esempio, puoi configurare i cluster in modo diverso in base alla loro posizione geografica o alla posizione geografica dei loro clienti. Questa configurazione può essere utile per la localizzazione o per la conformità legale. Gli esempi in questa sezione applicano configurazioni specifiche per le impostazioni internazionali solo ai cluster con l'etichetta location: france.

La seguente configurazione del cluster aggiunge un'etichetta location: france a un cluster chiamato cluster-1:

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

Puoi etichettare manualmente ciascun cluster pertinente, ma questo processo crea spazio per gli errori e non è consigliato.

Crea una configurazione ClusterSelector che faccia riferimento alle etichette che vuoi selezionare. Il seguente ClusterConfig seleziona l'etichetta location: france:

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

Un ClusterSelector non ha effetto finché non vi fai riferimento in un'altra configurazione. La seguente configurazione RoleBinding seleziona solo i cluster corrispondenti al selector-location-franceClusterSelector. Questa configurazione potrebbe essere utile, ad esempio, se una linea guida sulla conformità ha consentito a un determinato account di servizio di visualizzare le informazioni sui cluster nell'area geografica designata.

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

Se posizioni questa configurazione in uno spazio dei nomi astratto o in una directory dello spazio dei nomi, ad esempio namespaces/eng, viene applicata agli spazi dei nomi che la ereditano, ma solo nei cluster con l'etichetta location: france.

Passaggi successivi