Questa pagina spiega come configurare cluster e oggetti con ambito cluster. Puoi anche leggere informazioni su come configurare 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 si applicano a ogni cluster registrato in Config Sync.
Configura CustomResourceDefinitions
Config Sync consente di sincronizzare le CustomResourceDefinitions (CRD) allo stesso modo di qualsiasi altra risorsa. Ecco alcune cose da tenere presente durante la sincronizzazione delle CRD:
Gli aggiornamenti delle CRD e delle CustomResource corrispondenti non avvengono in un ordine prevedibile. Se modifichi le CRD e le CustomResource corrispondenti nello stesso commit, non è garantito che gli aggiornamenti delle CRD avvengano prima degli aggiornamenti delle CustomResource. Ciò potrebbe causare la segnalazione di un errore temporaneo da parte di
nomos statusper un breve periodo di tempo, finché sia la CustomResource sia la CRD non sono presenti nel cluster.Config Sync non consente la rimozione di una CRD se una CustomResource nel repository dipende da essa. Per rimuovere una CRD, devi rimuovere anche la relativa CustomResource. Ti consigliamo di rimuoverle entrambe nello stesso commit nel repository.
Puoi sincronizzare una CustomResource senza sincronizzare la relativa CRD, a condizione che tu possa garantire che la CRD esista già nel cluster.
Limita 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 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 per etichetta, ma richiede configurazioni più complesse.
Entrambe le opzioni richiedono che clusterName sia specificato in Config Sync sul cluster. A seconda di come hai installato Config Sync, puoi fornire il nome del cluster nei seguenti modi:
Se hai installato Config Sync utilizzando Google Cloud CLI o Google Cloud la console:
clusterNameviene impostato automaticamente sul nome dell'appartenenza al parco risorse.Se hai installato Config Sync manualmente utilizzando
kubectl, devi impostare laCLUSTER_NAMEvariabile di ambiente nel deploymentreconciler-manager. Per ulteriori informazioni, consulta Fornisci un nome del cluster per i selettori di cluster.
Configura 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 di spazio dei nomi. Gli oggetti dello 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 oggetto Role denominato namespace-reader che definisce un insieme di autorizzazioni per la lettura degli spazi dei nomi. Questo oggetto Role viene applicato solo al 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 seguente configurazione crea lo stesso oggetto Role dell'esempio precedente, ma questo
oggetto Role viene applicato solo ai cluster con il 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"]
Configura utilizzando l'oggetto ClusterSelector
Un oggetto ClusterSelector è un tipo speciale di configurazione che utilizza i labelSelectors di Kubernetes labelSelectors. Puoi utilizzare un oggetto ClusterSelector per limitare i cluster a cui si applica una determinata configurazione, in base alle etichette del cluster. Puoi anche utilizzare gli oggetti ClusterSelector per limitare i cluster che creano un'istanza di un oggetto con ambito di spazio dei nomi.
Come gli altri labelSelector, gli oggetti ClusterSelector operano utilizzando la logica AND. Poiché gli oggetti ClusterSelector utilizzano la logica AND, gli oggetti vengono selezionati solo quando corrispondono a tutte le etichette definite.
Una configurazione ClusterSelector non viene mantenuta in un cluster. Al contrario, fai riferimento a un'altra configurazione utilizzando un'annotazione e questa configurazione si applica solo ai cluster che corrispondono all'oggetto ClusterSelector.
Prima di poter utilizzare gli oggetti ClusterSelector, ogni cluster deve avere un nome univoco e un insieme di etichette selezionabili. I metadati del cluster sono specificati in una configurazione Cluster nella tua fonte attendibile.
Poi, aggiungi le etichette a un cluster, crea l'oggetto ClusterSelector e poi fai riferimento a un'altra configurazione.
Aggiungi etichette a un cluster
Per utilizzare gli oggetti ClusterSelector, ogni cluster deve avere un insieme di etichette selezionabili. Nei repository non strutturati, le configurazioni 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 Cluster
deve corrispondere al
clusterName campo
dell'oggetto ConfigManagement.
La seguente configurazione Cluster di esempio 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 le annotazioni utilizzando una configurazione Cluster.
Crea un oggetto ClusterSelector
Un oggetto ClusterSelector seleziona solo i cluster con una determinata etichetta o combinazione di etichette. Nei repository non strutturati, gli oggetti ClusterSelector possono essere archiviati arbitrariamente nella directory di sincronizzazione o nelle relative directory discendenti.
Il seguente oggetto 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 oggetto 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 oggetto ClusterSelector non ha effetto finché non fai riferimento a un'altra configurazione.
Fai riferimento a un oggetto ClusterSelector
Per fare riferimento a un oggetto ClusterSelector in un'altra configurazione, imposta l'annotazione
configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME.
La seguente configurazione crea un oggetto ClusterRole denominato namespace-reader che definisce un insieme di autorizzazioni per la lettura degli spazi dei nomi. Questo oggetto ClusterRole viene creato solo sui cluster che corrispondono all'oggetto 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 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 oggetto 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 client. Questa configurazione può essere utile per la localizzazione o per la conformità legale. Gli esempi in questa sezione applicano configurazioni specifiche delle impostazioni internazionali solo ai cluster con l'etichetta location: france.
La seguente configurazione Cluster aggiunge un'etichetta location: france a un cluster denominato 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. La seguente configurazione ClusterConfig seleziona l'etichetta location: france:
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-location-france
spec:
selector:
matchLabels:
location: france
Un oggetto ClusterSelector non ha effetto finché non fai riferimento a un'altra configurazione.
La seguente configurazione RoleBinding seleziona solo i cluster che corrispondono all'oggetto ClusterSelector selector-location-france. Questa configurazione potrebbe essere utile, ad esempio, se una linea guida di conformità consentisse a un determinato account di servizio di visualizzare le informazioni solo 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 di spazi dei nomi e oggetti con ambito di spazio dei nomi