Panoramica
In questo lab creerai spazi dei nomi all'interno di un cluster GKE, poi utilizzerai il controllo degli accessi basato su ruoli per consentire agli utenti non amministratori di lavorare con i pod in uno spazio dei nomi specifico.
Obiettivi
In questo lab imparerai a:
- Creare spazi dei nomi per consentire agli utenti di controllare l'accesso alle risorse del cluster
- Creare ruoli e RoleBinding per controllare l'accesso all'interno di uno spazio dei nomi
Nota: per questo lab, è stato eseguito il provisioning di due nomi utente disponibili nella finestra di dialogo Dettagli connessione. Nel lab faremo riferimento a questi account come Nomeutente 1 e Nomeutente 2.
Attività 1: crea spazi dei nomi per consentire agli utenti di accedere alle risorse del cluster
Accedi alla console Google Cloud usando le credenziali del primo utente
- In una finestra di navigazione in incognito, accedi a Google Cloud Console come di consueto con l'account Nomeutente 1 fornito in Qwiklabs. Tieni presente che entrambi i nomi utente utilizzano la stessa password.
- Nella barra del titolo della console Google Cloud, fai clic su Attiva Cloud Shell (
).
- Quando richiesto, fai clic su Continua.
Non è necessario attendere l'avvio di Cloud Shell. Puoi passare immediatamente all'attività successiva.
Nota: Nomeutente 2 attualmente ha accesso al progetto, ma ha solo il ruolo Visualizzatore, che rende visibili tutte le risorse del progetto in modalità di sola lettura.
Accedi alla console Google Cloud usando le credenziali del secondo utente
- Apri un'altra scheda nella finestra di navigazione in incognito.
- Vai alla pagina console.cloud.google.com.
- Fai clic sull'icona dell'utente nell'angolo in alto a destra dello schermo, quindi fai clic su Aggiungi account.
- Accedi alla console Google Cloud con l'account Nomeutente 2 fornito. Tieni sempre presente che entrambi i nomi utente utilizzano la stessa password.
- Nella barra del titolo della console Google Cloud, fai clic su Attiva Cloud Shell (
).
- Quando richiesto, fai clic su Continua.
Non è necessario attendere l'avvio di Cloud Shell. Puoi passare immediatamente all'attività successiva.
Connettiti al cluster GKE del lab
- Torna alla scheda della console Google Cloud di Nomeutente 1.
Nota: assicurati di essere nella scheda della console Google Cloud di Nomeutente 1.
- In Cloud Shell, digita questo comando per impostare la variabile di ambiente per il nome della zona e del cluster.
export my_zone={{{ project_0.default_zone | ZONE }}}
export my_cluster=standard-cluster-1
- Configura il completamento per lo strumento a riga di comando kubectl.
source <(kubectl completion bash)
- Configura l'accesso al tuo cluster per kubectl:
gcloud container clusters get-credentials $my_cluster --zone $my_zone
- In Cloud Shell, inserisci questo comando per clonare il repository del lab nella sessione di Cloud Shell del lab:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
- Crea un soft link da utilizzare come scorciatoia alla directory di lavoro:
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
- Passa alla directory che contiene i file di esempio per questo lab:
cd ~/ak8s/RBAC/
Crea uno spazio dei nomi
È stato creato per te un file manifest denominato my-namespace.yaml
, che crea un nuovo spazio dei nomi chiamato production
.
apiVersion: v1
kind: Namespace
metadata:
name: production
- Elenca gli spazi dei nomi attualmente presenti nel cluster utilizzando questo comando:
kubectl get namespaces
Output:
NAME STATUS AGE
default Active 17m
kube-node-lease Active 17m
kube-public Active 17m
kube-system Active 17m
- In Cloud Shell, esegui il comando seguente per creare il nuovo spazio dei nomi:
kubectl create -f ./my-namespace.yaml
- Utilizza il comando seguente per verificare se lo spazio dei nomi è stato creato:
kubectl get namespaces
Output:
NAME STATUS AGE
default Active 6m
kube-node-lease Active 6m
kube-public Active 6m
kube-system Active 6m
production Active 4s
Il nuovo spazio dei nomi verrà visualizzato in fondo all'elenco.
- Puoi visualizzare i dettagli di uno spazio dei nomi esistente eseguendo il questo comando:
kubectl describe namespaces production
Output:
Name: production
Labels:
Annotations:
Status: Active
Resource Quotas
Name: gke-resource-quotas
Resource Used Hard
-------- --- ---
count/ingresses.extensions 0 100
count/jobs.batch 0 5k
pods 0 1500
services 0 500
No LimitRange resource.
Crea una risorsa in uno spazio dei nomi
Se non specifichi lo spazio dei nomi di un pod, verrà utilizzato lo spazio "default". In questa attività dovrai specificare la posizione dello spazio dei nomi appena creato durante la creazione di un nuovo pod. È stato creato per te un semplice file manifest denominato my-pod.yaml
, che crea un pod contenente un container nginx.
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
- In Cloud Shell, esegui il comando seguente per creare la risorsa nello spazio dei nomi chiamato
production
:
kubectl apply -f ./my-pod.yaml --namespace=production
In alternativa, lo spazio dei nomi può anche essere specificato nel file yaml. In tal caso, è necessario inserire il campo namespace: production
nella sezione metadata:.
Ad esempio:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx
namespace: production
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
- Prova a utilizzare questo comando per visualizzare il pod:
kubectl get pods
Output:
No resources found in default namespace.
Il pod non è visualizzato perché kubectl ha controllato lo spazio dei nomi default invece dello spazio dei nomi creato da te.
- Esegui di nuovo il comando, specificando questa volta il nuovo spazio dei nomi:
kubectl get pods --namespace=production
Output:
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 20s
A questo punto dovresti vedere il pod che hai appena creato.
Fai clic su Controlla i miei progressi per verificare l'obiettivo.
Crea lo spazio dei nomi e il pod
Attività 2: informazioni su ruoli e RoleBinding
In questa attività creerai un ruolo personalizzato di esempio, quindi creerai un RoleBinding che assegna a Nomeutente 2 il ruolo di editor nello spazio dei nomi production.
Il ruolo è definito nel file pod-reader-role.yaml
che ti è stato fornito. Questo file manifest definisce un ruolo denominato pod-reader
che fornisce le autorizzazioni di creazione, recupero, elenco e visualizzazione per gli oggetti Pod nello spazio dei nomi production
. Tieni presente che questo ruolo non può eliminare pod.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: production
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["create", "get", "list", "watch"]
Crea un ruolo personalizzato
Per creare un ruolo, il tuo account deve disporre delle autorizzazioni concesse nel ruolo da assegnare. Per gli amministratori di cluster, questa operazione può essere eseguita facilmente creando la seguente associazione dei ruoli per concedere al tuo account utente il ruolo cluster-admin.
- Per concedere i privilegi di amministratore di cluster all'account Nomeutente 1, esegui il comando seguente, sostituendo
[EMAIL_NOMEUTENTE_1]
con l'indirizzo email dell'account Nomeutente 1:
kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user [EMAIL_NOMEUTENTE_1]
Esempio di output:
kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user gcpstaging28307_student@qwiklabs.net
- In Cloud Shell, esegui il comando seguente per creare il ruolo:
kubectl apply -f pod-reader-role.yaml
- Per elencare i ruoli e verificare che il nuovo ruolo sia stato creato, esegui il comando seguente:
kubectl get roles --namespace production
Output:
NAME AGE
pod-reader 3m
Crea un RoleBinding
Il ruolo viene utilizzato per assegnare privilegi, ma da solo non esegue alcuna operazione. Il ruolo deve essere associato a un utente e a un oggetto tramite un oggetto RoleBinding.
Il file manifest username2-editor-binding.yaml
crea un oggetto RoleBinding chiamato username2-editor
che associa il secondo utente del lab al ruolo pod-reader
creato in precedenza. Questo ruolo può creare e visualizzare pod, ma non può eliminarli.
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: username2-editor
namespace: production
subjects:
- kind: User
name: [EMAIL_NOMEUTENTE_2]
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
Questo file contiene un segnaposto, [EMAIL_NOMEUTENTE_2]
, che devi sostituire con l'indirizzo email di Nomeutente 2 prima che possa essere utilizzato.
- In Cloud Shell, crea una variabile di ambiente che contenga l'indirizzo email completo di Nomeutente 2:
export USER2=[EMAIL_NOMEUTENTE_2]
Esempio di output:
export USER2=gcpstaginguser68_student@qwiklabs.net
- In Cloud Shell, utilizza
sed
per sostituire il segnaposto nel file con il valore della variabile di ambiente:
sed -i "s/\[EMAIL_NOMEUTENTE_2\]/${USER2}/" username2-editor-binding.yaml
- In Cloud Shell, esegui il comando seguente per verificare che la modifica sia stata apportata correttamente:
cat username2-editor-binding.yaml
Ora la sezione subjects dovrebbe essere simile alla seguente.
Esempio di output:
subjects:
- kind: User
name: gcpstaginguser68_student@qwiklabs.net
apiGroup: rbac.authorization.k8s.io
Applicherai questo RoleBinding in un secondo momento.
Controlla l'accesso
Ora verificherai se Nomeutente 2 può creare un pod nello spazio dei nomi production utilizzando Nomeutente 2 per creare un pod con il file manifest production-pod.yaml
. Il file manifest esegue il deployment di un pod semplice con un singolo container nginx.
apiVersion: v1
kind: Pod
metadata:
name: production-pod
labels:
name: production-pod
namespace: production
spec:
containers:
- name: production-pod
image: nginx
ports:
- containerPort: 8080
Poiché si tratta di un account utente separato, è necessario preparare una seconda volta l'ambiente Cloud Shell in modo che tu possa accedere al cluster e ai file di esempio del repository del lab.
- Torna alla scheda della console Google Cloud di Nomeutente 2.
Nota: assicurati di essere nella scheda della console Google Cloud di Nomeutente 2.
- Nella sessione di Cloud Shell di Nomeutente 2, digita questo comando per impostare la variabile di ambiente per il nome della zona e del cluster:
export my_zone={{{ project_0.default_zone | ZONE }}}
export my_cluster=standard-cluster-1
- Configura il completamento per lo strumento a riga di comando kubectl.
source <(kubectl completion bash)
- Configura l'accesso al tuo cluster per kubectl:
gcloud container clusters get-credentials $my_cluster --zone $my_zone
- In Cloud Shell, inserisci questo comando per clonare il repository del lab nella sessione di Cloud Shell del lab:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
- Crea un soft link da utilizzare come scorciatoia alla directory di lavoro:
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
- Passa alla directory che contiene i file di esempio per questo lab:
cd ~/ak8s/RBAC/
- Verifica se Nomeutente 2 riesce a vedere lo spazio dei nomi production utilizzando il seguente comando:
kubectl get namespaces
Output:
NAME STATUS AGE
default Active 29m
kube-node-lease Active 29m
kube-public Active 29m
kube-system Active 29m
production Active 23m
Lo spazio dei nomi production viene visualizzato in fondo all'elenco, quindi possiamo continuare.
- In Cloud Shell, esegui il comando seguente per creare la risorsa nello spazio dei nomi chiamato production:
kubectl apply -f ./production-pod.yaml
Questo comando non riuscirà, con l'indicazione che Nomeutente 2 non dispone dell'autorizzazione corretta per creare pod. A questo punto, Nomeutente 2 dispone solo delle autorizzazioni di visualizzazione con le quali ha iniziato il lab, perché non hai ancora associato alcun altro ruolo all'account. Ora cambierai questa situazione.
- Torna alla scheda della console Google Cloud di Nomeutente 1.
Nota: assicurati di essere nella scheda della console Google Cloud di Nomeutente 1.
- Nella sessione di Cloud Shell di Nomeutente 1, esegui questo comando per creare il RoleBinding che concede a Nomeutente 2 il ruolo
pod-reader
, che include l'autorizzazione per creare pod nello spazio dei nomi production
:
kubectl apply -f username2-editor-binding.yaml
- Nella sessione di Cloud Shell di Nomeutente 1, esegui il comando seguente per cercare la nuova associazione dei ruoli:
kubectl get rolebinding
Output:
No resources found in default namespace.
L'associazione dei ruoli non compare perché kubectl ha visualizzato i risultati relativi allo spazio dei nomi default.
- Nella sessione di Cloud Shell di Nomeutente 1, esegui il seguente comando specificando lo spazio dei nomi production:
kubectl get rolebinding --namespace production
Output:
NAME AGE
username2-editor 23s
- Torna alla scheda della console Google Cloud di Nomeutente 2.
Nota: assicurati di essere nella scheda della console Google Cloud di Nomeutente 2.
- Nella sessione di Cloud Shell di Nomeutente 2, esegui questo comando per creare la risorsa nello spazio dei nomi chiamato production:
kubectl apply -f ./production-pod.yaml
Questa operazione dovrebbe avere esito positivo, perché ora Nomeutente 2 dispone dell'autorizzazione di creazione di pod nello spazio dei nomi production.
- Verifica che il deployment del pod sia stato eseguito correttamente nello spazio dei nomi production utilizzando il comando seguente:
kubectl get pods --namespace production
Output:
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 16m
production-pod 1/1 Running 0 20s
Dovresti vedere il pod che hai appena creato.
- Verifica che solo le autorizzazioni RBAC specifiche concesse dal ruolo pod-reader siano attive per Nomeutente 2 provando a eliminare production-pod.
kubectl delete pod production-pod --namespace production
Questa operazione non riuscirà perché Nomeutente 2 non dispone dell'autorizzazione di eliminazione dei pod.
Fai clic su Controlla i miei progressi per verificare l'obiettivo.
Ruoli e associazioni dei ruoli
Termina il lab
Una volta completato il lab, fai clic su Termina lab. Google Cloud Skills Boost rimuove le risorse che hai utilizzato ed esegue la pulizia dell'account.
Avrai la possibilità di inserire una valutazione in merito alla tua esperienza. Seleziona il numero di stelle applicabile, inserisci un commento, quindi fai clic su Invia.
Il numero di stelle corrisponde alle seguenti valutazioni:
- 1 stella = molto insoddisfatto
- 2 stelle = insoddisfatto
- 3 stelle = esperienza neutra
- 4 stelle = soddisfatto
- 5 stelle = molto soddisfatto
Se non vuoi lasciare un feedback, chiudi la finestra di dialogo.
Per feedback, suggerimenti o correzioni, utilizza la scheda Assistenza.
Copyright 2020 Google LLC Tutti i diritti riservati. Google e il logo Google sono marchi di Google LLC. Tutti gli altri nomi di società e prodotti sono marchi delle rispettive società a cui sono associati.