Descripción general
En este lab, crearás espacios de nombres en un clúster de GKE y, luego, usarás el control de acceso basado en roles para permitir que un usuario que no es administrador trabaje con Pods en un espacio de nombres específico.
Objetivos
En este lab, aprenderá a realizar las siguientes tareas:
- Crear espacios de nombres para que los usuarios controlen el acceso a los recursos del clúster
- Crear roles y objetos RoleBinding para controlar el acceso en un espacio de nombres
Nota: Para este lab, se te proporcionaron dos nombres de usuario disponibles en el cuadro de diálogo Detalles de la conexión. En este lab, nos referiremos a estas cuentas como Username 1 y Username 2.
Tarea 1. Crea espacios de nombres para que los usuarios accedan a los recursos del clúster
Accede a la consola de Google Cloud como el primer usuario
- Acceda a la consola de Google Cloud en una ventana de incógnito, como de costumbre, con la cuenta Username 1 proporcionada en Qwiklabs. Ten en cuenta que ambos nombres de usuario usan la misma contraseña.
- En la barra de título de la consola de Google Cloud, haz clic en Activar Cloud Shell (
).
- Cuando se te solicite, haz clic en Continuar.
No debes esperar a que se inicie Cloud Shell; puedes continuar de inmediato con la siguiente tarea.
Nota: Actualmente, Username 2 tiene acceso al proyecto; sin embargo, solo posee el rol de Visualizador, lo cual hace que todos los recursos del proyecto sean visibles, pero de solo lectura.
Accede a la consola de Google Cloud como el segundo usuario
- Abra otra pestaña en su ventana de incógnito.
- Navega a console.cloud.google.com.
- Haz clic en el ícono de usuario en la esquina superior derecha de la pantalla y, luego, en Agregar cuenta.
- Accede a la consola de Google Cloud con la cuenta Username 2 que se proporcionó. Una vez más, ten en cuenta que ambos nombres de usuario usan la misma contraseña.
- En la barra de título de la consola de Google Cloud, haz clic en Activar Cloud Shell (
).
- Cuando se te solicite, haz clic en Continuar.
No debes esperar a que se inicie Cloud Shell; puedes continuar de inmediato con la siguiente tarea.
Conéctate al clúster de GKE del lab
- Vuelve a la pestaña de la cuenta Username 1 en la consola de Google Cloud.
Nota: Asegúrate de estar en la pestaña de la cuenta Username 1 en la consola de Google Cloud.
- En Cloud Shell, escribe el siguiente comando para establecer la variable de entorno correspondiente a la zona y al nombre del clúster:
export my_zone={{{ project_0.default_zone | ZONE }}}
export my_cluster=standard-cluster-1
- Configura el completado de línea de comando para la herramienta de línea de comandos kubectl:
source <(kubectl completion bash)
- Configura el acceso al clúster para kubectl:
gcloud container clusters get-credentials $my_cluster --zone $my_zone
- En Cloud Shell, ingresa el siguiente comando para clonar el repositorio del lab en el entorno de Cloud Shell del lab:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
- Crea un vínculo simbólico como un acceso directo al directorio de trabajo:
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
- Cambia al directorio que contenga los archivos de muestra de este lab:
cd ~/ak8s/RBAC/
Crea un espacio de nombres
Se creó para ti un archivo de manifiesto llamado my-namespace.yaml
que crea un espacio de nombres nuevo denominado production
.
apiVersion: v1
kind: Namespace
metadata:
name: production
- Obtén una lista de los espacios de nombres actuales en el clúster con el siguiente comando:
kubectl get namespaces
Resultado:
NAME STATUS AGE
default Active 17m
kube-node-lease Active 17m
kube-public Active 17m
kube-system Active 17m
- En Cloud Shell, ejecuta el siguiente comando para crear el espacio de nombres nuevo:
kubectl create -f ./my-namespace.yaml
- Ejecuta el siguiente comando para verificar si se visualiza el espacio de nombres:
kubectl get namespaces
Resultado:
NAME STATUS AGE
default Active 6m
kube-node-lease Active 6m
kube-public Active 6m
kube-system Active 6m
production Active 4s
El espacio de nombres nuevo aparecerá en la parte inferior de la lista.
- Puedes ejecutar lo siguiente para ver los detalles de un espacio de nombres existente:
kubectl describe namespaces production
Resultado:
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 un recurso en un espacio de nombres
Si no especificas el espacio de nombres de un Pod, se usará el espacio de nombres “default”. En esta tarea, especifica la ubicación de nuestro espacio de nombres recientemente creado cuando crees un Pod nuevo. Se creó para ti un archivo de manifiesto simple denominado my-pod.yaml
que crea un Pod que tiene un contenedor de nginx.
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
- En Cloud Shell, ejecuta el siguiente comando para crear el recurso en el espacio de nombres denominado
production
:
kubectl apply -f ./my-pod.yaml --namespace=production
De manera alternativa, podrías haber especificado el espacio de nombres en el archivo yaml. Esto requiere el campo namespace: production
en la sección metadata:
Por ejemplo:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx
namespace: production
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
- Intenta ejecutar el siguiente comando para ver tu Pod:
kubectl get pods
Resultado:
No resources found in default namespace.
No podrás ver el Pod debido a que kubectl verificó el espacio de nombres predeterminado en lugar de tu espacio de nombres nuevo.
- Vuelve a ejecutar el comando, pero esta vez especifica el espacio de nombres nuevo:
kubectl get pods --namespace=production
Resultado:
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 20s
Ahora deberías ver el Pod recién creado.
Haga clic en Revisar mi progreso para verificar el objetivo.
Crear el espacio de nombres y el Pod
Tarea 2. Acerca de los roles y los objetos RoleBinding
En esta tarea, crearás un rol personalizado de muestra y, luego, un objeto RoleBinding que otorgue al Username 2 el rol de editor en el espacio de nombres production.
El rol se define en el archivo pod-reader-role.yaml
que se te proporciona. Este manifiesto define un rol denominado pod-reader
que otorga permisos para crear, obtener, indicar y visualizar objetos del Pod en el espacio de nombres production
. Ten en cuenta que este rol no puede borrar los Pods.
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 rol personalizado
Antes de poder crear una función, su cuenta debe tener los permisos otorgados en la función asignada. Para los administradores de clústeres, esto se puede lograr fácilmente mediante la creación del siguiente RoleBinding a fin de otorgar a su propia cuenta de usuario la función de administrador de clústeres.
- Si deseas otorgar privilegios de administrador de clústeres a la cuenta Username 1, ejecuta el siguiente comando y reemplaza
[USERNAME_1_EMAIL]
por la dirección de correo electrónico de la cuenta Username 1:
kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user [USERNAME_1_EMAIL]
Ejemplo del resultado:
kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user gcpstaging28307_student@qwiklabs.net
- En Cloud Shell, ejecuta el siguiente comando para crear el rol:
kubectl apply -f pod-reader-role.yaml
- Si deseas obtener la lista de roles para verificar que se creó, ejecuta el siguiente comando:
kubectl get roles --namespace production
Resultado:
NAME AGE
pod-reader 3m
Crea un objeto RoleBinding
La función se usa para asignar privilegios, pero por sí sola no puede realizar ninguna acción. La función se debe vincular a un objeto y un usuario, lo cual se realiza en el RoleBinding.
El archivo de manifiesto username2-editor-binding.yaml
crea un RoleBinding denominado username2-editor
destinado al segundo usuario del lab para la función pod-reader
que creó anteriormente. Ese rol puede crear y ver los Pods, pero no puede borrarlos.
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
Este archivo contiene un marcador de posición, [USERNAME_2_EMAIL]
, que debes reemplazar por la dirección de correo electrónico de Username 2 antes de aplicarlo.
- En Cloud Shell, crea una variable de entorno que contenga la dirección de correo electrónico completa de Username 2.
export USER2=[USERNAME_2_EMAIL]
Ejemplo del resultado:
export USER2=gcpstaginguser68_student@qwiklabs.net
- En Cloud Shell, usa
sed
para reemplazar el marcador de posición en el archivo por el valor de la variable de entorno:
sed -i "s/\[USERNAME_2_EMAIL\]/${USER2}/" username2-editor-binding.yaml
- En Cloud Shell, ejecuta el siguiente comando para confirmar que se realizó el cambio correcto:
cat username2-editor-binding.yaml
La sección subjects ahora debería verse de la siguiente manera.
Ejemplo del resultado:
subjects:
- kind: User
name: gcpstaginguser68_student@qwiklabs.net
apiGroup: rbac.authorization.k8s.io
Aplicarás este objeto RoleBinding más adelante.
Prueba el acceso
Ahora probarás si Username 2 puede crear un Pod en el espacio de nombres production; para eso, utiliza Username 2 si vas a crear un Pod con el archivo de manifiesto production-pod.yaml
. Este manifiesto implementa un Pod simple con un contenedor de nginx único.
apiVersion: v1
kind: Pod
metadata:
name: production-pod
labels:
name: production-pod
namespace: production
spec:
containers:
- name: production-pod
image: nginx
ports:
- containerPort: 8080
Dado que esta es una cuenta de usuario individual, debes preparar el entorno de Cloud Shell por segunda vez para tener acceso al clúster y a los archivos de muestra del repositorio del lab.
- Vuelve a la pestaña de la cuenta Username 2 en la consola de Google Cloud.
Nota: Asegúrate de estar en la pestaña de la cuenta Username 2 en la consola de Google Cloud.
- En Cloud Shell, en Username 2, escribe el siguiente comando para configurar la variable de entorno correspondiente a la zona y al nombre del clúster:
export my_zone={{{ project_0.default_zone | ZONE }}}
export my_cluster=standard-cluster-1
- Configura el completado de línea de comando para la herramienta de línea de comandos kubectl:
source <(kubectl completion bash)
- Configura el acceso al clúster para kubectl:
gcloud container clusters get-credentials $my_cluster --zone $my_zone
- En Cloud Shell, ingresa el siguiente comando para clonar el repositorio en el entorno de Cloud Shell del lab:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
- Crea un vínculo simbólico como un acceso directo al directorio de trabajo:
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
- Cambia al directorio que contenga los archivos de muestra de este lab:
cd ~/ak8s/RBAC/
- Verifica si Username 2 puede ver el espacio de nombres production con el siguiente comando:
kubectl get namespaces
Resultado:
NAME STATUS AGE
default Active 29m
kube-node-lease Active 29m
kube-public Active 29m
kube-system Active 29m
production Active 23m
El espacio de nombres production aparecerá en la parte inferior de la lista; por lo tanto, puedes continuar.
- En Cloud Shell, ejecuta el siguiente comando para crear el recurso en el espacio de nombres denominado production:
kubectl apply -f ./production-pod.yaml
Esta acción fallará, lo que indica que Username 2 no tiene el permiso correcto para crear los Pods. En este momento, Username 2 solo tiene los permisos de visualizador con los que inició el lab, dado que aún no vinculaste otro rol a esa cuenta. Ahora cambiará eso.
- Vuelve a la pestaña de la cuenta Username 1 en la consola de Google Cloud.
Nota: Asegúrate de estar en la pestaña de la cuenta Username 1 en la consola de Google Cloud.
- En Cloud Shell, en Username 1, ejecuta el siguiente comando para crear el objeto RoleBinding que otorga a Username 2 el rol
pod-reader
, que incluye el permiso para crear los Pods en el espacio de nombres production
:
kubectl apply -f username2-editor-binding.yaml
- En Cloud Shell, en Username 1, ejecuta el siguiente comando para buscar el nuevo objeto RoleBinding:
kubectl get rolebinding
Resultado:
No resources found in default namespace.
El objeto RoleBinding no aparece porque kubectl está mostrando el espacio de nombres default.
- En Cloud Shell, en Username 1, ejecuta el siguiente comando con el espacio de nombres production especificado:
kubectl get rolebinding --namespace production
Resultado:
NAME AGE
username2-editor 23s
- Vuelve a la pestaña de la cuenta Username 2 en la consola de Google Cloud.
Nota: Asegúrate de estar en la pestaña de la cuenta Username 2 en la consola de Google Cloud.
- En Cloud Shell, en Username 2, ejecuta el siguiente comando para crear el recurso en el espacio de nombres denominado production:
kubectl apply -f ./production-pod.yaml
Esto se debería ejecutar correctamente, ya que Username 2 ahora tiene el permiso para crear los Pods en el espacio de nombres production.
- Verifica que el Pod se haya implementado correctamente en el espacio de nombres production con el siguiente comando:
kubectl get pods --namespace production
Resultado:
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 16m
production-pod 1/1 Running 0 20s
Deberías ver el Pod recién creado.
- Intenta borrar el Pod production-pod para verificar que solo los permisos de RBAC específicos que otorga el rol pod-reader se apliquen a Username 2:
kubectl delete pod production-pod --namespace production
Esta acción falla porque Username 2 no tiene el permiso para borrar los Pods.
Haga clic en Revisar mi progreso para verificar el objetivo.
Funciones y objetos RoleBinding
Finalice su lab
Cuando haya completado el lab, haga clic en Finalizar lab. Google Cloud Skills Boost quitará los recursos que usó y limpiará la cuenta.
Tendrá la oportunidad de calificar su experiencia en el lab. Seleccione la cantidad de estrellas que corresponda, ingrese un comentario y haga clic en Enviar.
La cantidad de estrellas indica lo siguiente:
- 1 estrella = Muy insatisfecho
- 2 estrellas = Insatisfecho
- 3 estrellas = Neutral
- 4 estrellas = Satisfecho
- 5 estrellas = Muy satisfecho
Puede cerrar el cuadro de diálogo si no desea proporcionar comentarios.
Para enviar comentarios, sugerencias o correcciones, use la pestaña Asistencia.
Copyright 2020 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.