Como Instalar Kasten K10 en Google GKE

De acuerdo a las ultimas encuestas por cncf.io y otras empresas, uno de los servicios más utilizados es Google Kubernetes Engine, GKE, por tanto, como es de esperar, siempre se necesita realizar la protección de las aplicaciones que se ejecutan en este tipo de servicios, como también, la utilización de la infraestructura de Google para almacenar los respaldos. En esta guía veremos como instalar Kasten K10 para proteger las aplicaciones que se ejecutan en GKE y ademas integrarlo con K10 Multi-Cluster Manager.

Primeros Pasos

Como siempre debemos visitar la documentación oficial de Kasten K10 para instalar la solución en Google Kubernetes Engine:

Después de leer la documentación confirmaremos lo sencillo que es instalar Kasten K10 en Google Kubernetes Engine, ya que, la recomendación es instalarlo con una cuenta de servicios (Service Account), ya que Kasten necesita dos tipos de cuentas de servicio, una para acceder a la infraestructura de Google, como por ejemplo el almacenamiento y otra para acceder a los recursos de kubernetes. Revisaremos la opción de una cuenta de servicio por separada ya que es la recomendación y buena practica para realizar la protección de las aplicaciones en GKE

Creación Cuenta de Servicio Google Cloud

Primero nos aseguraremos que estamos en la consola de Google Cloud y tenemos acceso al Cluster de GKE:

Luego accederemos a la “Cloud Shell” de Google haciendo clic en el icono de “Prompt” al lado izquierdo del signo de interrogación en el lado superior derecho de la consola de Google:

Luego ejecutaremos el siguiente comando para acceder al cluster GKE:

gcloud container clusters get-credentials NombreMiClusterGKE --zone ZonaGoogle

Donde debes ingresar el nombre de tu cluster GKE y la zona donde la configuraste, por ejemplo en este caso, el nombre del cluster es “demo-gke-k10” y la zona es “us-central1-c”:

Con esto, aseguramos la configuración del archivo kubeconfig en .kube/config para la gestión via kubectl, si ejecutamos el siguiente comando veremos los nodos en ejecución en GKE:

kubectl get nodes -o wide

Ya estamos en condiciones de generar la cuenta de servicio. Importante, los permisos que necesitaremos agregar a la cuenta de servicio serán:

  • roles/compute.storageAdmin para el acceso a la infraestructura de Google
  • roles/storage.admin para el acceso a los bucket para respaldo en Google Cloud Storage

*** De acuerdo con la seguridad de cada empresa puedes segmentar los permisos de storage.admin ***

Por tanto, como se indica en la documentación de Kasten procederemos a ejecutar los siguientes comandos en la Cloud Shell de Google:

myproject=$(gcloud config get-value core/project)
gcloud iam service-accounts create k10-sa --display-name "K10 Service Account"
k10saemail=$(gcloud iam service-accounts list --filter "k10-sa" --format="value(email)")
gcloud iam service-accounts keys create --iam-account=${k10saemail} k10-sa-key.json
gcloud projects add-iam-policy-binding ${myproject} --member serviceAccount:${k10saemail} --role roles/compute.storageAdmin

Luego agregaremos los permisos para el acceso a los buckets, por que podría ser la misma cuenta de servicio u otra que se utilice exclusivamente para acceder a los buckets de Google Cloud Storage. Para validar podremos ir a “IAM” dentro de la consola de Google Cloud y confirmaremos al creación de la cuenta de servicio:

Como se ve en la imagen anterior observamos que existe “[email protected]” que es la cuenta de servicio que se ha creado anteriormente con los comandos ejecutados y luego editaremos la cuenta, en este caso, para usarlo para que también acceda a Google Cloud Storage, agregaremos el rol Storage.Admin a la cuenta de servicio:

Y podremos validar que se ha asignado el rol necesario:

Instalación de Kasten K10

Si seguimos al pie de la letra la documentación de Kasten K10, para la instalación, siempre debemos revisar los requisitos previos que mencioné al inicio de este post, agregaremos el repositorio de helm y crearemos el namespace para kasten, de nombre “kasten-io” con los siguiente comandos:

helm repo add kasten https://charts.kasten.io/
kubectl create namespace kasten-io

