Questa pagina spiega come utilizzare Config Sync per gestire gli spazi dei nomi e scegliere gli oggetti che Config Sync sincronizza con gli spazi dei nomi.
Gli oggetti risorsa Kubernetes possono avere ambito cluster o spazio dei nomi, a seconda del tipo di risorsa. Selezioni il cluster configurando il client
in modo che comunichi con un cluster specifico. Seleziona lo spazio dei nomi configurando il
campo metadata.namespace
nel manifest dell'oggetto. Config Sync aggiunge funzionalità aggiuntive: selettori di cluster e selettori di spazi dei nomi, che consentono di perfezionare ulteriormente gli oggetti sincronizzati.
Prima di leggere questa pagina, dovresti già avere familiarità con i seguenti concetti di Kubernetes:
Informazioni sull'ambito degli oggetti con Config Sync
Per impostazione predefinita, quando installi Config Sync su un cluster o come impostazione predefinita del parco progetti, Config Sync sincronizza tutti gli oggetti Kubernetes nella tua fonte attendibile con i cluster in cui è installato Config Sync o con tutti i cluster di un parco progetti. Tuttavia, limitando l'ambito degli oggetti a un cluster o a uno spazio dei nomi, puoi controllare quali oggetti vengono sincronizzati con un cluster o uno spazio dei nomi.
Config Sync offre i seguenti metodi per definire l'ambito degli oggetti:
- Configurare oggetti con ambito cluster con un selettore di cluster
- Configurare oggetti con ambito cluster con etichette dei pacchetti della flotta (anteprima)
- Configura oggetti con ambito di spazio dei nomi con un selettore di spazio dei nomi (questa pagina)
Utilizza spazi dei nomi espliciti
Ti consigliamo di utilizzare la dichiarazione esplicita dello spazio dei nomi quando configuri Config Sync, perché ti consente di gestire i metadati dello spazio dei nomi ed eliminare gli spazi dei nomi in un secondo momento, se necessario.
L'impostazione predefinita è implicit
, ma puoi modificare la strategia dello spazio dei nomi nell'oggetto
RootSync
o RepoSync
impostando il campo namespaceStrategy
su
explicit
. Per saperne di più, consulta la
strategia per gli spazi dei nomi.
Informazioni sui selettori dello spazio dei nomi
I selettori di spazi dei nomi sono una funzionalità di Config Sync che consente di eseguire il deployment di oggetti risorsa altrimenti identici in più spazi dei nomi.
L'utilizzo dei selettori di spazi dei nomi è simile all'utilizzo dei
selettori di etichette Kubernetes
per mappare un servizio a un insieme di pod, ma con un livello di indirezione aggiuntivo.
Poiché non puoi aggiungere campi personalizzati ai tipi di risorse esistenti, devi definire
il selettore in un oggetto NamespaceSelector
. Poi, fai riferimento al selettore
per nome in un'annotazione sugli oggetti che vuoi utilizzare.
Per utilizzare i selettori di spazi dei nomi:
- Aggiungi o scegli un'etichetta esistente negli spazi dei nomi in cui vuoi eseguire il deployment.
- Definisci un oggetto risorsa
NamespaceSelector
nella tua fonte attendibile. Config Sync non sincronizza gli oggettiNamespaceSelector
con il tuo cluster. - Per ogni oggetto che vuoi sincronizzare con uno o più spazi dei nomi, modifica la configurazione dell'oggetto per rimuovere il campo
metadata.namespace
e aggiungere l'annotazioneconfigmanagement.gke.io/namespace-selector
con un valore che corrisponda ametadata.name
diNamespaceSelector
.
Gli esempi nella sezione successiva forniscono maggiori dettagli su come definire
gli oggetti NamespaceSelector
e annotare altri oggetti per utilizzare NamespaceSelector
.
Prima di iniziare
- Installa Config Sync.
- Crea o accedi a una fonte di riferimento in cui archiviare i file di configurazione.
- Se non hai già uno o più spazi dei nomi, crea gli spazi dei nomi a cui vuoi limitare l'ambito delle risorse. Puoi creare lo spazio dei nomi direttamente nel cluster o nella tua fonte attendibile.
Utilizza i selettori di spazi dei nomi
I selettori dello spazio dei nomi sono definiti con requisiti basati sull'uguaglianza o requisiti basati sull'insieme. Puoi combinare più requisiti.
Esempio di selettore di etichette basato sull'uguaglianza
L'esempio seguente mostra come utilizzare i selettori basati sull'uguaglianza per selezionare gli spazi dei nomi a cui si applica una configurazione:
Aggiungi un'etichetta a uno o più spazi dei nomi:
kubectl label namespace NAMESPACE app=gamestore
Sostituisci
NAMESPACE
con il nome del tuo spazio dei nomi.Esegui questo comando per ogni spazio dei nomi a cui vuoi aggiungere un'etichetta.
Crea un selettore di spazi dei nomi denominato
gamestore-selector
.kind: NamespaceSelector apiVersion: configmanagement.gke.io/v1 metadata: name: gamestore-selector spec: selector: matchLabels: app: gamestore
Se la configurazione di un altro oggetto fa riferimento a questo selettore di spazi dei nomi, può essere applicata solo agli oggetti negli spazi dei nomi che hanno l'etichetta
app: gamestore
.Un selettore dello spazio dei nomi non ha effetto finché non viene fatto riferimento a un'altra configurazione. Crea una quota di oggetti di esempio che faccia riferimento al selettore dello spazio dei nomi:
kind: ResourceQuota apiVersion: v1 metadata: name: quota annotations: configmanagement.gke.io/namespace-selector: gamestore-selector spec: hard: pods: "1" cpu: "200m" memory: "200Mi"
La quota di risorse viene creata solo negli spazi dei nomi con l'etichetta
app: gamestore
.
Esempio di selettore di etichette basato su set
L'esempio seguente mostra come utilizzare i selettori basati su set per esentare gli spazi dei nomi dall'ereditarietà degli oggetti:
Aggiungi un'etichetta a uno o più spazi dei nomi:
kubectl label namespace NAMESPACE quota-exempt=exempt
Sostituisci
NAMESPACE
con il nome del tuo spazio dei nomi.Esegui questo comando per ogni spazio dei nomi a cui vuoi aggiungere un'etichetta.
Crea un selettore di spazi dei nomi denominato
exclude-exempt-namespaces
:kind: NamespaceSelector apiVersion: configmanagement.gke.io/v1 metadata: name: excludes-exempt-namespaces spec: selector: matchExpressions: - key: quota-exempt operator: NotIn values: - exempt
Se la configurazione di un altro oggetto fa riferimento a questo selettore dello spazio dei nomi, questa configurazione viene applicata a tutti gli spazi dei nomi tranne quelli con la coppia chiave-valore
quota-exempt: exempt
.Un selettore dello spazio dei nomi non ha effetto finché non viene fatto riferimento a un'altra configurazione. Crea una quota di oggetti di esempio che faccia riferimento al selettore dello spazio dei nomi:
kind: ResourceQuota apiVersion: v1 metadata: name: quota annotations: configmanagement.gke.io/namespace-selector: exclude-exempt-namespaces spec: hard: pods: "1" cpu: "200m" memory: "200Mi"
La quota di risorse viene creata in tutti gli spazi dei nomi, ad eccezione di quelli che hanno la coppia chiave-valore
quota-exempt: exempt
.
Integrazione con gli ambiti del 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 l'etichetta Kubernetes
kubernetes.io/metadata.name: your-namespace
. Puoi utilizzare queste etichette
predefinite per configurare un selettore dello spazio dei nomi per selezionare gli spazi dei nomi del parco risorse.
Il tutorial sul tenancy del parco risorse spiega in modo più dettagliato come utilizzare i selettori di spazi dei nomi con i parchi risorse e gli ambiti dei team per gestire in modo selettivo gli oggetti per team diversi.
Oggetti con ambito di spazio dei nomi con modalità gerarchica
Sebbene i repository non strutturati siano consigliati per la maggior parte dei casi d'uso, puoi utilizzare i selettori di spazi dei nomi per definire l'ambito degli oggetti con un repository gerarchico. L'utilizzo dei selettori dello spazio dei nomi è lo stesso, ma esistono limitazioni e requisiti aggiuntivi per l'organizzazione della configurazione dello spazio dei nomi nella fonte attendibile.
Limitazioni
Quando utilizzi una configurazione del selettore dello spazio dei nomi con un repository gerarchico, tieni presente le seguenti limitazioni e requisiti:
- Devi archiviare tutti i file di configurazione per gli spazi dei nomi e gli oggetti con ambito spazio dei nomi all'interno della directory
namespaces/
del repository gerarchico e delle relative directory discendenti. - Devi specificare esplicitamente una configurazione dello spazio dei nomi nella
sottodirectory
namespaces/NAMESPACE
, doveNAMESPACE
corrisponde al nome dello spazio dei nomi. Tutti gli altri oggetti con ambito spazio dei nomi devono essere archiviati nella stessa sottodirectory. Se manca una configurazione dello spazio dei nomi, Config Sync restituisce un errore KNV1044. - Le risorse che fanno riferimento a un selettore di spazi dei nomi
vengono applicate agli spazi dei nomi che ereditano una determinata configurazione da uno
spazio dei nomi astratto, indipendentemente dalla struttura di directory della directory
namespaces/
.
Posizione del selettore dello spazio dei nomi
In un repository gerarchico, puoi inserire una configurazione del selettore dello spazio dei nomi in qualsiasi directory spazio dei nomi astratto, ma non in una directory spazio dei nomi.
La seguente architettura del repository di esempio mostra posizioni valide e non valide per i selettori di spazi dei nomi:
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 spazi dei nomi astratti, puoi inserirvi un selettore. Tuttavia, poiché le directory gamestore
e
incubator-1
rappresentano spazi dei nomi effettivi, non puoi inserirvi un
selettore di spazi dei nomi.
Configura uno spazio dei nomi astratto
Con un repository gerarchico, puoi utilizzare facoltativamente spazi dei nomi astratti.
L'esempio seguente mostra come spostare la directory dello spazio dei nomi in uno spazio dei nomi astratto che contiene configurazioni aggiuntive ereditate dallo spazio dei nomi:
Nel repository, crea una directory dello spazio dei nomi astratto. La directory dello spazio dei nomi astratto non contiene configurazioni per gli spazi dei nomi, ma le directory dello spazio dei nomi discendenti contengono configurazioni.
Nella directory dello spazio dei nomi astratto che hai creato, crea una configurazione per un ruolo che concede le autorizzazioni
get
elist
su tutti gli oggetti in qualsiasi spazio dei nomi che alla fine eredita il ruolo:apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: ROLE_NAME rules: - apiGroups: [""] resources: ["*"] verbs: ["get", "list"]
Sostituisci
ROLE_NAME
con il nome del ruolo.Crea una configurazione per un'associazione di ruoli che associa il ruolo a un gruppo email:
kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: ROLE_NAME subjects: - kind: Group name: group@example.com apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: ROLEBINDING_NAME apiGroup: rbac.authorization.k8s.io
Sostituisci
ROLEBINDING_NAME
con il nome del ruolo.Sposta la configurazione dello spazio dei nomi che hai creato nella sezione precedente dalla directory
namespaces/
alla directory dello spazio dei nomi astratto che hai creato in questa sezione.
Disattivare l'ereditarietà per gli oggetti
Puoi disattivare selettivamente l'eredità per qualsiasi configurazione impostando il
campo hierarchyMode
su none
. HierarchyConfigs vengono archiviati nella directory system/
del repository. Questo esempio disattiva l'ereditarietà per le associazioni di ruoli:
# 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