Saltar a contenido

Microsoft Azure

El mejor método para realizar copias de seguridad de clústeres de Kubernetes que se ejecutan en la plataforma Azure consiste en conceder al agente de copia de seguridad de Afi acceso para gestionar las instantáneas de volumen directamente mediante la API de Azure, en lugar de la API CSI genérica. Con esta integración, Afi utiliza la API de seguimiento de bloques modificados proporcionada por Azure para realizar copias de seguridad incrementales rápidas y ligeras.

Un clúster de Azure Kubernetes Service (AKS) necesita una identidad para acceder a recursos de Azure como discos administrados e instantáneas. Esta identidad puede ser una de las siguientes:

  • identidad administrada: una identidad administrada es un tipo de identidad gestionado por la plataforma Azure y no requiere que el usuario aprovisione o rote ningún secreto. Para obtener más información sobre las identidades administradas de Microsoft Entra ID, consulte Identidades administradas.
  • entidad de servicio: una entidad de servicio es una identidad de seguridad que utilizan las aplicaciones creadas por usuarios, los servicios y las herramientas de automatización para acceder a los recursos de Azure. Puede considerarse una «identidad de usuario» (inicio de sesión y contraseña o certificado) con un rol concreto y permisos estrictamente controlados para acceder a sus recursos. Para obtener más información sobre las entidades de servicio de Microsoft Entra ID, consulte Entidad de servicio.

Las identidades administradas son, en esencia, un contenedor de entidades de servicio que simplifica su gestión. Los mismos requisitos de permisos se aplican tanto a las entidades de servicio como a las identidades administradas.

Para continuar con la configuración, localice el grupo de recursos asociado a su clúster de AKS, configure una identidad administrada o una entidad de servicio que pueda gestionar las instantáneas y los discos del clúster, y comparta sus credenciales con el agente de copia de seguridad de Afi.

Localizar un grupo de recursos asociado al clúster de AKS

Cuando se crea un clúster de AKS en un grupo de recursos concreto, AKS crea otro grupo de recursos asociado al clúster, que contiene sus elementos aks-nodepool, disks y snapshots. Para utilizar directamente la API de AKS en la gestión de instantáneas, Afi Kubernetes Backup necesita acceder a este grupo de recursos. El formato de su nombre es mc_{resource-group}_{cluster}_{zone}.

Por ejemplo, si tiene un clúster de AKS en el grupo de recursos k8s y en la ubicación de Azure eastus, el grupo de recursos correspondiente debe ser mc_k8s_kn-0_eastus.

Configurar el acceso a la API de Azure mediante una identidad administrada

Requisitos previos

Para utilizar esta opción de configuración, el clúster de AKS debe admitir identidades administradas. En los siguientes artículos de la documentación de Azure se explica cómo crear un clúster de AKS compatible con identidades administradas o actualizar uno existente para que las utilice:

Crear un rol personalizado

A continuación se muestra la descripción JSON de un rol personalizado de Azure denominado k8sbackup, necesario para gestionar instantáneas (sustituya ${SubscriptionId} por el identificador de su suscripción de Azure). Guárdela en un archivo denominado role.json:

{
  "Name": "k8sbackup",
  "IsCustom": true,
  "Description": "",
  "Actions": [
    "Microsoft.Compute/snapshots/write",
    "Microsoft.Compute/snapshots/read",
    "Microsoft.Compute/snapshots/delete",
    "Microsoft.Compute/snapshots/beginGetAccess/action",
    "Microsoft.Compute/snapshots/endGetAccess/action",
    "Microsoft.Compute/disks/write",
    "Microsoft.Compute/disks/read",
    "Microsoft.Compute/disks/delete",
    "Microsoft.Compute/disks/beginGetAccess/action",
    "Microsoft.Authorization/*/read"
  ],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/${SubscriptionId}"
  ]
}

Cree un rol personalizado:

az role definition create --role-definition "role.json"

El nuevo rol personalizado ya está disponible y puede asignarse a usuarios, grupos o entidades de servicio, al igual que los roles integrados. Para obtener más información, consulte el artículo Crear un rol personalizado en la documentación de Azure.

Crear una identidad administrada

Cree una identidad administrada denominada myIdentity ejecutando el siguiente comando az identity:

az identity create --name myIdentity --resource-group myResourceGroup

