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-france
ClusterSelector. 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
- Scopri di più sulla configurazione degli oggetti con ambito cluster
- Scopri di più sulla configurazione di oggetti con ambito a livello di spazio dei nomi