Configura cluster e oggetti con ambito cluster

Config Sync ti consente di gestire in modo dichiarativo gli oggetti con ambito cluster, come le risorse Namespace, ClusterRole e CustomResourceDefinition, nei tuoi cluster Kubernetes da una fonte di verità centrale. La sincronizzazione delle configurazioni con ambito cluster ti aiuta ad applicare policy, controlli degli accessi basati su ruoli (RBAC) e API personalizzate coerenti a livello di cluster in tutto il parco risorse. Puoi anche scegliere come target cluster specifici utilizzando i selettori. Per gestire le risorse all'interno di singoli spazi dei nomi, consulta Sincronizza gli oggetti con più spazi 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 più comodo per te. Tutte le configurazioni organizzate in questo modo si applicano a ogni cluster registrato in Config Sync.

Configura CustomResourceDefinition

Config Sync ti consente di sincronizzare le CustomResourceDefinition (CRD) nello stesso modo in cui sincronizzeresti qualsiasi altra risorsa. Ci sono alcune cose da tenere a mente quando si sincronizzano i CRD:

  • Gli aggiornamenti ai CRD e alle relative CustomResource non avvengono in un ordine prevedibile. Se modifichi i CRD e le CustomResource corrispondenti nello stesso commit, non è previsto che gli aggiornamenti dei CRD avvengano prima degli aggiornamenti delle risorse personalizzate. Ciò potrebbe causare la segnalazione di un errore temporaneo da parte di nomos status per un breve periodo di tempo, fino a quando sia CustomResource che CRD non saranno presenti nel cluster.

  • Config Sync non consente la rimozione di una CRD se una CustomResource nel repository dipende da questa. Per rimuovere una CRD, devi anche rimuovere la relativa CustomResource. Ti consigliamo di rimuoverli entrambi 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 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 in base alle etichette, 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 la console Cloud de Confiance : clusterName viene impostato automaticamente sul nome dell'appartenenza al parco risorse.

  • Se hai installato Config Sync manualmente utilizzando kubectl, devi impostare la variabile di ambiente CLUSTER_NAME nel deployment reconciler-manager. Per saperne di più, consulta Specifica un nome 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 con ambito 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 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 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 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 ClusterSelector è un tipo speciale di configurazione che utilizza i 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'istanza di un oggetto con ambito dello spazio dei nomi.

Come altri labelSelector, i ClusterSelector funzionano utilizzando la logica AND. Poiché i ClusterSelector utilizzano la logica AND, gli oggetti vengono selezionati solo quando corrispondono a tutte le etichette definite.

Una configurazione ClusterSelector non persiste in un cluster. Invece, fai riferimento all'oggetto 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 e un insieme di etichette che possono essere selezionate. I metadati del cluster sono specificati in una configurazione del cluster nella tua fonte di verità.

Successivamente, aggiungi etichette a un cluster, crei il ClusterSelector e poi fai riferimento a questo in un'altra configurazione.

Aggiungi 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 secondarie.

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

L'esempio di configurazione Cluster 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 del cluster.

Crea un ClusterSelector

Un ClusterSelector seleziona solo i cluster con un'etichetta o una combinazione di etichette specifica. Nei repository non strutturati, i ClusterSelector possono essere archiviati arbitrariamente nella directory di sincronizzazione o nelle relative directory secondarie.

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 alcun effetto finché non viene indicato come 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 istanziato solo sui cluster che corrispondono al 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 a livello 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.

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 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. 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 alcun effetto finché non viene fatto riferimento a questo in un'altra configurazione. La seguente configurazione RoleBinding seleziona solo i cluster che corrispondono al ClusterSelector selector-location-france. Questa configurazione potrebbe essere utile, ad esempio, se una linea guida di conformità consente solo a un determinato service account di visualizzare le 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 ai cluster con l'etichetta location: france.

Passaggi successivi