Questa pagina illustra come utilizzare Config Sync per gestire gli spazi dei nomi e basati sullo spazio dei nomi.
Configura uno spazio dei nomi
La configurazione di uno spazio dei nomi funziona in modo diverso non strutturati e gerarchici. I seguenti esempi evidenziano le differenze.
Repository non strutturato
Le configurazioni per gli spazi dei nomi e gli oggetti con ambito spazio dei nomi possono essere situate ovunque alla directory o alle sottodirectory del repository.
Completa i seguenti passaggi per configurare uno spazio dei nomi denominato gamestore
in
ogni cluster registrato:
Crea un file
namespace-gamestore.yaml
con i seguenti contenuti:apiVersion: v1 kind: Namespace metadata: name: gamestore
Devi creare un solo file YAML che contenga la configurazione dello spazio dei nomi.
Crea un commit che includa la configurazione
namespace-gamestore.yaml
. esegui il push del commit nel repository remoto:git add multirepo/root/namespace-gamestore.yaml git commit -m "Created gamestore namespace config" git push REMOTE_NAME BRANCH_NAME
Sostituisci quanto segue:
REMOTE_NAME
: il nome del telecomando repository Git.BRANCH_NAME
: il ramo di cui vuoi eseguire il commit a.
In questo esempio il file viene aggiunto alla directory principale, ma puoi spostarlo in una qualsiasi delle sottodirectory del repository.
Repository gerarchico
Tutte le configurazioni per gli spazi dei nomi e gli oggetti con ambito spazio dei nomi si trovano all'interno della
Directory namespaces/
delle
repository gerarchico e relativi
discendenti.
Segui questi passaggi per configurare uno spazio dei nomi denominato gamestore
in ogni registrazione
cluster:
Nel clone locale del repository, crea una directory dello spazio dei nomi. Uno spazio dei nomi contiene una configurazione per uno spazio dei nomi. Il nome dello spazio dei nomi deve corrispondere al nome dello spazio dei nomi. In questo esempio, la directory si chiama
namespaces/gamestore
:mkdir namespaces/gamestore
Nella directory dello spazio dei nomi, crea un file
gamestore.yaml
, con i seguenti contenuti:apiVersion: v1 kind: Namespace metadata: name: gamestore
metadata.name
deve corrispondere al nome del dello spazio dei nomi.Crea un commit che includa la configurazione
gamestore.yaml
ed esegui il push del esegui il commit nel repository remoto:git add namespaces/gamestore/gamestore.yaml git commit -m "Created gamestore namespace config" git push REMOTE_NAME BRANCH_NAME
Sostituisci quanto segue:
REMOTE_NAME
: il nome del telecomando repository Git.BRANCH_NAME
: il ramo di cui vuoi eseguire il commit a.
Dopo qualche istante, lo spazio dei nomi gamestore
viene creato in ogni cluster registrato.
Per verificare, descrivi lo spazio dei nomi:
kubectl describe namespace gamestore
Per rimuovere la configurazione ed eliminare lo spazio dei nomi gamestore
dai cluster registrati,
crea un nuovo commit che rimuova il file ed eseguine il push sul repository
repository Git. Non rimuovere la configurazione se vuoi
configurare uno spazio dei nomi astratto
un repository gerarchico.
configura un oggetto con ambito dello spazio dei nomi
Nei repository non strutturati, puoi archiviare oggetti con ambito dello spazio dei nomi in senza dover configurare lo spazio dei nomi. Se uno spazio dei nomi non è presente, Config Sync crea automaticamente uno spazio dei nomi implicito e applica tutte le configurazioni a quello spazio dei nomi.
Questo comportamento può essere modificato utilizzando il campo namespaceStrategy
. Se
namespaceStrategy
è impostato su explicit
, quindi Config Sync non
crea automaticamente un oggetto spazio dei nomi implicito. Per ulteriori informazioni, vedi
strategia dello spazio dei nomi.
Nei repository gerarchici, devi specificare esplicitamente una configurazione dello spazio dei nomi
la sottodirectory namespaces/NAMESPACE
, dove NAMESPACE
deve corrispondere al nome dello spazio dei nomi. Tutte le altre configurazioni con ambito dello spazio dei nomi devono
anche nella stessa sottodirectory. Se manca una configurazione dello spazio dei nomi,
Config Sync restituisce un errore KNV1044, che indica una configurazione dello spazio dei nomi mancante.
Configura uno spazio dei nomi astratto
Questa sezione riguarda soltanto repository gerarchici perché gli spazi dei nomi astratti non supportato nei repository non strutturati.
Questo esempio estende l'esempio nella configurazione di uno spazio dei nomi
spostando la directory dello spazio dei nomi gamestore
in uno spazio dei nomi astratto.
contenente configurazioni aggiuntive ereditate dallo spazio dei nomi gamestore
.
Nel clone locale del repository crea una directory dello spazio dei nomi astratta chiamato
eng
:mkdir namespaces/eng
Una directory dello spazio dei nomi astratto non contiene per uno spazio dei nomi, al contrario delle directory dello spazio dei nomi discendenti.
Nella directory dello spazio dei nomi astratto
eng
, crea una configurazione per un ruolo denominatoeng-viewer
, che concedeget
elist
su tutte le risorse in qualsiasi che alla fine eredita il ruolo:# namespaces/eng/eng-role.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: eng-viewer rules: - apiGroups: [""] resources: ["*"] verbs: ["get", "list"]
Crea una configurazione per una RoleBinding denominata
eng-admin
che vincola la Ruoloeng-viewer
per il gruppoeng@example.com
:# namespaces/eng/eng-rolebinding.yaml kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: eng-admin subjects: - kind: Group name: eng@example.com apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: eng-viewer apiGroup: rbac.authorization.k8s.io
Sposta la directory dello spazio dei nomi
gamestore
danamespaces/
al Directorynamespaces/eng/
:mv namespaces/gamestore /namespaces/eng/
Esegui il commit di tutte le modifiche ed eseguine il push sul repository remoto.
Config Sync rileva la modifica e applica i nuovi ruoli e RoleBinding a
lo spazio dei nomi gamestore
su tutti i cluster registrati.
Per rimuovere le configurazioni ed eliminare lo spazio dei nomi gamestore
dai cluster registrati,
puoi creare un nuovo commit che rimuove l'intero abstract eng
ed eseguirne il push nel repository remoto.
Limita i cluster interessati da una configurazione
Normalmente, Config Sync applica una configurazione a ogni cluster registrato. Tuttavia, se
La configurazione è all'interno della sottodirectory namespaces/
di una gerarchia
repository Git, prima Config Sync
crea lo spazio dei nomi all'interno di ogni cluster e applica tutte le configurazioni ereditate
a questo spazio dei nomi. Per limitare i cluster interessati da una determinata configurazione in base ai quali
le etichette di ciascun cluster, utilizza un ClusterSelector. Per saperne di più, vedi
Utilizzare ClusterSelector.
Limita gli spazi dei nomi interessati da una configurazione
Per limitare gli spazi dei nomi interessati da una configurazione, usa un NamespaceSelector. R NamespaceSelector è un tipo speciale di configurazione che utilizza Kubernetes labelSelectors. Puoi dichiarare NamespaceSelectors in combinazione con le configurazioni con ambito a livello di spazio dei nomi repository non strutturato o un repository gerarchico per limitare quali spazi dei nomi possono ereditare la configurazione. I selettori dello spazio dei nomi sono simili, non identiche, ClusterSelectors. NamespaceSelector restringe il pool di spazi dei nomi a cui si applica una configurazione.
Per dichiarare un NamespaceSelector, aggiungi metadata.namespace
o
Annotazione NamespaceSelector
. La dichiarazione di entrambe le annotazioni non è valida. Se
le risorse con ambito dello spazio dei nomi non dichiarano metadata.namespace
o
NamespaceSelector
, Config Sync utilizza l'annotazione
"predefinito" del cluster.
NamespaceSelector nei repository non strutturati
Un repository non strutturato non deve dichiarare
tutti gli spazi dei nomi per gli oggetti con ambito a livello di spazio dei nomi nel repository. Un oggetto può
definisci un metadata.namespace
senza avere un oggetto dello spazio dei nomi corrispondente in un
repository non strutturato. Se lo spazio dei nomi esiste già nel cluster,
Config Sync crea l'oggetto all'interno dello spazio dei nomi. Se
non esiste ancora nel cluster, Config Sync crea
nello spazio dei nomi in modo implicito.
Prima di creare un repository non strutturato con oggetti
utilizzate in precedenza in un repository gerarchico,
NamespaceSelectors
non si applicano alle risorse aggiuntive.
Quando rimuovi gli oggetti con ambito dello spazio dei nomi da un repository non strutturato, Config Sync elimina questi oggetti, ma non ne rimuove nessuno che potrebbero essere stati creati implicitamente per questi oggetti. Questo comportamento perché Config Sync non è in grado di dedurre quando è sicuro eliminare creato implicitamente, quindi viene sempre lasciato nel cluster.
Modalità del selettore dello spazio dei nomi
In un repository non strutturato, gli oggetti che dichiarano l'istruzione NamespaceSelector
vengono applicate a tutti gli spazi dei nomi che soddisfano le condizioni di un
NamespaceSelector
. Nelle versioni di Config Sync precedenti alla 1.17.0, la classe
L'annotazione NamespaceSelector
si applica solo agli spazi dei nomi corrispondenti che sono
dichiarate in modo statico nella fonte dei dati. Nella versione 1.17.0 e successive,
L'oggetto NamespaceSelector
supporta la modalità dinamica impostando spec.mode
su
dynamic
. In modalità dinamica, la selezione si estende sia alle risorse dichiarate in modo statico
degli spazi dei nomi e di quelli presenti in modo dinamico nel cluster. Spazi dei nomi scelti
esistono già in modo dinamico nel cluster e pertanto non sono gestiti
Config Sync. La modalità predefinita è static
.
NamespaceSelectors in repository gerarchici
In un repository gerarchico, gli oggetti che dichiarano l'elemento NamespaceSelector
le annotazioni vengono applicate agli spazi dei nomi che ereditano una determinata configurazione
uno spazio dei nomi astratto, indipendentemente dalla struttura di directory dell'elemento namespaces/
. Un ClusterSelector restringe il pool di cluster a cui si applica una configurazione,
se la configurazione ha come target un oggetto con ambito cluster o spazio dei nomi.
Posizione del selettore dello spazio dei nomi
In un repository non strutturato, puoi inserire NamespaceSelectors in qualsiasi directory o sottodirectory.
In un repository gerarchico, puoi inserire NamespaceSelectors in tutte le directory dello spazio dei nomi astratto, ma non in namespace.
La seguente architettura del repository di esempio mostra valori validi e non validi posizioni per NamespaceSelector se utilizzi un repository gerarchico:
namespace-inheritance
...
├── namespaces
│ ├── eng
│ │ ├── gamestore
│ │ │ ├── namespace.yaml
│ │ │ └── ns_selector.yaml # invalid
│ │ └── ns_selector.yaml # valid
│ ├── ns_selector.yaml # valid
│ ├── rnd
│ │ ├── incubator-1
│ │ │ ├── namespace.yaml
│ │ │ └── ns_selector.yaml # invalid
│ │ └── ns_selector.yaml # valid
Poiché le directory namespaces
, eng
e rnd
rappresentano elementi
puoi inserire un selettore al loro interno. Tuttavia, poiché gamestore
e
incubator-1
directory rappresentano gli spazi dei nomi effettivi,
NamespaceSelector al loro interno.
Esempi di NamespaceSelector
Puoi utilizzare un NamespaceSelector
con selettori di etichette per includere o escludere
spazi dei nomi. Kubernetes supporta
selettori basati sull'uguaglianza e sugli insiemi.
Puoi combinare entrambi i tipi di selettori per perfezionare ulteriormente gli spazi dei nomi da
selezionato.
Selettore di etichette basato sull'uguaglianza
La seguente configurazione crea uno spazio dei nomi denominato gamestore-selector
. Se
un'altra configurazione fa riferimento a questo NamespaceSelector, che può essere
applicata agli oggetti negli spazi dei nomi con l'etichetta app: gamestore
.
kind: NamespaceSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: gamestore-selector
spec:
selector:
matchLabels:
app: gamestore
Per fare riferimento a uno spazio dei nomi in una configurazione, devi impostare
configmanagement.gke.io/namespace-selector
al nome del
Selettore spazio dei nomi.
Un NamespaceSelector non ha alcun effetto finché non vi si faccia riferimento in un'altra configurazione.
Se lo spazio dei nomi gamestore-selector
si trova nella stessa gerarchia del
dopo ResourceQuota, quota
, la ResourceQuota viene creata soltanto
spazi dei nomi con l'etichetta app: gamestore
:
kind: ResourceQuota
apiVersion: v1
metadata:
name: quota
annotations:
configmanagement.gke.io/namespace-selector: gamestore-selector
spec:
hard:
pods: "1"
cpu: "200m"
memory: "200Mi"
Riassumendo, l'utilizzo di NamespaceSelector è un processo in tre passaggi:
- Aggiungi etichette agli spazi dei nomi.
- Creare una configurazione dello spazio dei nomi.
- Fare riferimento all'oggetto NamespaceSelector in un'altra configurazione.
Selettore di etichette in base all'impostazione
Puoi utilizzare i selettori dello spazio dei nomi per escludere determinati spazi dei nomi dall'ereditarietà di una risorsa nell'albero utilizzando selettori di etichette basati su set.
In questo esempio, quando ResourceQuota
è annotato con NamespaceSelector
impostando l'annotazione configmanagement.gke.io/namespace-selector: excludes-exempt-namespaces
,
ResourceQuota
viene creato in ogni spazio dei nomi, ad eccezione di quelli che sono
con etichetta quota-exempt: exempt
:
kind: NamespaceSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: excludes-exempt-namespaces
spec:
selector:
matchExpressions:
- key: quota-exempt
operator: NotIn
values:
- exempt
Integrazione con gli ambiti dei team e gli spazi dei nomi del parco risorse
Gli spazi dei nomi del parco risorse creati in Google Cloud hanno automaticamente l'etichetta
fleet.gke.io/fleet-scope: your-scope
. Tutti gli spazi dei nomi hanno anche
Etichetta kubernetes.io/metadata.name: your-namespace
. Puoi usare queste impostazioni predefinite
etichette per configurare NamespaceSelector
per selezionare gli spazi dei nomi del parco risorse.
Disabilita l'ereditarietà per un tipo di oggetto
Gli oggetti Kubernetes HierarchyConfig non sono supportati repository non strutturati. L'esempio seguente si applica solo repository gerarchici.
Puoi disattivare selettivamente l'ereditarietà per qualsiasi configurazione impostando il valore
hierarchyMode
su none
. I valori HierarchyConfig sono archiviati nell'system/
del repository. Questo esempio disabilita l'ereditarietà per RoleBinding.
# system/hierarchy-config.yaml
kind: HierarchyConfig
apiVersion: configmanagement.gke.io/v1
metadata:
name: rbac
spec:
resources:
# Configure Role to only be allowed in leaf namespaces.
- group: rbac.authorization.k8s.io
kinds: [ "RoleBinding" ]
hierarchyMode: none
Passaggi successivi
- Scopri di più sulla configurazione di cluster e oggetti con ambito cluster