Présentation
Dans cet atelier, vous allez créer des espaces de noms dans un cluster GKE. Vous utiliserez ensuite le contrôle des accès basé sur les rôles pour autoriser un non-administrateur à utiliser des pods dans un espace de noms spécifique.
Objectifs
Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :
- Créer des espaces de noms afin de contrôler l'accès des utilisateurs aux ressources du cluster
- Créer des rôles et des liaisons de rôles pour contrôler les accès dans un espace de noms
Remarque : Dans cet atelier, vous disposez de deux noms d'utilisateur, indiqués dans la boîte de dialogue "Détails de connexion". Nous appellerons ces comptes Username 1 et Username 2.
Tâche 1 : Créer des espaces de noms pour que les utilisateurs puissent accéder aux ressources du cluster
Se connecter à la console Google Cloud en tant que premier utilisateur
- Ouvrez une fenêtre de navigation privée et connectez-vous à la console Google Cloud comme d'habitude avec les identifiants de Username 1 fournis dans Qwiklabs. Remarque : Le même mot de passe est associé aux deux noms d'utilisateur.
- Dans la barre de titre de la console Google Cloud, cliquez sur Activer Cloud Shell (
).
- Lorsque vous y êtes invité, cliquez sur Continuer.
Vous pouvez directement passer à la tâche suivante sans attendre le démarrage de Cloud Shell.
Remarque : Le compte Username 2 peut actuellement accéder au projet, mais uniquement avec le rôle Lecteur. Toutes les ressources du projet lui sont donc accessibles, mais en lecture seule.
Se connecter à la console Google Cloud en tant que deuxième utilisateur
- Ouvrez un nouvel onglet dans la fenêtre de navigation privée.
- Accédez à console.cloud.google.com.
- Cliquez sur l'icône d'utilisateur située en haut à droite de l'écran, puis sur Ajouter un compte.
- Connectez-vous à la console Google Cloud avec le compte Username 2 fourni. Rappelez-vous que le même mot de passe est associé aux deux noms d'utilisateur.
- Dans la barre de titre de la console Google Cloud, cliquez sur Activer Cloud Shell (
).
- Lorsque vous y êtes invité, cliquez sur Continuer.
Vous pouvez directement passer à la tâche suivante sans attendre le démarrage de Cloud Shell.
Se connecter au cluster GKE de l'atelier
- Revenez à l'onglet de la console Google Cloud du compte Username 1.
Remarque : Assurez-vous que vous vous trouvez bien dans l'onglet Username 1 de la console Google Cloud.
- Dans Cloud Shell, définissez les variables d'environnement correspondant à la zone et au nom du cluster en saisissant la commande suivante :
export my_zone={{{ project_0.default_zone | ZONE }}}
export my_cluster=standard-cluster-1
- Configurez la complétion par tabulation dans l'outil de ligne de commande kubectl :
source <(kubectl completion bash)
- Configurez l'accès à votre cluster pour kubectl :
gcloud container clusters get-credentials $my_cluster --zone $my_zone
- Dans Cloud Shell, saisissez la commande suivante pour cloner le dépôt de l'atelier dans l'environnement Cloud Shell de l'atelier :
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
- Créez un lien symbolique qui servira de raccourci vers le répertoire de travail :
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
- Passez au répertoire qui contient les exemples de fichiers de l'atelier :
cd ~/ak8s/RBAC/
Créer un espace de noms
Nous avons généré pour vous un fichier manifeste nommé my-namespace.yaml
, que vous utiliserez pour créer un espace de noms nommé production
.
apiVersion: v1
kind: Namespace
metadata:
name: production
- Saisissez la commande suivante pour lister les espaces de noms actuellement dans le cluster :
kubectl get namespaces
Résultat :
NAME STATUS AGE
default Active 17m
kube-node-lease Active 17m
kube-public Active 17m
kube-system Active 17m
- Exécutez la commande suivante dans Cloud Shell pour créer l'espace de noms :
kubectl create -f ./my-namespace.yaml
- Vérifiez que votre espace de noms a bien été créé à l'aide de la commande suivante :
kubectl get namespaces
Résultat :
NAME STATUS AGE
default Active 6m
kube-node-lease Active 6m
kube-public Active 6m
kube-system Active 6m
production Active 4s
Votre nouvel espace de noms apparaît en bas de la liste.
- Pour afficher les informations concernant un espace de noms existant, exécutez la commande suivante :
kubectl describe namespaces production
Résultat :
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.
Créer une ressource dans un espace de noms
Si vous ne spécifiez pas l'espace de noms d'un pod, celui-ci utilisera l'espace de noms par défaut. Dans cette tâche, vous allez spécifier l'emplacement de votre nouvel espace de noms au moment où vous créerez un pod. Nous avons généré pour vous un fichier manifeste simple nommé my-pod.yaml
. Il va vous servir à créer un pod avec un conteneur nginx.
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
- Dans Cloud Shell, exécutez la commande suivante pour créer la ressource dans l'espace de noms nommé
production
:
kubectl apply -f ./my-pod.yaml --namespace=production
Vous pouvez également spécifier l'espace de noms dans le fichier yaml. Pour ce faire, il convient d'ajouter le champ namespace: production
dans la section "metadata:".
Exemple :
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx
namespace: production
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
- Saisissez la commande suivante pour afficher votre pod :
kubectl get pods
Résultat :
No resources found in default namespace.
Votre pod ne s'affiche pas, car kubectl a recherché l'espace de noms par défaut au lieu de votre nouvel espace de noms.
- Exécutez de nouveau la commande, mais cette fois, indiquez le nom du nouvel espace de noms :
kubectl get pods --namespace=production
Résultat :
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 20s
Le pod que vous venez de créer doit maintenant s'afficher.
Cliquez sur "Check my progress" (Vérifier ma progression) pour vérifier l'objectif.
Créer un espace de noms et un pod
Tâche 2 : Créer un rôle et une liaison de rôle
Dans cette tâche, vous allez créer un exemple de rôle personnalisé, puis une liaison de rôle qui accorde le rôle d'éditeur au compte Username 2 dans l'espace de noms "production".
Ce rôle est défini dans le fichier pod-reader-role.yaml
qui vous a été fourni. Ce fichier manifeste définit le rôle pod-reader
qui peut créer, récupérer, lister et consulter des objets Pod dans l'espace de noms production
. Sachez que ce rôle ne permet pas de supprimer des pods.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: production
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["create", "get", "list", "watch"]
Créer un rôle personnalisé
Pour créer un rôle, votre compte doit disposer des autorisations qu'il octroie à ce rôle. Lorsque vous êtes administrateur du cluster, il suffit de créer la liaison de rôle ci-dessous pour attribuer le rôle "cluster-admin" à votre propre compte utilisateur.
- Pour accorder les droits d'administrateur de cluster au compte Username 1, exécutez la commande suivante en remplaçant
[USERNAME_1_EMAIL]
par l'adresse e-mail du compte Username 1 :
kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user [USERNAME_1_EMAIL]
Exemple de résultat :
kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user gcpstaging28307_student@qwiklabs.net
- Dans Cloud Shell, exécutez la commande suivante pour créer le rôle :
kubectl apply -f pod-reader-role.yaml
- Pour afficher la liste des rôles et vérifier que le rôle a bien été créé, exécutez la commande suivante :
kubectl get roles --namespace production
Résultat :
NAME AGE
pod-reader 3m
Créer une liaison de rôle
Le rôle permet d'accorder des privilèges, mais n'a aucune utilité s'il n'est pas associé à d'autres éléments. Il doit être lié à un utilisateur et à un objet à l'aide de RoleBinding.
Le fichier manifeste username2-editor-binding.yaml
crée une liaison de rôle appelée username2-editor
, qui est associée au rôle pod-reader
créé plus haut pour le deuxième utilisateur de l'atelier. Ce rôle permet de créer et d'afficher des pods, mais pas d'en supprimer.
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: username2-editor
namespace: production
subjects:
- kind: User
name: [USERNAME_2_EMAIL]
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
Avant d'utiliser ce fichier, vous devez remplacer l'espace réservé [USERNAME_2_EMAIL]
qu'il contient par l'adresse e-mail du compte Username 2.
- Dans Cloud Shell, créez une variable d'environnement contenant l'adresse e-mail complète du compte Username 2.
export USER2=[USERNAME_2_EMAIL]
Exemple de résultat :
export USER2=gcpstaginguser68_student@qwiklabs.net
- Dans Cloud Shell, utilisez la commande
sed
pour remplacer l'espace réservé dans le fichier par la valeur de la variable d'environnement.
sed -i "s/\[USERNAME_2_EMAIL\]/${USER2}/" username2-editor-binding.yaml
- Dans Cloud Shell, exécutez la commande suivante pour vérifier que la modification a bien été appliquée :
cat username2-editor-binding.yaml
La section "subjects" doit maintenant ressembler à ce qui suit.
Exemple de résultat :
subjects:
- kind: User
name: gcpstaginguser68_student@qwiklabs.net
apiGroup: rbac.authorization.k8s.io
Vous appliquerez cette liaison de rôle plus tard.
Tester l'accès
Vous allez maintenant vérifier si Username 2 peut créer un pod dans l'espace de noms "production" à l'aide du fichier manifeste production-pod.yaml
. Ce fichier manifeste déploie un pod simple avec un seul conteneur 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
Comme il s'agit d'un compte utilisateur distinct, vous devez de nouveau préparer l'environnement Cloud Shell afin d'avoir accès au cluster et aux exemples de fichiers dans le dépôt de l'atelier.
- Revenez à l'onglet de la console Google Cloud du compte Username 2.
Remarque : Assurez-vous que vous vous trouvez bien dans l'onglet Username 2 de la console Google Cloud.
- Dans Cloud Shell, pour le compte Username 2, définissez les variables d'environnement correspondant à la zone et au nom du cluster en saisissant la commande suivante :
export my_zone={{{ project_0.default_zone | ZONE }}}
export my_cluster=standard-cluster-1
- Configurez la complétion par tabulation dans l'outil de ligne de commande kubectl :
source <(kubectl completion bash)
- Configurez l'accès à votre cluster pour kubectl :
gcloud container clusters get-credentials $my_cluster --zone $my_zone
- Dans Cloud Shell, saisissez la commande suivante pour cloner le dépôt de l'atelier dans l'environnement Cloud Shell de l'atelier :
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
- Créez un lien symbolique qui servira de raccourci vers le répertoire de travail :
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
- Passez au répertoire qui contient les exemples de fichiers de l'atelier :
cd ~/ak8s/RBAC/
- Vérifiez que le compte Username 2 peut afficher l'espace de noms "production" en saisissant la commande suivante :
kubectl get namespaces
Résultat :
NAME STATUS AGE
default Active 29m
kube-node-lease Active 29m
kube-public Active 29m
kube-system Active 29m
production Active 23m
L'espace de noms "production" apparaît bien en bas de la liste. Nous pouvons donc continuer.
- Dans Cloud Shell, exécutez la commande suivante pour créer la ressource dans l'espace de noms nommé "production" :
kubectl apply -f ./production-pod.yaml
L'opération échoue, car le compte Username 2 ne dispose pas des autorisations nécessaires pour créer des pods. À ce stade, le compte Username 2 (Nom d'utilisateur 2) ne dispose que des droits d'affichage qu'il avait au début de l'atelier, car vous ne lui avez pas encore associé d'autres rôles. C'est précisément ce que nous allons faire maintenant.
- Revenez à l'onglet de la console Google Cloud du compte Username 1.
Remarque : Assurez-vous que vous vous trouvez bien dans l'onglet Username 1 de la console Google Cloud.
- Dans le Cloud Shell du compte Username 1, exécutez la commande suivante pour créer une liaison de rôle accordant au compte Username 2 le rôle
pod-reader
, incluant l'autorisation de créer des pods dans l'espace de noms production
:
kubectl apply -f username2-editor-binding.yaml
- Dans le Cloud Shell du compte Username 1, exécutez la commande suivante pour rechercher la nouvelle liaison de rôle :
kubectl get rolebinding
Résultat :
No resources found in default namespace.
La liaison de rôle n'apparaît pas, car kubectl affiche l'espace de noms par défaut.
- Dans le Cloud Shell du compte Username 1, exécutez la commande suivante en spécifiant l'espace de noms "production" :
kubectl get rolebinding --namespace production
Résultat :
NAME AGE
username2-editor 23s
- Revenez à l'onglet de la console Google Cloud du compte Username 2.
Remarque : Assurez-vous que vous vous trouvez bien dans l'onglet Username 2 de la console Google Cloud.
- Dans le Cloud Shell du compte Username 2, exécutez la commande suivante pour créer la ressource dans l'espace de noms "production" :
kubectl apply -f ./production-pod.yaml
L'opération doit maintenant réussir, car le compte Username 2 dispose maintenant des autorisations nécessaires pour créer des pods dans l'espace de noms production.
- Vérifiez que le pod a bien été déployé dans l'espace de noms "production" en saisissant la commande suivante :
kubectl get pods --namespace production
Résultat :
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 16m
production-pod 1/1 Running 0 20s
Le pod que vous venez de créer doit maintenant s'afficher.
- Vérifiez que le compte Username 2 ne dispose que des autorisations RBAC associées au rôle "pod-reader" en essayant de supprimer le pod "production-pod".
kubectl delete pod production-pod --namespace production
L'opération échoue, car le compte Username 2 ne dispose pas des autorisations nécessaires pour supprimer des pods.
Cliquez sur "Check my progress" (Vérifier ma progression) pour vérifier l'objectif.
Role et RoleBinding
Terminer l'atelier
Une fois l'atelier terminé, cliquez sur Terminer l'atelier. Google Cloud Skills Boost supprime les ressources que vous avez utilisées, puis efface le compte.
Si vous le souhaitez, vous pouvez noter l'atelier. Sélectionnez un nombre d'étoiles, saisissez un commentaire, puis cliquez sur Envoyer.
Le nombre d'étoiles correspond à votre degré de satisfaction :
- 1 étoile = très insatisfait(e)
- 2 étoiles = insatisfait(e)
- 3 étoiles = ni insatisfait(e), ni satisfait(e)
- 4 étoiles = satisfait(e)
- 5 étoiles = très satisfait(e)
Si vous ne souhaitez pas donner votre avis, vous pouvez fermer la boîte de dialogue.
Pour soumettre des commentaires, suggestions ou corrections, veuillez accéder à l'onglet Assistance.
Copyright 2020 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.