Configura cluster e oggetti con ambito cluster

Questa pagina spiega come configurare i cluster e gli oggetti con ambito cluster. Puoi anche leggere informazioni sulla configurazione degli spazi dei nomi e degli 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 a livello di cluster nel modo più pratico per te. Tutte le configurazioni organizzate in questo modo vengono applicate a ogni cluster registrato in Config Sync.

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

Configura CustomResourceDefinitions

Config Sync ti consente di sincronizzare i CustomResourceDefinitions (CRD) come faresti con qualsiasi altra risorsa. Esistono alcuni aspetti da tenere in considerazione quando si sincronizzano i CRD:

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

  • Gli aggiornamenti ai CRD e ai relativi CustomResource non avvengono in un ordine prevedibile. Se modifichi le risorse CRD e le risorse CustomResource corrispondenti nello stesso commit, non è previsto che gli aggiornamenti delle risorse CRD vengano eseguiti prima degli aggiornamenti delle risorse personalizzate. Ciò potrebbe causare il reporting di un nomos status errore transitorio per un breve periodo di tempo, fino a quando non sono presenti sia il CustomResource che il CRD nel cluster.

  • Config Sync non consente la rimozione di un CRD se qualsiasi CustomResource nel repo ne dipende. Per rimuovere un CRD, devi rimuovere anche il relativo CustomResource. Ti consigliamo di rimuoverli entrambi nello stesso commit al repo.

  • Puoi sincronizzare un CustomResource senza sincronizzare il relativo CRD, a condizione che tu possa garantire che il 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.

Configurazione mediante 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 relativi nomi. Il valore dell'annotazione è un elenco separato da virgole di nomi di cluster target. Puoi applicare l'annotazione a oggetti con ambito cluster e a oggetti con ambito dello spazio dei nomi. Gli oggetti dello spazio dei nomi vengono selezionati quando l'annotazione corrisponde al nome del cluster e quando è 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 configurazione seguente 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"]

Configurazione utilizzando l'oggetto ClusterSelector

Un ClusterSelector è un tipo speciale di configurazione che utilizza i labelSelectors di Kubernetes. Puoi utilizzare un selettore di cluster per limitare i cluster a cui si applica una determinata configurazione in base alle etichette del cluster. Puoi anche utilizzare ClusterSelectors per limitare i cluster che eseguono l'inizializzazione di un oggetto a livello di spazio dei nomi.

Come altri labelSelector, ClusterSelector opera 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 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 ClusterSelectors, 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 attendibile.

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

Aggiungere etichette a un cluster

Per utilizzare ClusterSelectors, ogni cluster deve avere un insieme di etichette che possono essere selezionate. Nei repository non strutturati, le configurazioni del cluster possono essere archiviate in modo arbitrario nella directory di configurazione o nelle relative directory discendenti. Nei repository gerarchici, le configurazioni del 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.

Il seguente esempio di 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 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 relative directory discendenti. Nei repository gerarchici, i ClusterSelector vengono memorizzati nella directory di primo livello clusterregistry/ del 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 alcun effetto finché non lo fai riferimento in un'altra configurazione.

Fare 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 oggetto ClusterRole denominato namespace-reader che definisce un insieme di autorizzazioni per la lettura degli spazi dei nomi. Questo ClusterRole viene eseguito solo su cluster che corrispondono a selector-env-prod ClusterSelector.

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 basata sullo spazio dei nomi

Per impostazione predefinita, Config Sync applica le configurazioni ereditate da uno spazio dei nomi a quel determinato 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 clienti. Questa configurazione può essere utile per la localizzazione o per la conformità alle normative. Gli esempi in questa sezione applicano le 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 fa 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 fai riferimento ad esso in un'altra configurazione. La seguente configurazione RoleBinding seleziona solo i cluster corrispondenti a selector-location-france ClusterSelector. Questa configurazione potrebbe essere utile, ad esempio, se una linea guida per la conformità consentisse solo a un determinato account servizio 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, come namespaces/eng, viene applicata agli spazi dei nomi che la ereditano, ma solo ai cluster con l'etichetta location: france.

Passaggi successivi