En este lab, aprenderás a aplicar restricciones precisas a la comunicación de red para mejorar la seguridad de tu instancia de Kubernetes Engine.
El Principio de mínimo privilegio
es ampliamente reconocido como una importante consideración de diseño al momento de mejorar la protección de sistemas fundamentales contra las fallas y el comportamiento malicioso. Sugiere que cada componente pueda acceder solo a la información y los recursos necesarios para su propósito legítimo. Este documento demuestra cómo se puede implementar el principio de privilegio mínimo dentro de la capa de red de Kubernetes Engine.
Las conexiones de red se pueden restringir a dos niveles de tu infraestructura de Kubernetes Engine. El primer mecanismo, de menor precisión, es la aplicación de reglas de firewall a niveles de red, subred y host. Estas reglas se aplican fuera de Kubernetes Engine, a nivel de VPC.
Si bien las reglas de firewall son una medida de seguridad sólida, Kubernetes te permite definir reglas aún más precisas mediante las políticas de red. Las políticas de red se usan para limitar la comunicación dentro del clúster. No se aplican a los Pods conectados al espacio de nombres de red del host.
En este lab, aprovisionarás un clúster privado de Kubernetes Engine y un host de bastión mediante el cual accederás al clúster. Un host de bastión proporciona un solo host con acceso al clúster, el cual, al combinarse con una red privada de Kubernetes, garantiza que el clúster no esté expuesto a comportamientos maliciosos de Internet en general. Los hosts de bastión son particularmente útiles cuando no tienes acceso de VPN a la red de la nube.
Dentro del clúster, se aprovisionarán un servidor HTTP simple y dos Pods cliente. Aprenderás a usar una política de red y a establecer etiquetas para permitir solo las conexiones desde uno de los Pods cliente.
Los ingenieros de GKE Helmsman crearon este lab para ayudarte a comprender mejor la Autorización Binaria de GKE. Para ver esta demostración, ejecuta los comandos gsutil cp -r gs://spls/gke-binary-auth/* . y cd gke-binary-auth-demo en Cloud Shell. Te invitamos a hacer cualquier aporte que creas conveniente.
Arquitectura
Definirás un clúster privado de Kubernetes de modo estándar que use Dataplane V2. Dataplane V2 tiene políticas de red habilitadas de forma predeterminada.
Dado que el clúster es privado, no se podrá acceder a la API ni a los nodos trabajadores desde Internet. En su lugar, definirás un host de bastión y usarás una regla de firewall para habilitar el acceso al clúster. La dirección IP del host de bastión se define como una red autorizada para el clúster, la cual le otorga acceso a la API.
Dentro del clúster, aprovisiona tres cargas de trabajo:
hello-server: Este es un servidor HTTP simple con un extremo accesible internamente.
hello-client-allowed: Este es un Pod único que intenta de forma repetida acceder a hello-server. El Pod se etiquetará de tal manera que la política de red te permitirá conectarte a hello-server.
hello-client-blocked: Este ejecuta el mismo código que hello-client-allowed, pero el Pod se etiquetará de tal manera que la política de red no le permitirá conectarse a hello-server.
Configuración y requisitos
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs cuentan con un temporizador que no se puede pausar. El temporizador, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.
Para completar este lab, necesitarás lo siguiente:
Acceso a un navegador de Internet estándar. Se recomienda el navegador Chrome.
Nota: Usa una ventana del navegador privada o de incógnito (opción recomendada) para ejecutar el lab. Así evitarás conflictos entre tu cuenta personal y la cuenta de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
Tiempo para completar el lab (recuerda que, una vez que comienzas un lab, no puedes pausarlo).
Nota: Usa solo la cuenta de estudiante para este lab. Si usas otra cuenta de Google Cloud, es posible que se apliquen cargos a esa cuenta.
Cómo iniciar tu lab y acceder a la consola de Google Cloud
Haz clic en el botón Comenzar lab. Si debes pagar por el lab, se abrirá un diálogo para que selecciones la forma de pago.
A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:
El botón para abrir la consola de Google Cloud
El tiempo restante
Las credenciales temporales que debes usar para el lab
Otra información para completar el lab, si es necesaria
Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).
El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.
Sugerencia: Ordena las pestañas en ventanas separadas, una junto a la otra.
Nota: Si ves el diálogo Elegir una cuenta, haz clic en Usar otra cuenta.
De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.
{{{user_0.username | "Username"}}}
También puedes encontrar el nombre de usuario en el panel Detalles del lab.
Haz clic en Siguiente.
Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.
{{{user_0.password | "Password"}}}
También puedes encontrar la contraseña en el panel Detalles del lab.
Haz clic en Siguiente.
Importante: Debes usar las credenciales que te proporciona el lab. No uses las credenciales de tu cuenta de Google Cloud.
Nota: Usar tu propia cuenta de Google Cloud para este lab podría generar cargos adicionales.
Haz clic para avanzar por las páginas siguientes:
Acepta los Términos y Condiciones.
No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
No te registres para obtener pruebas gratuitas.
Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.
Nota: Para acceder a los productos y servicios de Google Cloud, haz clic en el menú de navegación o escribe el nombre del servicio o producto en el campo Buscar.
Activa Cloud Shell
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. Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.
Haz clic para avanzar por las siguientes ventanas:
Continúa en la ventana de información de Cloud Shell.
Autoriza a Cloud Shell para que use tus credenciales para realizar llamadas a la API de Google Cloud.
Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu Project_ID, . El resultado contiene una línea que declara el Project_ID para esta sesión:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con la función de autocompletado con tabulador.
Puedes solicitar el nombre de la cuenta activa con este comando (opcional):
gcloud auth list
Haz clic en Autorizar.
Resultado:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
Puedes solicitar el ID del proyecto con este comando (opcional):
gcloud config list project
Resultado:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
Nota: Para obtener toda la documentación de gcloud, en Google Cloud, consulta la guía con la descripción general de gcloud CLI.
Clona la demostración
Copia los recursos necesarios para este ejercicio de lab desde un bucket de Cloud Storage:
Haz que los archivos de demostración sean ejecutables con el siguiente comando:
chmod -R 755 *
Tarea 1: Configuración del lab
Primero, configura la región y la zona de Google Cloud.
Configura la región de Google Cloud.
gcloud config set compute/region "{{{project_0.default_region|placeholder}}}"
Configura la zona de Google Cloud.
gcloud config set compute/zone "{{{project_0.default_zone|placeholder}}}"
En este lab, se usarán las siguientes APIs de servicio de Google Cloud, que se habilitaron para ti:
compute.googleapis.com
container.googleapis.com
cloudbuild.googleapis.com
Además, la configuración de Terraform tiene tres parámetros para determinar dónde se debe crear el clúster de Kubernetes Engine:
project ID
region
zone
Para mayor simplicidad, estos parámetros se especifican en un archivo llamado terraform.tfvars, en el directorio de terraform.
Ejecuta el siguiente comando para asegurarte de que estén habilitadas las APIs adecuadas y generar el archivo terraform/terraform.tfvars basado en tus valores predeterminados de gcloud:
make setup-project
Escribe y cuando se te pida confirmar.
Esto habilitará las API de servicio necesarias y también generará un archivo terraform/terraform.tfvars con las siguientes claves.
Ejecuta el siguiente comando para verificar que los valores coincidan con el resultado de gcloud config list:
cat terraform/terraform.tfvars
Aprovisiona el clúster de Kubernetes Engine
A continuación, aplica la configuración de Terraform en el directorio raíz del proyecto:
make tf-apply
Cuando se te solicite, revisa el plan generado e ingresa yes para implementar el entorno.
La implementación tardará varios minutos.
Tarea 2: Validación
Terraform mostrará un mensaje cuando se haya creado el clúster de forma exitosa.
...snip...
google_container_cluster.primary: Still creating... (3m0s elapsed)
google_container_cluster.primary: Still creating... (3m10s elapsed)
google_container_cluster.primary: Still creating... (3m20s elapsed)
google_container_cluster.primary: Still creating... (3m30s elapsed)
google_container_cluster.primary: Creation complete after 3m34s (ID: gke-demo-cluster)
Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si implementaste correctamente la infraestructura necesaria con Terraform, verás una puntuación de evaluación.
Usar Terraform para configurar la infraestructura necesaria (Configuración del lab)
Ahora, para los pasos restantes, establece una conexión SSH al host de bastión:
gcloud compute ssh gke-demo-bastion
Las versiones existentes de kubectl y los clientes personalizados de Kubernetes contienen código específico del proveedor para administrar la autenticación entre el cliente y Google Kubernetes Engine. A partir de la versión 1.26, este código ya no se incluirá como parte del software de código abierto de kubectl. Los usuarios de GKE deberán descargar y usar un complemento de autenticación independiente para generar tokens específicos de GKE. Este nuevo objeto binario, gke-gcloud-auth-plugin, usa el mecanismo Complemento de credenciales Client-go de Kubernetes para extender la autenticación de kubectl y respaldar GKE. Para obtener más información, revisa la siguiente documentación.
Sigue estos pasos para que kubectl use el nuevo complemento de objeto binario para la autenticación, en lugar del código específico del proveedor.
Luego de conectarte, ejecuta el siguiente comando para instalar el gke-gcloud-auth-plugin en la VM.
Ejecuta el siguiente comando para forzar la configuración de este clúster, de manera que se actualice a la configuración del complemento de credenciales Client-go.
El clúster recién creado estará disponible para los comandos estándar de kubectl en el host de bastión.
Tarea 3: Instala el servidor hello server
La aplicación de prueba consiste en un servidor HTTP simple, implementado como hello-server, y dos clientes, uno que se etiquetará como app=hello y el otro como app=not-hello.
Los tres servicios se pueden implementar al aplicar los manifiestos de hello-app.
En el host de bastión, ejecuta el siguiente comando:
kubectl apply -f ./manifests/hello-app/
Resultado:
deployment.apps/hello-client-allowed created
deployment.apps/hello-client-blocked created
service/hello-server created
deployment.apps/hello-server created
Verifica que los tres Pods se hayan implementado correctamente:
kubectl get pods
Verás un Pod en funcionamiento por cada implementación de hello-client-allowed, hello-client-blocked
y hello-server.
NAME READY STATUS RESTARTS AGE
hello-client-allowed-7d95fcd5d9-t8fsk | 1/1 Running 0 14m
hello-client-blocked-6497db465d-ckbn8 | 1/1 Running 0 14m
hello-server-7df58f7fb5-nvcvd | 1/1 Running 0 14m
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si implementaste correctamente el servidor HTTP simple hello server, verás una puntuación de evaluación.
Instalar el servidor hello server
Tarea 4: Confirma el acceso predeterminado a hello server
Primero, muestra las últimas líneas del cliente "permitido" con tail:
Notarás que los dos Pods pueden conectarse con éxito al servicio hello-server. Esto es porque aún no definiste una política de red para restringir el acceso. En cada una de estas ventanas, deberías ver respuestas exitosas por parte del servidor.
Ahora, en la ventana que muestra las líneas del cliente "bloqueado", verás que el resultado se ve así:
wget: download timed out
wget: download timed out
wget: download timed out
wget: download timed out
wget: download timed out
wget: download timed out
wget: download timed out
wget: download timed out
wget: download timed out
...
La política de red evitó la comunicación desde el Pod sin etiqueta a hello-server.
Para salir, presiona Ctrl+C.
Tarea 6: Restringe los espacios de nombres con políticas de red
En el ejemplo anterior, definiste una política de red que restringe las conexiones en función de etiquetas de Pod. Por lo general, resulta útil etiquetar espacios de nombres completos, particularmente cuando los equipos o aplicaciones tienen sus propios espacios de nombres.
Modificarás la política de red para que solo permita el tráfico desde un espacio de nombres designado y, luego, moverás el Pod hello-allowed hacia ese espacio de nombres nuevo.
deployment.apps/hello-client-allowed created
deployment.apps/hello-client-blocked created
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si implementaste correctamente una segunda copia de la aplicación hello-clients en el espacio de nombres nuevo, verás una puntuación de evaluación.
Implementar una segunda copia de la aplicación hello-clients en el espacio de nombres nuevo
Tarea 7: Validación
A continuación, revisa los registros de los dos clientes nuevos de hello-app.
Ejecuta el siguiente comando para observar los registros de la aplicación con la etiqueta "hello" en el espacio de nombres hello-apps de la aplicación:
Ambos clientes pueden conectarse con éxito porque, a partir de Kubernetes 1.10.x, las políticas de red no admiten la restricción del acceso a los Pods dentro de un espacio de nombres determinado. Puedes agregar a la lista de entidades permitidas etiquetas de Pods o de espacios de nombres, o la unión (es decir, OR) de ambas. Sin embargo, aún no puedes incluir en la lista la intersección (es decir, AND) de etiquetas de Pods y etiquetas de espacios de nombres.
Para salir, presiona Ctrl+C.
Tarea 8: Eliminación
Qwiklabs se encargará de cerrar todos los recursos utilizados en este lab, pero esto es lo que debes hacer para limpiar tu propio entorno y, así, reducir los costos y ser un buen ciudadano de la nube:
Sal del host de bastión:
exit
Ejecuta el siguiente comando para destruir el entorno:
make teardown
Resultado:
...snip...
google_compute_subnetwork.cluster-subnet: Still destroying... (ID: us-east1/kube-net-subnet, 20s elapsed)
google_compute_subnetwork.cluster-subnet: Destruction complete after 25s
google_compute_network.gke-network: Destroying... (ID: kube-net)
google_compute_network.gke-network: Still destroying... (ID: kube-net, 10s elapsed)
google_compute_network.gke-network: Still destroying... (ID: kube-net, 20s elapsed)
google_compute_network.gke-network: Destruction complete after 26s
Destroy complete! Resources: 5 destroyed.
Tarea 9: Soluciona problemas en tu propio entorno
Cuando se ejecuta Terraform, la secuencia de comandos de instalación falla y muestra el mensaje “Permission denied”
Las credenciales que usa Terraform no proporcionan los permisos necesarios para crear recursos en los proyectos seleccionados. Asegúrate de que la cuenta que se detalla en gcloud config list tenga los permisos necesarios para crear recursos. Si los tienes, vuelve a generar las credenciales predeterminadas de la aplicación con gcloud auth application-default login.
Error de huella digital no válida durante las operaciones de Terraform
En ocasiones, Terraform emite un mensaje de error de huella digital no válida al actualizar ciertos recursos.
Si ves el error que aparece a continuación, simplemente vuelve a ejecutar el comando.
¡Felicitaciones!
Aplicaste restricciones precisas a la comunicación de red para mejorar la seguridad de tu instancia de Kubernetes Engine.
Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.
Última actualización del manual: 25 de febrero de 2025
Prueba más reciente del lab: 25 de febrero de 2025
Copyright 2024 Google LLC. Este software se proporciona tal como está, sin garantías ni declaraciones para ningún uso o propósito. El uso que hagas de él está sujeto a tu acuerdo con Google.
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.
En este lab, aprenderás a aplicar restricciones precisas para limitar la comunicación de red dentro del clúster a fin de mejorar la seguridad de tu instancia de Kubernetes Engine.
Duración:
0 min de configuración
·
Acceso por 60 min
·
60 min para completar