Questa pagina spiega come configurare cluster e oggetti con ambito cluster. Puoi anche leggere informazioni sulla configurazione di spazi dei nomi e oggetti con ambito di spazio dei nomi.
Configura cluster e oggetti con ambito cluster
Nei repository non strutturati, puoi organizzare le configurazioni per cluster e oggetti con ambito cluster nel modo più conveniente per te. Tutte le configurazioni organizzate in questo modo vengono applicate a ogni cluster registrato in Config Sync.
Configura CustomResourceDefinitions
Config Sync ti consente di sincronizzare le CustomResourceDefinitions (CRD) nello stesso modo in cui sincronizzi qualsiasi altra risorsa. Ci sono alcune cose da tenere presenti quando sincronizzi i CRD:
Gli aggiornamenti dei CRD e delle CustomResource corrispondenti non avvengono in un ordine prevedibile. Se modifichi le CRD e le CustomResources corrispondenti nello stesso commit, non è previsto che gli aggiornamenti delle CRD vengano eseguiti prima di quelli delle risorse personalizzate. Ciò potrebbe causare la segnalazione di un errore temporaneo da parte di
nomos statusper un breve periodo di tempo, finché sia CustomResource sia CRD non sono presenti nel cluster.Config Sync non consente la rimozione di un CRD se una CustomResource nel repository dipende da esso. Per rimuovere un CRD, devi rimuovere anche la relativa CustomResource. Ti consigliamo di rimuoverli entrambi nello stesso commit del repository.
Puoi sincronizzare una CustomResource senza sincronizzare la relativa CRD, a condizione che tu possa garantire che la CRD esista già nel cluster.
Limitare i cluster interessati da una configurazione
Per impostazione predefinita, Config Sync applica una configurazione a ogni cluster registrato. Tuttavia, se devi applicare una configurazione solo a un sottoinsieme di cluster, puoi aggiungere un'annotazione cluster-name-selector o una configurazione ClusterSelector al tuo repository.
L'annotazione cluster-name-selector offre un modo semplice per specificare un sottoinsieme di cluster a cui applicare una configurazione. Questa opzione supporta solo la selezione dei cluster
per nome.
L'oggetto ClusterSelector supporta la selezione dei cluster in base alle etichette, ma
richiede configurazioni più complesse.
Configurare utilizzando l'annotazione cluster-name-selector
Puoi applicare una configurazione a un sottoinsieme di cluster con l'annotazione
configsync.gke.io/cluster-name-selector. Puoi utilizzare
questa annotazione per applicare una configurazione a un insieme di cluster, indicati dai nomi dei cluster.
Il valore dell'annotazione è un elenco separato da virgole di nomi di cluster di destinazione.
Puoi applicare l'annotazione a oggetti con ambito cluster e oggetti con ambito spazio dei nomi. Gli oggetti spazio dei nomi vengono selezionati quando l'annotazione corrisponde al nome del cluster e quando viene selezionato anche lo spazio dei nomi a cui appartengono i cluster.
Seleziona un singolo cluster
La seguente configurazione crea un ruolo denominato namespace-reader che definisce un insieme
di autorizzazioni per la lettura degli spazi dei nomi. Questo ruolo viene applicato solo al cluster
che ha 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 seguente configurazione crea lo stesso ruolo dell'esempio precedente, ma questo ruolo viene applicato solo ai 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"]
Configurazione tramite l'oggetto ClusterSelector
Un ClusterSelector è un tipo speciale di configurazione che utilizza labelSelectors 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 oggetto con ambito spazio dei nomi.
Come altri labelSelector, ClusterSelector funzionano utilizzando la logica AND. Poiché ClusterSelectors utilizza la logica AND, gli oggetti vengono selezionati solo quando corrispondono a tutte le etichette che definisci.
Una configurazione ClusterSelector non viene mantenuta in un cluster. ma lo fai riferimento in un'altra configurazione utilizzando un'annotazione e questa configurazione si applica solo ai cluster che corrispondono a ClusterSelector.
Prima di poter utilizzare ClusterSelector, ogni cluster deve avere un nome univoco e un insieme di etichette selezionabili. I metadati del cluster sono specificati in una configurazione del cluster nella tua fonte attendibile.
Successivamente, aggiungi etichette a un cluster, crea ClusterSelector e poi fai riferimento a un'altra configurazione.
Aggiungere etichette a un cluster
Per utilizzare ClusterSelector, ogni cluster deve avere un insieme di etichette che possono essere selezionate. Nei repository non strutturati, le configurazioni del cluster possono essere archiviate arbitrariamente nella directory di configurazione o nelle relative directory discendenti.
Per applicare le configurazioni a un cluster, il campo metadata.name della configurazione del cluster deve corrispondere al campo clusterName dell'oggetto ConfigManagement.
La seguente configurazione del cluster 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 del cluster.
Crea un ClusterSelector
Un ClusterSelector seleziona solo i cluster con una determinata etichetta o combinazione di etichette. Nei repository non strutturati, ClusterSelector può essere archiviato arbitrariamente nella directory di sincronizzazione o nelle relative directory discendenti.
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 etichette
location: central o 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 effetto finché non viene fatto riferimento in 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 seguente configurazione crea un ClusterRole denominato namespace-reader che
definisce un insieme di autorizzazioni per la lettura degli spazi dei nomi. Questo ClusterRole viene
istanziazione solo sui cluster che corrispondono a 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"]
Limitare i cluster interessati da una configurazione con ambito di spazio dei nomi
Per impostazione predefinita, Config Sync applica le configurazioni ereditate da uno spazio dei nomi a quello spazio dei nomi in ogni cluster in cui esiste. Puoi utilizzare un ClusterSelector per applicare la configurazione solo a un sottoinsieme di questi cluster.
NamespaceSelectors Un NamespaceSelector restringe il pool di spazi dei nomi che possono ereditare una determinata configurazione da uno spazio dei nomi astratto, indipendentemente dalla struttura di directory della directorynamespaces/.
Un ClusterSelector restringe il pool di cluster a cui si applica una configurazione, indipendentemente dal fatto che la configurazione sia incentrata su un oggetto con ambito cluster o spazio dei nomi.
Ad esempio, puoi configurare i cluster in modo diverso in base alla loro posizione geografica o a quella dei loro client. 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
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 lo fai riferimento in un'altra configurazione.
La seguente configurazione RoleBinding seleziona solo i cluster che corrispondono a
selector-location-france ClusterSelector. Questa configurazione potrebbe essere utile, ad esempio, se una linea guida per la conformità consentisse a un determinato account di servizio di visualizzare informazioni sui cluster nella regione 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 inserisci 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 sui cluster con l'etichetta location: france.
Passaggi successivi
- Scopri di più sulla configurazione degli spazi dei nomi e degli oggetti con ambito di spazio dei nomi