Ya con lo anterior creado, procedemos a instalar Kasten K10 con la cuenta de servicio que creamos anteriormente y su respectiva key con los siguientes comandos:

sa_key=$(base64 -w0 k10-sa-key.json)
helm install k10 kasten/k10 --namespace=kasten-io --set secrets.googleApiKey=$sa_key

Por ultimo revisamos que todos los pods del namespace estén en “RUNNING”:

kubectl get pods -n kasten-io

Ahora necesitamos acceder a la consola web de Kasten y como lo hemos configurado varias veces en este blog, solo debemos ejecutar el comando:

 helm upgrade k10 kasten/k10 --namespace=kasten-io \
    --reuse-values \
    --set externalGateway.create=true \
    --set auth.tokenAuth.enabled=true

Nuevamente validamos que los pods del namespace de kasten este en “RUNNING” y luego revisamos el servicio que se ha creado para acceder a la consola con el siguiente comando:

kubectl get svc -n kasten-io

Y vemos que en este caso tengo asignada la ip: 34.121.31.71 como “LoadBalancer”, ingresaremos a la web con http://34.121.31.71/k10/#/

Y la credencial es obtener del token, como vimos en un post anterior en este blog, solo debemos ejecutar:

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

Y nos mostrará el token para ingresar:

Configuración Infraestructura Google

Ya mencionamos que Kasten necesita acceso a la infraestructura de Google como también a Google Cloud Storage para alojar los respaldos, ya que configuramos con la cuenta de servicio, el perfil de infraestructura se genera en Kasten automáticamente, para validar, lo podemos ver en la configuración del cluster de Kasten “Settings” y luego en “Infraestructure”:

Ya solo nos falta agregar el repositorio de respaldos con un bucket de Google Cloud Storage, crearemos el bucket de Google de la forma estándar y luego desde kasten ingresas los siguientes datos:

Para generar el service key, ingresamos a “IAM”, luego “Service Accounts”, seleccionamos la cuenta de servicio de Kasten que creamos “k10-sa”, clic en “Keys” y generamos una en formato json:

Donde:

  • Profile Name: Nombre del perfil
  • Cloud Storage Provider: Seleccionamos Google Cloud Storage
  • GCP Project ID: Tomamos el nombre del ID del Projecto de Google en este caso “inspiring-cat-342913”
  • GCP Service key: Copiamos el contenido del json que generamos anteriormente
  • Location: Ubicacion del bucket cuando se genero o lo puedes ver en las propiedades del bucket
  • Bucket Name: Nombre del bucket creado con anterioridad

Y ya estamos listos para realizar respaldos.

Integración con K10 Multi-Cluster Manager

En el siguiente post veremos como integrar nuestro cluster GKE con K10 Multi-Cluster manager, si necesitas instalar K10 Multi-Cluster:

Y en este caso para Google, debemos ejecutar k10multicluster para modificar el kubeconfig del cluster. Para copiar el kubeconfig del cluster GKE, debemos ejecutar en la “Cloud Shell”:

cat .kube/config

Entramos a nuestro cluster primario de kubernetes para Kasten, e ingresamos a la ruta:

cd
cd .kube/

Y generaremos una archivo con nano de nombre google para pegar el contenido del kubeconfig:

nano google

Lo configuramos como variable de entorno en tu perfil y puedes listar los contextos de kubernetes:

kubectl config get-contexts

Y nos centramos en el contexto de Google, en este caso gke_inspiring-cat-342913_us-central1-c_demo-gke-k10 y ejecutaremos el siguiente comando (recuerda poner el contexto de tu cluster):

k10multicluster kubeconfig prepare --context gke_inspiring-cat-342913_us-central1-c_demo-gke-k10

Copiamos el contenido de archivo creado en nuestro K10 Multi-Cluster,

  • Cluster Display Name: nombre que deseamos mostrar del cluster
  • Ingress URL: Direccion de la consola de Kasten en GKE
  • K10 Namespace: Nombre del namespace donde se instalo Kasten
  • Helm release name: k10
  • Insecure TLS: En caso de usar http deshabilitarlo, de lo contrario usar SSL con un certificado valido.

Y ya tenemos nuestro cluster Google GKE gestionado centralizadamente.

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.