En este lab, crearás un clúster privado, agregarás una red autorizada para que la API tenga acceso a ella y, luego, configurarás una política de red para proteger el Pod.
Nota: En este lab, se usará el modo estándar de GKE. Se exploran las políticas de red de los clústeres, que están habilitadas de forma predeterminada en GKE Autopilot.
Objetivos
En este lab, aprenderás a realizar las siguientes tareas:
Crear y probar un clúster privado
Configurar un clúster para el acceso autorizado al plano de control de la red
Configurar una política de red para el clúster
Configuración y requisitos
En cada lab, recibirás un proyecto de Google Cloud y un conjunto de recursos nuevos por tiempo limitado y sin costo adicional.
Haz clic en el botón Comenzar lab. Si debes pagar por el lab, se abrirá una ventana emergente para que selecciones tu forma de pago.
A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:
El botón 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.
Haga 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 ver un menú con una lista de productos y servicios de Google Cloud, haz clic en el menú de navegación que se encuentra en la parte superior izquierda o escribe el nombre del servicio o producto en el campo Búsqueda.
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, crearás un clúster privado, considerarás las opciones de privacidad del clúster y, luego, compararás tu clúster privado con el original.
En un clúster privado, los nodos tienen direcciones IP internas RFC 1918 únicamente, lo que garantiza que sus cargas de trabajo estén aisladas del Internet público. Los nodos en un clúster no privado tienen direcciones IP externas; es posible que esto permita el tráfico hacia y desde Internet.
Configura un clúster privado
En el menú de navegación (), haz clic en Kubernetes Engine > Clústeres.
Haz clic en Crear y selecciona CAMBIAR A CLÚSTER ESTÁNDAR para el clúster.
Asígnale el nombre private-cluster al clúster.
Selecciona como la zona.
En el panel de la izquierda, en Grupos de nodos, haz clic en default-pool.
En Cantidad de nodos, escribe 2.
En el panel de la izquierda, en Clúster, haz clic en Redes.
Asegúrate de que no esté seleccionada la opción Habilitar redes autorizadas.
Selecciona la casilla de verificación Anular la subred predeterminada del extremo privado del plano de control.
En Subred del extremo privado, selecciona la opción predeterminada.
Selecciona la casilla de verificación para Habilitar nodos privados.
Nota: Google Cloud usa el intercambio de tráfico entre VPC para conectar la VPC del clúster con tu red de VPC predeterminada.
Es posible que debas desplazarte hacia abajo para ver esta opción.
Este parámetro de configuración te permite definir el rango de direcciones que pueden acceder al clúster de forma externa. Cuando esta casilla de verificación no está seleccionada, solo puedes acceder a kubectl desde la red de Google Cloud. En este lab, solo accederás a kubectl a través de la red de Google Cloud, pero modificarás este parámetro de configuración más adelante.
Haz clic en Crear.
Nota: Deberás esperar algunos minutos para que se complete la implementación del clúster.
Inspecciona tu clúster
En Cloud Shell, ingresa el siguiente comando para revisar los detalles de tu nuevo clúster:
Los siguientes valores aparecen solo en el clúster privado:
privateEndpoint, una dirección IP interna. Los nodos usan esta dirección IP interna para comunicarse con el plano de control del clúster.
publicEndpoint, una dirección IP externa. Los servicios externos y los administradores pueden usar la dirección IP externa para comunicarse con el plano de control del clúster.
Tienes varias opciones para bloquear tu clúster en diferentes grados:
Todo el clúster puede tener acceso externo.
Todo el clúster puede ser privado.
Los nodos pueden ser privados, mientras que el plano de control del clúster es público, y puedes limitar qué redes externas están autorizadas para acceder al plano de control del clúster.
Sin las direcciones IP públicas, el código que se ejecuta en los nodos no puede acceder al Internet público, a menos que configures una puerta de enlace NAT como Cloud NAT.
Puedes usar clústeres privados para proporcionar servicios como APIs internas a las que solo se puede acceder a través de recursos dentro de tu red. Por ejemplo, los recursos podrían ser herramientas privadas que solo utiliza tu empresa. O bien, podrían ser servicios de backend a los que acceden tus servicios de frontend, y, tal vez, solo los clientes o usuarios externos acceden directamente a esos servicios de frontend. En tales casos, los clústeres privados son una buena forma de reducir la superficie de ataque de tu aplicación.
Haz clic en Revisar mi progreso para verificar el objetivo.
Crear un clúster privado
Tarea 2. Agrega una red autorizada para acceder al plano de control del clúster
Tras crear el clúster, se recomienda que le envíes comandos desde fuera de Google Cloud. Por ejemplo, podrías decidir que solo tu red corporativa pueda enviar comandos al plano de control de tu clúster. Desafortunadamente, no especificaste la red autorizada durante la creación del clúster.
En esta tarea, agregarás una red autorizada para acceder al plano de control del clúster.
Nota: En esta tarea, harás que la API del plano de control de Kubernetes esté disponible para un rango específico de direcciones de red. En una situación real en la que se usa GKE, esta conexión la utilizarían el personal de TI y los procesos automatizados, no los usuarios finales.
En el menú de navegación () de la consola de Google Cloud, haz clic en Kubernetes Engine > Clústeres.
Haz clic en private-cluster para abrir la página Detalles del clúster.
En la pestaña Detalles, en la sección Redes del plano de control, haz clic en Editar().
Selecciona Habilitar redes autorizadas.
Haz clic en Agregar una red autorizada.
En Nombre, escribe el nombre de la red; usa Corporate.
En Red, escribe un rango de CIDR que desees incluir en la lista de entidades permitidas para otorgar acceso al plano de control del clúster. Como ejemplo, puedes utilizar 192.168.1.0/24.
Haz clic en Listo.
Asegúrate de que los siguientes parámetros estén habilitados:
Acceder con la dirección IP externa del plano de control
Acceder con la dirección IP interna del plano de control desde cualquier región
Aplicar de manera forzosa redes autorizadas en el extremo interno del plano de control
Agregar direcciones IP externas de Google Cloud a las redes autorizadas
Si es necesario, se pueden agregar varias redes aquí, pero no más de 50 rangos de CIDR.
Nota: Fuera de este entorno de lab, un ejemplo práctico podría ser incluir en la lista de entidades permitidas solo la dirección pública externa de tu firewall corporativo. Por ejemplo, si la dirección IP de tu firewall corporativo fuera 8.8.8.14, podrías permitir el acceso a 8.8.8.14/32.
Haz clic en Guardar cambios, en la parte inferior del menú.
Haz clic en Revisar mi progreso para verificar el objetivo.
Agregar una red autorizada para acceder al plano de control del clúster
Tarea 3. Crea una política de red para el clúster
En esta tarea, crearás una política de red para el clúster para restringir la comunicación entre los Pods. Una zona de confianza cero es importante para evitar ataques laterales dentro del clúster cuando un intruso comprometa uno de los Pods.
Crea un clúster de GKE
En Cloud Shell, escribe el siguiente comando para establecer la variable de entorno para la zona y el nombre del clúster:
Configura el completado de línea de comando de kubectl en Cloud Shell:
source <(kubectl completion bash)
En Cloud Shell, escribe el siguiente comando para crear un clúster de Kubernetes. Ten en cuenta que este comando agrega la marca adicional --enable-network-policy a los parámetros que usaste en labs anteriores. Esta marca permite que el clúster utilice las políticas de red correspondientes:
Ejecuta una aplicación de servidor web sencilla con la etiqueta app=hello y expón la aplicación web internamente en el clúster:
kubectl run hello-web --labels app=hello \
--image=gcr.io/google-samples/hello-app:1.0 --port 8080 --expose
Restringe el tráfico entrante a los Pods
Creemos un archivo de manifiesto NetworkPolicy de muestra llamado hello-allow-from-foo.yaml. Este archivo de manifiesto define una política de entrada que permite acceder a Pods con la etiqueta app: hello desde Pods con la etiqueta app: foo.
Crea y abre un archivo llamado hello-allow-from-foo.yaml con nano usando el siguiente comando:
nano hello-allow-from-foo.yaml
Una vez que nano se abra, pega lo siguiente en el archivo hello-allow-from-foo.yaml:
Presiona Ctrl + O y, luego, Intro para guardar el archivo editado.
Presiona Ctrl + X para salir del editor de texto nano.
Crea una política de entrada:
kubectl apply -f hello-allow-from-foo.yaml
Verifica que se haya creado la política:
kubectl get networkpolicy
Resultado:
NAME POD-SELECTOR AGE
hello-allow-from-foo app=hello 7s
Valida la política de entrada
Ejecuta un Pod temporal llamado test-1 con la etiqueta app=foo y obtén una shell en el Pod:
kubectl run test-1 --labels app=foo --image=alpine --restart=Never --rm --stdin --tty
Nota: Es importante tener en cuenta los interruptores de kubectl que se usan aquí junto con el comando run.
--stdin (alternativamente -i) crea una sesión interactiva adjunta a STDIN en el contenedor.
--tty (alternativamente -t) asigna un TTY para cada contenedor en el pod.
--rm indica a Kubernetes que trate esto como un Pod temporal que se quitará tan pronto como complete su tarea de inicio. Como se trata de una sesión interactiva, se quitará cuando el usuario salga de la sesión.
--label (alternativamente -l) agrega un conjunto de etiquetas al Pod.
--restart define la política de reinicio del Pod.
Realiza una solicitud al extremo hello-web:8080 para verificar que esté permitido el tráfico entrante:
wget -qO- --timeout=2 http://hello-web:8080
Resultado:
If you don't see a command prompt, try pressing enter.
/ # wget -qO- --timeout=2 http://hello-web:8080
Hello, world!
Version: 1.0.0
Hostname: hello-web-8b44b849-k96lh
/ #
Escribe exit y presiona INTRO para salir de la shell.
Ahora ejecutarás un Pod diferente con el mismo nombre de Pod, pero con la etiqueta app=other, que no coincide con el podSelector en la política de red activa. Este Pod no debería tener la capacidad de acceder a la aplicación hello-web.
kubectl run test-1 --labels app=other --image=alpine --restart=Never --rm --stdin --tty
Realiza una solicitud al extremo hello-web:8080 para verificar que no esté permitido el tráfico entrante:
wget -qO- --timeout=2 http://hello-web:8080
Se agota el tiempo de espera de la solicitud.
Resultado:
If you don't see a command prompt, try pressing enter.
/ # wget -qO- --timeout=2 http://hello-web:8080
wget: download timed out
/ #
Escribe exit y presiona INTRO para salir de la shell.
Restringe el tráfico saliente de los Pods
Puedes restringir el tráfico saliente (salida) como lo haces con el tráfico entrante. Sin embargo, para consultar nombres de host internos (como hello-web) o nombres de host externos (como www.example.com), debes permitir la resolución del DNS en tus políticas de red de salida. El tráfico del DNS se produce en el puerto 53 con los protocolos UDP y TCP.
Creemos un archivo de manifiesto de NetworkPolicy foo-allow-to-hello.yaml. Este archivo define una política que permite que los Pods con la etiqueta app: foo se comuniquen con los Pods etiquetados como app: hello en cualquier número de puerto y permite que los Pods con la etiqueta app: foo se comuniquen con cualquier computadora en el puerto UDP 53, que se usa para la resolución del DNS. Sin el puerto DNS abierto, no podrás resolver los nombres de host.
Crea y abre un archivo llamado foo-allow-to-hello.yaml con nano usando el siguiente comando:
nano foo-allow-to-hello.yaml
Una vez que nano se abra, pega lo siguiente en el archivo foo-allow-to-hello.yaml:
Presiona Ctrl + O y, luego, Intro para guardar el archivo editado.
Presiona Ctrl + X para salir del editor de texto nano.
Crea una política de salida:
kubectl apply -f foo-allow-to-hello.yaml
Verifica que se haya creado la política:
kubectl get networkpolicy
Resultado:
NAME POD-SELECTOR AGE
foo-allow-to-hello app=foo 7s
hello-allow-from-foo app=hello 5m
Valida la política de salida
Implementa una nueva aplicación web llamada hello-web-2 y exponla internamente en el clúster:
kubectl run hello-web-2 --labels app=hello-2 \
--image=gcr.io/google-samples/hello-app:1.0 --port 8080 --expose
Ejecuta un Pod temporal con la etiqueta app=foo y obtén un prompt de shell dentro del contenedor:
kubectl run test-3 --labels app=foo --image=alpine --restart=Never --rm --stdin --tty
Verifica que el Pod pueda establecer conexiones con hello-web:8080:
wget -qO- --timeout=2 http://hello-web:8080
Resultado:
If you don't see a command prompt, try pressing enter.
/ # wget -qO- --timeout=2 http://hello-web:8080
Hello, world!
Version: 1.0.0
Hostname: hello-web
/ #
Verifica que el Pod no pueda establecer conexiones con hello-web-2:8080:
wget -qO- --timeout=2 http://hello-web-2:8080
Esto falla porque ninguna de las políticas de red que definiste permiten el tráfico a los Pods con la etiqueta de recurso app: hello-2.
Verifica que el Pod no pueda establecer conexiones con sitios web externos, como www.example.com:
wget -qO- --timeout=2 http://www.example.com
Esto falla porque las políticas de red no permiten el tráfico HTTP externo (puerto TCP 80).
Escribe exit y presiona INTRO para salir de la shell.
Haz clic en Revisar mi progreso para verificar el objetivo.
Ejecutar aplicaciones de servidor web
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 configurar las herramientas de redes de Google Kubernetes Engine (GKE)
Duración:
0 min de configuración
·
Acceso por 60 min
·
60 min para completar