Como Instalar Kasten K10 en Azure AKS

Continuando con la serie de guías para la protección de aplicaciones sobre servicios de Kubernetes en nubes públicas, ahora es el turno de Microsoft Azure Kubernetes Service o Azure AKS, donde revisaremos paso a paso la instalación, configuración y ejecución de políticas de respaldos con Kasten K10, integrando la consola con K10 Multi-Cluster Manager para conseguir una gestión y protección centralizada de las aplicaciones en AKS.

Primeros Pasos

Siempre debemos revisar la documentación oficial de Kasten, para la instalación debemos revisar los siguientes enlaces y por supuesto nunca olvidar la ejecución de los “Pre-Flight Checks”:

Ahora pasaremos a conectarnos vía “cli” a nuestro cluster AKS desde la interfaz de consola en el portal de Azure o desde tu computador donde administras tus clusters de kubernetes. En el caso de que aún no tengas configurado el archivo kubeconfig, solo debes ejecutar el siguiente comando en la shell de Azure:

az aks get-credentials -g 24xsiempre -n demoaks

Donde después de “-g” debes ingresar el nombre del “Resource Group” asociado y después del “-n” debes ingresar el nombre del cluster AKS, con el comando anterior se creará el archivo “config” dentro de la carpeta “.kube” en el home del usuario. Y para validar, puedes listar los nodos del cluster AKS ejecutando:

kubectl get nodes -o wide

Instalar Kasten K10 en Azure AKS

Ya que estamos conectados al cluster Azure AKS, ejecutaremos el comando de pre-requisitos que nos indica la documentación de Kasten, por tanto procederemos a crear el namespace “kasten-io” para luego ejecutar el script:

helm repo add kasten https://charts.kasten.io/
kubectl create namespace kasten-io
curl https://docs.kasten.io/tools/k10_primer.sh | bash

Es muy importante registrar los mensajes que entrega el script de pre-check, ya que nos indicará que hace falta un “VolumeSnapshotClass” para el StorageClass que se esta utilizando por defecto en AKS, que revisaremos más adelante. Antes de proceder con la instalación vía “helm”, debemos registrar una aplicación en Azure para obtener las variables necesarias, por tanto en el portal de Azure, el el directorio por defecto, crearemos una nueva aplicación:

Luego crearemos la clave en “Certificados y Secretos”, asignaremos el nombre y creamos:

Luego de la creación de la aplicación en Azure, tomaremos los siguientes datos:

  • azureTenantId
  • azureClientId
  • azureClientSecret

Los primeros dos ID los encontrarás en la “Informacion General” de la aplicacion creada y el tercero o secret lo copias desde la creacion anterior, para generar el siguiente comando:

helm install k10 kasten/k10 --namespace=kasten-io \
    --set secrets.azureTenantId=9afedb96-a2f5-4e9c-a78a-123456789012 \
    --set secrets.azureClientId=849b0886-5fa1-4464-863d-123456789012 \
    --set secrets.azureClientSecret=iJ57Q~KGK5euTOLkIS1duXDx~123456789012 \
    --set externalGateway.create=true \
    --set auth.tokenAuth.enabled=true

Con lo anterior, instalamos Kasten K10 en Azure AKS incluyendo la creación del “LoadBalancer” y la autenticacion por token, que hemos revisado en muchas ocasiones. Para validar el correcto funcionamiento de Kasten K10, debes ejecutar el comando:

kubectl  get pods -n kasten-io

Al estar todos los pods en “Running” procederemos a revisar cual es la dirección IP de acceso a la interfaz web de Kasten K10 con el siguiente comando:

kubectl get svc -n kasten-io

Por tanto, el acceso a la consola, en este caso, es http://20.98.177.166/k10/ donde podremos autenticarnos vía token:

Si aun no sabes como extraer el token

sa_secret=$(kubectl get serviceaccount k10-k10 -o jsonpath="{.secrets[0].name}" --namespace kasten-io)
kubectl get secret $sa_secret --namespace kasten-io -ojsonpath="{.data.token}{'\n'}" | base64 --decode

Integración con K10 Multi-Cluster Manager

Si aún no tienes instalado K10 Multi-Cluster Manager, revisa:

Y en este caso para Microsoft AKS debemos copiar el kubeconfig del cluster AKS, dentro de la shell de Azure ejecutaremos:

cat .kube/config

Copiamos el kubeconfig y lo pegamos en nuestro K10 Multi-Cluster Manager, despues de hacer clic en “Add Cluster”:

Un dato importante, en este caso, no es necesario preparar el archivo kubeconfig con el ejecutable k10multicluster, como si lo necesitan otros proveedores, por tanto, la configuración es directa, ingresas el nombre del cluster que aparecerás, la dirección del “Ingress URL” y por ultimo deshabilitando la verificación TLS. En caso de tener activado TLS, solo déjalo por defecto y podrás ver el cluster AKS en la consola Multi-Cluster:

Azure Blob Storage

Ahora configuraremos en “Location Profiles” un repositorio para alojar nuestros respaldos, ingresamos el nombre, seleccionamos “Azure Storage” e ingresamos las credenciales, ubicación y contenedor

Al guardar el “Profile” tendremos nuestro repositorio para alojar respaldos y se verá:

Política de Respaldo Azure AKS

Crearemos una política de respaldo básica seleccionando “Snapshot” y utilizando el repositorio creado anteriormente para luego ejecutar la politica:

Cuando la política se ejecuta y trata de realizar un snapshot al volumen persistente que esta utilizando , en este caso, MongoDB, nos mostrará el siguiente error:

...
Failed to run CSI prechecks for PVC
Failed to get K10 VolumeSnapshotClass
...

Y aqui es donde se demuestra que es muy importante ejecutar el script que revisa los “Pre-Flight Checks”, ya que al ejecutarlo por primera vez nos indicará que no existe el “VolumeSnapshotClass” como lo vimos anteriormente. Por tanto, procederemos a crear el VSC con el siguiente comando:

cat <<EOF | kubectl apply -f -
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshotClass
metadata:
  annotations:
    k10.kasten.io/is-snapshot-class: "true"
  name: csi-azure-vsc
driver: disk.csi.azure.com
deletionPolicy: Delete
parameters:
  incremental: "true"
EOF

Y luego ejecutamos nuevamente el script de “Pre-Flight Checks”:

curl https://docs.kasten.io/tools/k10_primer.sh | bash

Y veremos el mensaje exitoso de la configuración correcta de este VSC con el StorageClass por defecto. Luego ejecuta nuevamente la política de respaldo y terminará exitosamente:

Respaldos en Azure Blob

Para el respaldo, podremos ver los archivos generados por Kasten K10 en el contenedor de Azure Blob que configuramos anteriormente en “Location Profiles”, ingresando al explorador de Storage del portal de Microsoft Azure:

Recomendaciones

Como siempre, la seguridad es lo primero, aplicando accesos solo por direcciones de confianza como también aplicar RBAC al acceso vía Multi-Cluster Manager y por supuesto si es necesario aplicar los permisos a las cuentas de servicios con el mínimo de acceso para el funcionamiento.