Configura cluster e oggetti con ambito cluster

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 dello 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 che preferisci. 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 all'interno della directory cluster/. Tutte le configurazioni all'interno di cluster/ si applicano a ogni cluster registrato in Config Sync.

Configura CustomResourceDefinitions

Config Sync consente di sincronizzare CustomResourceDefinitions (CRD) come faresti per qualsiasi altra risorsa. Quando sincronizzi le CRD, tieni presente quanto segue:

  • Le CRD nei repository gerarchici, anche quando dichiari una risorsa personalizzata con spazio dei nomi, devono essere inserite nella directory cluster/.

  • Gli aggiornamenti alle CRD e alle risorse CustomResource corrispondenti non avvengono in alcun ordine prevedibile. Se modifichi i CRD e le risorse CustomResources corrispondenti nello stesso commit, non è previsto che gli aggiornamenti CRD vengano eseguiti prima dell'aggiornamento delle risorse personalizzate. Di conseguenza, nomos status potrebbe segnalare un errore temporaneo per un breve periodo di tempo, finché sia CustomResource che CRD non saranno presenti nel cluster.

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

  • Puoi sincronizzare una risorsa CustomResource senza sincronizzarne il 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 una configurazione ClusterSelector al 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 in base al nome.

L'oggetto ClusterSelector supporta la selezione dei cluster in base alle etichette, ma richiede configurazioni più complesse.

Configurazione con 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, indicati dai nomi dei cluster. Il valore dell'annotazione è un elenco separato da virgole di nomi dei cluster di destinazione. Puoi applicare l'annotazione agli oggetti con ambito cluster e agli oggetti con ambito a livello di 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 configurazione seguente crea un ruolo denominato namespace-reader che definisce un set 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 sui cluster che hanno 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 con 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 usare ClusterSelector per limitare i cluster che creano un'istanza di un oggetto con ambito dello spazio dei nomi.

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

Una configurazione di ClusterSelector non viene persistente in un cluster. Puoi invece farvi 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 origine di riferimento.

Successivamente, aggiungerai le etichette a un cluster, crearai ClusterSelector e farai riferimento in un'altra configurazione.

Aggiungi etichette a un cluster

Per utilizzare ClusterSelector, ogni cluster deve avere un set di etichette selezionabili. Nei repository non strutturati, le configurazioni dei cluster possono essere archiviate arbitrariamente nella directory di configurazione o nelle directory discendenti. Nei repository gerarchici, le configurazioni dei cluster sono archiviate nella directory clusterregistry/.

Per applicare 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.

Creazione di 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 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 qualsiasi 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 fai riferimento 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 è attivato 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 con ambito dello 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. Con ClusterSelector puoi applicare la configurazione solo a un sottoinsieme di cluster.

Ad esempio, puoi configurare i cluster in modo diverso in base alla posizione geografica o alla posizione geografica dei 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 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 effetto finché non lo fai riferimento in un'altra configurazione. La seguente configurazione di RoleBinding seleziona solo i cluster che corrispondono a ClusterSelector selector-location-france. Questa configurazione può essere utile, ad esempio, se una linea guida sulla conformità ha consentito solo a un determinato account di 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 posizioni questa configurazione in uno spazio dei nomi astratto o in una directory dello spazio dei nomi, come namespaces/eng, la configurazione viene applicata agli spazi dei nomi che la ereditano, ma solo sui cluster con l'etichetta location: france.

Passaggi successivi