El resultado del comando debe ser similar al siguiente:

{                                  
  "clientId": "<client-id>",
  "clientSecretUrl": "<clientSecretUrl>",
  "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
  "location": "eastus",
  "name": "myIdentity",
  "principalId": "<principal-id>",
  "resourceGroup": "myResourceGroup",                       
  "tags": {},
  "tenantId": "<tenant-id>",
  "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}

Guarde el valor clientId para utilizarlo más adelante.

Añadir una asignación de roles para la identidad del plano de control

Asigne el rol k8sbackup a la identidad administrada myIdentity creada en el paso anterior. De este modo, myIdentity podrá gestionar los discos y las instantáneas de Azure del grupo de recursos asociado a su clúster de AKS (myResourceGroup).

az role assignment create --assignee ${clientId} --role "k8sbackup" \
    --scope subscriptions/${SubscriptionId}/resourceGroups/myResourceGroup

Asignar la identidad administrada al conjunto de escalado de máquinas virtuales

Asigne la identidad administrada myIdentity al conjunto de escalado de máquinas virtuales existente asociado al clúster de AKS y actualice las instancias.

az vmss identity assign -g myResourceGroup -n aks-nodepool-name \
    --identities myIdentity
az vmss update-instances -g myResourceGroup -n aks-nodepool-name \
    --instance-ids "*"

Crear el Secret azure-api-key y reiniciar el agente de copia de seguridad

Cree un Secret de Kubernetes denominado azure-api-key en el espacio de nombres donde esté instalado el agente de copia de seguridad de Afi:

kubectl -n backup-agent create secret generic azure-api-key \
    --from-literal=client-id=${clientId}

Reinicie el DaemonSet que crea instantáneas de los volúmenes persistentes:

kubectl -n backup-agent rollout restart ds/pvsnapshotter

Configurar el acceso a la API de Azure mediante una entidad de servicio

Crear un rol personalizado

A continuación se muestra la descripción JSON de un rol personalizado de Azure denominado k8sbackup, necesario para gestionar instantáneas (sustituya ${SubscriptionId} por el identificador de su suscripción de Azure). Guárdela en un archivo denominado role.json:

{
  "Name": "k8sbackup",
  "IsCustom": true,
  "Description": "",
  "Actions": [
    "Microsoft.Compute/snapshots/write",
    "Microsoft.Compute/snapshots/read",
    "Microsoft.Compute/snapshots/delete",
    "Microsoft.Compute/snapshots/beginGetAccess/action",
    "Microsoft.Compute/snapshots/endGetAccess/action",
    "Microsoft.Compute/disks/write",
    "Microsoft.Compute/disks/read",
    "Microsoft.Compute/disks/delete",
    "Microsoft.Compute/disks/beginGetAccess/action",
    "Microsoft.Authorization/*/read"
  ],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/${SubscriptionId}"
  ]
}

Cree un rol personalizado:

az role definition create --role-definition "role.json"

El nuevo rol personalizado k8sbackup ya está disponible y puede asignarse a usuarios, grupos o entidades de servicio, al igual que los roles integrados. Para obtener más información, consulte el artículo Crear un rol personalizado en la documentación de Azure.

Crear una entidad de servicio

Cree una entidad de servicio denominada myServicePrincipal y configure su acceso al grupo de recursos de Azure myResourceGroup:

az ad sp create-for-rbac --name myServicePrincipal \
    --role k8sbackup \
    --scopes subscriptions/${SubscriptionId}/resourceGroups/myResourceGroup

El resultado del comando debe ser similar al siguiente:

{
  "appId": "<appId>",
  "displayName": "myServicePrincipal",
  "password": "<password>",
  "tenant": "<tenant>"
}

Guarde los valores appId, password y tenant para utilizarlos más adelante.

Crear el Secret azure-api-key y reiniciar el agente de copia de seguridad

Cree un Secret de Kubernetes denominado azure-api-key en el espacio de nombres donde esté instalado el agente de copia de seguridad de Afi:

kubectl -n backup-agent create secret generic azure-api-key \
    --from-literal=client-id=${appId} \
    --from-literal=client-secret=${password} \
    --from-literal=tenant-id=${tenant}

Reinicie el DaemonSet que crea instantáneas de los volúmenes persistentes:

kubectl -n k8sbackup rollout restart ds/pvsnapshotter