Configura cluster e oggetti con ambito cluster

Questa pagina spiega come configurare i cluster e gli oggetti con ambito cluster. Puoi anche leggere ulteriori 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 i cluster e gli oggetti con ambito cluster nel modo che preferisci. Tutte le configurazioni organizzate in questo modo si applicano a tutti i cluster registrati in Config Sync.

Nei repository gerarchici, tutte le configurazioni per i cluster e gli oggetti con ambito cluster si trovano all'interno della directory cluster/. Tutte le configurazioni all'interno di cluster/ si applicano a tutti i cluster registrati in Config Sync.

Configura CustomResourceDefinitions

Config Sync consente di sincronizzare le CustomResourceDefinitions (CRD) come faresti per qualsiasi altra risorsa. Ci sono alcuni aspetti da tenere presenti durante la sincronizzazione di CRD:

  • I CRD nei repository gerarchici, anche quando dichiarano una risorsa personalizzata con spazio dei nomi, devono essere inseriti nella directory cluster/.

  • Gli aggiornamenti di CRD e delle risorse personalizzate corrispondenti non avvengono in un ordine prevedibile. Se modifichi i CRD e le risorse personalizzate corrispondenti nello stesso commit, non è previsto che gli aggiornamenti di CRD vengano eseguiti prima degli aggiornamenti delle risorse personalizzate. Questo potrebbe causare la segnalazione di un errore temporaneo da parte di nomos status per un breve periodo di tempo, fino a quando sia la risorsa personalizzata che il CRD sono presenti nel cluster.

  • Config Sync non consente la rimozione di un CRD se una qualsiasi risorsa personalizzata nel repository dipende da questo. Per rimuovere un CRD, devi anche rimuovere la relativa risorsa personalizzata. Ti consigliamo di rimuoverli entrambi nello stesso commit nel repository.

  • Puoi sincronizzare una CustomResource senza sincronizzare il relativo CRD, purché tu possa garantire che il 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 ClusterSelector al tuo repository.

L'annotazione cluster-name-selector fornisce 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.

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 set di cluster, indicato dai nomi dei cluster. Il valore dell'annotazione è un elenco separato da virgole di nomi dei cluster di destinazione. Puoi applicare l'annotazione a oggetti con ambito a livello di cluster e a oggetti con ambito a livello di spazio dei nomi. Gli oggetti Spazio dei nomi vengono selezionati quando l'annotazione corrisponde al nome del cluster e allo spazio dei nomi a cui appartengono i cluster.

Seleziona un unico cluster

La configurazione seguente 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 con 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 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"]


Configura utilizzando l'oggetto ClusterSelector

Un ClusterSelector è un tipo speciale di configurazione che utilizza Kubernetes labelSelectors. 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 di istanza di un oggetto con ambito di spazio dei nomi.

Come altri labelSelector, i valori ClusterSelector operano con logica di tipo AND. Poiché i clusterSelector utilizzano la logica AND, gli oggetti vengono selezionati solo quando corrispondono a tutte le etichette definite.

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

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

Quindi, crea il ClusterSelector, poi esegui il riferimento in un'altra configurazione.

Aggiungi etichette a un cluster

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

Per applicare le configurazioni a un cluster, il campo metadata.name della configurazione del cluster deve corrispondere al campo clusterName dell'oggetto ConfigManagement.

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 le 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, 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 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 lo modifichi in un'altra configurazione.

Riferimento a 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 set di autorizzazioni per la lettura degli spazi dei nomi. Questo ClusterRole è giustificato 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"]


Limita i cluster interessati da una configurazione basata sugli spazi dei nomi

Per impostazione predefinita, Config Sync applica le configurazioni ereditate da uno spazio dei nomi a quest'ultimo 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 a seconda della loro posizione geografica o della loro posizione. 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 ogni 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 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 sulla conformità consentiva a un particolare 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