En este lab, establecerás información de configuración, tanto encriptada como no encriptada. La información de configuración encriptada se almacena como Secrets, mientras que la información de configuración no encriptada se almacena como ConfigMaps.
Este enfoque evita la codificación de forma fija (hard-coding) de dicha información en bases de código. Las credenciales (como claves de API) que pertenecen a Secrets no deben transferirse dentro de repositorios de código, como GitHub, a menos que se las encripte antes de enviarlas; no obstante, es mejor mantenerlas separadas.
Objetivos
En este lab, aprenderás a realizar las siguientes tareas:
Crear Secrets con el comando kubectl y archivos de manifiesto
Crear ConfigMaps con el comando kubectl y archivos de manifiesto
Usar Secrets en contenedores a través de variables de entorno o volúmenes activados
Usar ConfigMaps en contenedores a través de variables de entorno o volúmenes activados
Configuración del lab
Accede a Qwiklabs
En cada lab, recibirá un proyecto de Google Cloud y un conjunto de recursos nuevos por tiempo limitado y sin costo adicional.
Accede a Qwiklabs desde una ventana de incógnito.
Ten en cuenta el tiempo de acceso del lab (por ejemplo, 1:15:00) y asegúrate de finalizarlo en el plazo asignado.
No existe una función de pausa. Si lo necesita, puede reiniciar el lab, pero deberá hacerlo desde el comienzo.
Cuando esté listo, haga clic en Comenzar lab.
Anote las credenciales del lab (el nombre de usuario y la contraseña). Las usarás para acceder a la consola de Google Cloud.
Haga clic en Abrir Google Console.
Haga clic en Usar otra cuenta, copie las credenciales para este lab y péguelas en el mensaje emergente que aparece.
Si usa otras credenciales, se generarán errores o incurrirá en cargos.
Acepta las condiciones y omite la página de recursos de recuperación.
Después de completar los pasos iniciales de acceso, aparecerá el panel del proyecto.
Activa Google Cloud Shell
Google Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud.
Google Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
En la consola de Cloud, en la barra de herramientas superior derecha, haz clic en el botón Abrir Cloud Shell.
Haz clic en Continuar.
El aprovisionamiento y la conexión al entorno demorarán unos minutos. Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. Por ejemplo:
gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con el completado de línea de comando.
Puedes solicitar el nombre de la cuenta activa con este comando:
En esta tarea, autenticarás contenedores con Google Cloud para acceder a los servicios de Google Cloud. Además, configurarás un tema y una suscripción de Cloud Pub/Sub, intentarás acceder a ese tema desde un contenedor que se ejecuta en GKE y verás que la solicitud de acceso falla.
Para acceder correctamente al tema de Pub/Sub, deberás crear una cuenta de servicio con credenciales y pasar esas credenciales mediante Secrets de Kubernetes.
Prepara una cuenta de servicio sin permisos
En la consola de Google Cloud, en el menú de navegación (), haz clic en IAM y administración > Cuentas de servicio.
Haz clic en + Crear cuenta de servicio.
En el cuadro de texto Nombre de la cuenta de servicio, ingresa no-permissions.
Haz clic en Crear y continuar.
Haz clic en Continuar y, luego, en Listo.
Busca la cuenta de servicio no-permissions en la lista y copia la dirección de correo electrónico correspondiente en un archivo de texto para usarla más tarde.
Crea un clúster de GKE
Cuando crees este clúster, especificarás la cuenta de servicio que creaste antes. Para ilustrar por qué es necesario tener cuentas de servicio con los permisos adecuados, esa cuenta no tiene permisos para ningún otro servicio de Google Cloud y, por lo tanto, no podrá conectarse a la aplicación de prueba de Cloud Pub/Sub que implementarás más adelante. Podrás solucionar esto más adelante en el lab.
En Cloud Shell, escribe el siguiente comando para crear variables de entorno para el nombre del clúster y la zona de Google Cloud que se usarán en la creación del clúster de este lab:
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)
En Cloud Shell, escribe el siguiente comando para configurar la variable de entorno para el nombre de la cuenta de servicio, en la que [MY-SERVICE-ACCOUNT-EMAIL] es la dirección de correo electrónico de la cuenta de servicio que creaste antes:
En Cloud Shell, escribe el siguiente comando para crear un clúster de Kubernetes:
gcloud container clusters create $my_cluster \
--num-nodes 2 --zone $my_zone \
--service-account=$my_service_account
Nota: Debes esperar unos minutos para que se complete la implementación del clúster.
Para crear un tema de Cloud Pub/Sub con el nombre "echo" y una suscripción denominada "echo-read" que esté asociada a ese tema, ejecuta los siguientes comandos de gcloud:
Implementa una aplicación que lea desde los temas de Cloud Pub/Sub
Crea una implementación con un contenedor que pueda leer desde los temas de Cloud Pub/Sub. Puesto que se requieren permisos específicos para suscribirse a los temas de Cloud Pub/Sub y leer desde estos, este contenedor debe aprovisionarse con credenciales para que se pueda conectar correctamente a Cloud Pub/Sub.
Se te proporciona el archivo de manifiesto de Deployment llamado pubsub.yaml.
Cambia al directorio que contenga los archivos de muestra de este lab:
cd ~/ak8s/Secrets/
Implementa la aplicación:
kubectl apply -f pubsub.yaml
Después de implementar la aplicación, ejecuta el siguiente comando para consultar los Pods:
kubectl get pods -l app=pubsub
Este comando filtra la lista de Pods y solo incluye aquellos que tienen una etiqueta que coincide con app: pubsub.
Resultado:
NAME READY STATUS RESTARTS AGE
pubsub-74d4d96ddb-lqkt8 0/1 CrashLoopBackOff 0 6s
Nota: Debes esperar alrededor de un minuto. La aplicación intentará iniciarse, pero el proceso no se completará correctamente.
Obtén una lista de los Pods nuevamente:
kubectl get pods -l app=pubsub
Resultado:
NAME READY STATUS RESTARTS AGE
pubsub-74d4d96ddb-lqkt8 0/1 Error 4 2m
Observa el estado del Pod. Tiene un error y se reinició varias veces.
Para inspeccionar los registros del Pod, ejecuta el siguiente comando:
kubectl logs -l app=pubsub
El mensaje de error que se muestra al final del registro indica que la aplicación no tiene permisos para consultar el servicio de Cloud Pub/Sub.
StatusCode.PERMISSION_DENIED, User not authorized to perform this action.
Crea credenciales de cuenta de servicio
Ahora crearás una nueva cuenta de servicio y le otorgarás acceso a la suscripción de Pub/Sub que la aplicación de prueba intenta usar. En vez de cambiar la cuenta de servicio de los nodos del clúster de GKE, generarás una clave JSON para esa cuenta que, luego, pasarás de forma segura al Pod mediante Secrets de Kubernetes.
En la consola de Google Cloud, en el Menú de navegación, haz clic en IAM y administración > Cuentas de servicio.
Haz clic en + Crear cuenta de servicio.
En el cuadro de texto Nombre de la cuenta de servicio, ingresa pubsub-app y, luego, haz clic en Crear y continuar.
En la lista desplegable Selecciona un rol, selecciona Pub/Sub > Suscriptor de Pub/Sub.
Verifica que se muestre el rol, haz clic en Continuar y, luego, en Listo.
En la pantalla de descripción general de cuenta de servicio, haz clic en los tres puntos que se encuentran a la derecha de la cuenta de servicio pubsub-app y, luego, selecciona Administrar claves.
En el menú desplegable, haz clic en Agregar clave y, luego, selecciona Crear clave nueva.
Selecciona JSON como el tipo de clave y, luego, haz clic en Crear.
Se descargará en tu computadora un archivo de claves JSON que contiene las credenciales de la cuenta de servicio. Podrás verlo en la barra de descargas ubicada en la parte inferior de tu pantalla. Este es el archivo de claves que deberás usar para configurar la aplicación de ejemplo y poder autenticarla para la API de Cloud Pub/Sub.
Haz clic en Cerrar.
En tu disco duro, busca la clave JSON que acabas de descargar y cambia el nombre del archivo a credentials.json.
Importa las credenciales como un Secret
En Cloud Shell, haz clic en el ícono de los tres puntos () ubicado en la barra de herramientas de Cloud Shell para mostrar más opciones.
Haz clic en Subir y sube el archivo credentials.json desde tu máquina local a la VM de Cloud Shell, luego, haz clic en Subir.
En Cloud Shell, ingresa el siguiente comando para confirmar que el archivo se haya subido:
ls ~/
Deberías ver el archivo de credenciales que se subió junto con el directorio de archivos del lab que clonaste antes.
Para guardar el archivo de claves credentials.json en un Secret de Kubernetes llamado pubsub-key, ejecuta el siguiente comando:
Con este comando se crea un Secret llamado pubsub-key. Este tiene un valor key.json con el contenido de la clave privada que descargaste de la consola de Google Cloud.
Quita el archivo credentials.json de tu computadora:
rm -rf ~/credentials.json
Configura la aplicación con el Secret
Ahora, actualice la implementación para incluir los siguientes cambios:
Agregue un volumen a la especificación del Pod. Este volumen contiene el Secret.
El volumen de Secrets se activa en el contenedor de la aplicación.
La variable de entorno GOOGLE_APPLICATION_CREDENTIALS está establecida para apuntar al archivo de claves en la activación del volumen de Secrets.
Las bibliotecas cliente de Google Cloud reconocen automáticamente la variable de entorno GOOGLE_APPLICATION_CREDENTIALS; en este caso, el cliente de Cloud Pub/Sub para Python.
Se le proporcionó el archivo de Deployment actualizado llamado pubsub-secret.yaml.
En pocos segundos, la aplicación debería tomar el mensaje para después imprimirlo en el flujo de resultados.
Para inspeccionar los registros del Pod implementado, ejecute el siguiente comando:
kubectl logs -l app=pubsub
El resultado debería verse como el ejemplo.
Resultado:
Pulling messages from Pub/Sub subscription...
[2018-12-17 22:01:06.860378] Received message: ID=328977244395410 Data=b'Hello, world!'
[2018-12-17 22:01:06.860736] Processing: 328977244395410
[2018-12-17 22:01:09.863973] Processed: 328977244395410
Haga clic en Revisar mi progreso para verificar el objetivo.
Trabajar con Secrets
Tarea 2: Trabaje con ConfigMaps
ConfigMaps vincula los archivos de configuración, los argumentos de la línea de comandos, las variables de entorno, los números de puerto y otros artefactos de configuración a los contenedores y componentes del sistema de sus Pods en el entorno de ejecución.
ConfigMaps le permite separar sus configuraciones de sus Pods y componentes. Sin embargo, los ConfigMaps no están encriptados, lo que los hace inapropiados para las credenciales. Esta es la diferencia entre los Secrets y los ConfigMaps. Los Secrets están encriptados y, por lo tanto, son más adecuados para información sensible o confidencial, como las credenciales.
Los ConfigMaps son más adecuados para información de configuración general, como números de puertos.
Use el comando kubectl para crear ConfigMaps
Use kubectl a fin de crear ConfigMaps. Siga el patrón kubectl create configmap [NAME] [DATA] y agregue una marca para archivo (--from-file) o para literal (--from-literal).
Comience con un valor literal sencillo en el siguiente comando de kubectl:
También puede usar un archivo de configuración YAML para crear un ConfigMap. El archivo config-map-3.yaml contiene una definición de ConfigMap llamada sample3. Usarás este ConfigMap más tarde para mostrar dos maneras diferentes de exponer los datos dentro de un contenedor.
Ahora tienes algo de información de configuración no encriptada y no secreta separada correctamente de tu aplicación y disponible para tu clúster. A fin de realizar esta tarea, usó ConfigMaps de tres maneras diferentes para demostrar las distintas opciones, pero, en la práctica, por lo general elegirá un método que, probablemente, sea usar un archivo de configuración YAML. Los archivos de configuración proporcionan un registro de los valores que ha almacenado, lo que le permite repetir el proceso fácilmente en el futuro.
A continuación, aprenderá cómo acceder a esta información desde el interior de su aplicación.
Use variables de entorno para consumir ConfigMaps en contenedores
A fin de acceder a ConfigMaps desde el interior de contenedores mediante variables de entorno, la definición del Pod debe actualizarse para incluir uno o más configMapKeyRefs.
El archivo pubsub-configmap.yaml es una versión actualizada de la implementación de demostración de Cloud Pub/Sub que incluye la configuración adicional env: al final del archivo para importar variables de entorno desde el ConfigMap en el contenedor.
Para volver a aplicar el archivo de configuración actualizado, ejecuta el siguiente comando:
kubectl apply -f pubsub-configmap.yaml
Ahora su aplicación tiene acceso a una variable de entorno llamada INSIGHTS, cuyo valor es testAllTheThings.
Para verificar que la variable de entorno tenga el valor correcto, debe obtener acceso de shell a su Pod, lo que significa que necesita el nombre de este. A fin de obtener el nombre del Pod, ejecute el siguiente comando:
kubectl get pods
El resultado debería verse como el ejemplo.
Resultado:
NAME READY STATUS RESTARTS AGE
pubsub-77df8f8c6-krfl2 1/1 Running 0 4m
Para iniciar la sesión de shell, ejecuta el siguiente comando, pero sustituye [MY-POD-NAME] por el nombre de tu Pod:
kubectl exec -it [MY-POD-NAME] -- sh
Ejemplo:
kubectl exec -it pubsub-77df8f8c6-krfl2 -- sh
Para imprimir una lista de variables de entorno, ejecuta el siguiente comando:
printenv
En la lista, debería aparecer INSIGHTS=testAllTheThings.
Para salir de la sesión de shell del contenedor, ejecute el siguiente comando:
exit
Usa volúmenes activados para consumir ConfigMaps en contenedores
Puede propagar un volumen con los datos del ConfigMap en lugar de almacenarlos en una variable de entorno o como complemento a este almacenamiento.
En este Deployment, el ConfigMap llamado sample-3 que creó antes en esta tarea también se agrega como un volumen denominado config-3 a las especificaciones del Pod. El volumen config-3 se activa luego dentro del contenedor en la ruta de acceso /etc/config. Además, se configura el método original que usa variables de entorno para importar ConfigMaps.
Se te proporcionó el archivo de Deployment actualizado llamado pubsub-configmap2.yaml.
Vuelve a aplicar el archivo de configuración actualizado:
kubectl apply -f pubsub-configmap2.yaml
Vuelva a conectarse a la sesión de shell del contenedor para ver si se puede acceder al valor en el ConfigMap. Los nombres de los Pods habrán cambiado. A fin de obtener el nombre del Pod, ejecute el siguiente comando:
kubectl get pods
El resultado debería verse como el ejemplo.
Resultado:
NAME READY STATUS RESTARTS AGE
pubsub-747cf8c545-ngsrf 1/1 Running 0 30s
pubsub-df6bc7b87-vb8cz 1/1 Terminating 0 4m
Para iniciar la sesión de shell, ejecuta el siguiente comando, pero sustituye [MY-POD-NAME] por el nombre de tu Pod:
kubectl exec -it [MY-POD-NAME] -- sh
Ejemplo:
kubectl exec -it pubsub-747cf8c545-ngsrf -- sh
Navega a la carpeta correspondiente:
cd /etc/config
Obtén una lista de los archivos en la carpeta:
Deberían mostrarse los nombres de los archivos como claves de sample3.
ls
Resultado:
airspeed meme
Para ver el contenido de uno de los archivos, ejecuta el siguiente comando:
cat airspeed
Resultado:
africanOrEuropean#
Nota: El valor de airspeed no incluía un retorno de carro, por lo tanto, el símbolo del sistema (el signo \#) está al final del valor devuelto.
Para salir de la shell del contenedor, ejecuta el siguiente comando:
exit
Haga clic en Revisar mi progreso para verificar el objetivo.
Trabajar con ConfigMaps
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.
Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
.
Los labs tienen un límite de tiempo y no tienen la función de pausa. Si finalizas el lab, deberás reiniciarlo desde el principio.
En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar
Usa la navegación privada
Copia el nombre de usuario y la contraseña proporcionados para el lab
Haz clic en Abrir la consola en modo privado
Accede a la consola
Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
Acepta las condiciones y omite la página de recursos de recuperación
No hagas clic en Finalizar lab, a menos que lo hayas terminado o quieras reiniciarlo, ya que se borrará tu trabajo y se quitará el proyecto
Este contenido no está disponible en este momento
Te enviaremos una notificación por correo electrónico cuando esté disponible
¡Genial!
Nos comunicaremos contigo por correo electrónico si está disponible
Un lab a la vez
Confirma para finalizar todos los labs existentes y comenzar este
Usa la navegación privada para ejecutar el lab
Usa una ventana de navegación privada o de Incógnito para ejecutar el lab. Así
evitarás cualquier conflicto entre tu cuenta personal y la cuenta
de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
Architecting with Google Kubernetes Engine: Cómo trabajar con Secrets y ConfigMaps de Kubernetes Engine
Duración:
0 min de configuración
·
Acceso por 60 min
·
60 min para completar