Hola a todos, bienvenidos a una nueva publicación acerca de Kasten by Veeam. En esta ocasión veremos como desplegar Kasten en modo Air Gap, donde nuestra plataforma Kubernetes no tiene acceso directo a Internet.

De acuerdo a la documentación de Kasten, por defecto, cuando desplegamos Kasten K10 necesitamos acceso a través de internet a 3 repositorios:

  • Repositorio Helm que contiene el chart de K10
  • El Container Registry que contiene las imagenes de los contenedores para K10
  • Repositorios adicionales para instalas las dependencias de K10, como por ejemplo Prometheus.

 

No obstante, es común encontrar despliegues de Kubernetes en modo Air-Gap, es decir, que no cuentan con acceso a internet como una medida de seguridad.  Para estos casos, existen distintas alternativas para desplegar Kasten sin requerir acceso a internet.

 

Lista de Materiales

En primer lugar, veamos lo que necesitamos:

  • Una plataforma Kubernetes operativa y con una versión soportada, en modo air-gap (sin acceso a internet)
  • Un Container Registry para almacenar localmente las imagenes de K10 y dependencias.
  • Si es requerido, credenciales de acceso al Private Container Registry
  • Una maquina con acceso a Interner y al Private Container Registry, y con el cliente Docker, que utilizaremos para subir las imagenes al repositorio.

 

Pasos previos

Antes de comenzar, en caso de que nuestro Container Registry requiera autenticación, deberemos configurar el fichero  ~/. docker/config. json, donde podremos indicar las credenciales de acceso a nuestro Private Container Registry.  El fichero debiera incluir las siguientes lineas:

Copy to Clipboard

 

  • En primer lugar indicamos la URL de acceso a nuestro Private Container  Registry, en mi caso https://minio.homelab.local:5000
  • Luego, en auth proveemos un string username:password codificado en base64, y que utilizaremos para proveer las credenciales.  Para obtener este string, ejecutamos el siguiente comando indicando el username y password requeridos:
Copy to Clipboard

 

Subir imagenes al Private Container Registry

El siguiente paso, es subir las imagenes requeridas para la instalación de Kasten, a nuestro Private Container  Registry.  Para esto, necesitamos obviamente una maquina con acceso a internet y al Private Container Registry.  Claramente no puede ser ninguno de los servidores Kubernetes, ya que estos estando en modo Air Gap no tienen conexión a Internet, pero es posible utilizar cualquier otra maquina que cuenta con el Docker Client y acceso a Internet y al Private Container Registry.

  • En primer lugar, podemos listar todas las imagenes utilizadas por la versión actual de Kasten K10.   Esto puede ser de utilidad si hay un requerimiento de añadir un tag a las imagenes de K10 antes de subirlas (push) manualmente al Private Registry.   En nuestro caso no es requerido, por lo que solo lo ejecutamos de manera informativa:
Copy to Clipboard

 

 

  • Luego, con el siguiente comando ejecutaremos la herramienta k10offline, junto con el uso de docker-in-docker, para descargar todas las imagenes de Kasten K10 en el Private Container Registry.  Durante el proceso, este comando descargará (pull) todas las imagenes de Kasten K10 desde los repositorios por defecto a través de internet, se le aplicará un tag para utilizar el Private Container Registry (minio.homelab.local:5000), y luego serán cargadas (push) en el Private Container Registry especificado.

 

Copy to Clipboard

 

 

Ya con estos pasos hemos podido copiar exitosamente las images requeridas por Kasten K10 a nuestro Private Container Registry.  Con esto, ya podemos proceder con el despliegue de Kasten K10, lo cual en nuestro caso lo realizaremos en un cluster Kubernetes on-premises, y utilizando metallb como Load Balancer para proveer acceso al dashboard de Kasten K10.

 

Instalar Kasten K10

Como ya hemos visto en publicaciónes anteriores, es necesario previamente haber creado el namespace donde instalaremos Kasten, en nuestro caso crearemos el Namespace llamado kasten-io

Copy to Clipboard

 

Ya en este punto podemos comenzar con la instalación de Kasten K10, para lo cual ejecutaremos el siguiente comando:

Copy to Clipboard

 

En este comando vemos los siguientes parametros:

  • Parametro para el uso de un Private Container Registry (en este caso llamado minio.homelab.local:5000).
    • Importante: Esto por si mismo no activa el modo Air-Gap de Kasten K10, sino que simplemente selecciona el uso de un Registry local.  Es decir, podemos utilizar un Private Container Registry, aun si tenemos acceso a internet desde el cluster Kubernetes.
    • set global.airgapped.repository=minio.homelab.local:5000
  • En caso de que el Private Container Registry requiera autenticación, proveer acceso al fichero config.json que contenga las credenciales requeridas (ver en pasos previos) utilizando los siguientes parametros.
    • set secrets.dockerConfig=$(base64 -w 0 < ${HOME}/.docker/config.json)
  • El Helm chart de Kasten por defecto crea un secreto llamado “k10-erc” con los valores indicados en el parametro secrets.dockerConfig.  Para que este secreto sea utilizado al momento de que se obtengan las imagenes (pull) desde el Private Container Registry, debemos incluir el siguiente parametro.
    • set global.imagePullSecret=”k10-ecr”
  • Para ejecutar Kasten K10 en una red sin acceso a Internet, necesitamos habilitar el modo Air-Gap de K10 con el siguiente parametro.
    • set metering.mode=airgap
    • Importante: Si no incluimos este parametro al desplegar Kasten en un cluster K8s en modo Air Gap, algunas funcionalidades serán deshabilitadas, incluyendo la validación de licencias.  Adicionalmente nos encontraremos con multiples mensajes de errores.
  • Parametro que permite utilizar Load Balancer para acceso externo
    • set externalGateway.create=true
  • Parametro opcional para especificar el tipo de autenticación. En este caso, utilizaremos autenticación basada en tokens como hemos hecho previamente en otros ejemplos de instalación de Kasten.
    • set auth.tokenAuth.enabled=true

 

 

Vemos que Kasten se ha instalado exitosamente, y que podemos acceder via browser a través de la IP provista por el Load balancer. En mi caso, http://172.20.0.151/k10/#/

 

 

Queda ahora obtener token para poder autenticarnos en Kasten K10 utilizando los siguientes comandos:

Copy to Clipboard

 

Copiamos el token de seguridad que nos entrega el comando, y lo pegamos en el navegador:

 

Con esto, completamos la instalación de Kasten en modo Air Gap, luego de lo cual podemos continuar con la configuración inicial de Kasten, para luego crear politicas de respaldo para proteger nuestras aplicaciones:

 

 

Como ven, no es proceso extremadamente complejo ante un escenario que es bastante común en despliegues de Kubernetes en entornos de producción.  Nos vemos en otra ocasión!!!