Microsoft Azure¶
Für Kubernetes-Cluster auf der Azure-Plattform empfiehlt es sich, dem Afi-Sicherungsagenten die direkte Verwaltung von Volume-Snapshots über die Azure-API zu ermöglichen, statt die generische CSI-API zu verwenden. Mit dieser Integration nutzt Afi die von Azure bereitgestellte Changed-Block-Tracking-API für schnelle und ressourcenschonende inkrementelle Sicherungen.
Ein Azure Kubernetes Service (AKS)-Cluster benötigt eine Identität, um auf Azure-Ressourcen wie verwaltete Datenträger und Snapshots zuzugreifen. Dafür kann eine der folgenden Identitäten verwendet werden:
- Verwaltete Identität – Eine verwaltete Identität wird von der Azure-Plattform verwaltet. Benutzer müssen keine geheimen Schlüssel bereitstellen oder rotieren. Weitere Informationen finden Sie unter Verwaltete Identitäten in der Dokumentation zu Microsoft Entra ID.
- Dienstprinzipal – Ein Dienstprinzipal ist eine Sicherheitsidentität, über die von Benutzern erstellte Apps, Dienste und Automatisierungstools auf Azure-Ressourcen zugreifen. Sie können ihn sich als „Benutzeridentität“ mit Anmeldung und Kennwort oder Zertifikat, einer bestimmten Rolle und streng kontrollierten Zugriffsberechtigungen für Ihre Ressourcen vorstellen. Weitere Informationen finden Sie unter Anwendungs- und Dienstprinzipalobjekte in der Dokumentation zu Microsoft Entra ID.
Verwaltete Identitäten sind im Wesentlichen eine Abstraktion für Dienstprinzipale und vereinfachen deren Verwaltung. Für Dienstprinzipale und verwaltete Identitäten gelten dieselben Berechtigungsanforderungen.
Um mit der Konfiguration fortzufahren, ermitteln Sie zunächst die Ihrem AKS-Cluster zugeordnete Ressourcengruppe. Konfigurieren Sie anschließend eine verwaltete Identität oder einen Dienstprinzipal, die beziehungsweise der Snapshots und Datenträger in Ihrem AKS-Cluster verwalten kann, und stellen Sie dem Afi-Sicherungsagenten die zugehörigen Anmeldedaten bereit.
Dem AKS-Cluster zugeordnete Ressourcengruppe ermitteln¶
Wenn Sie einen AKS-Cluster in einer bestimmten Ressourcengruppe erstellen, legt AKS eine weitere zugehörige Ressourcengruppe an. Darin befinden sich der aks-nodepool, die Datenträger und die Snapshots des Clusters. Für die direkte Snapshot-Verwaltung über die AKS-API benötigt Afi Kubernetes Backup Zugriff auf diese Ressourcengruppe. Ihr Name hat das Format mc_{resource-group}_{cluster}_{zone}.
Wenn sich Ihr AKS-Cluster beispielsweise in der Ressourcengruppe k8s und am Azure-Standort eastus befindet, sollte die zugehörige Ressourcengruppe mc_k8s_kn-0_eastus heißen.
Azure-API-Zugriff über eine verwaltete Identität einrichten¶
Voraussetzungen¶
Damit Sie diese Konfigurationsmöglichkeit verwenden können, muss der AKS-Cluster verwaltete Identitäten unterstützen. Die folgenden Artikel der Azure-Dokumentation beschreiben, wie Sie einen AKS-Cluster mit Unterstützung für verwaltete Identitäten erstellen oder einen vorhandenen AKS-Cluster auf verwaltete Identitäten umstellen:
- AKS-Cluster mit einer verwalteten Identität erstellen
- Vorhandenen AKS-Cluster auf eine verwaltete Identität umstellen
Benutzerdefinierte Rolle erstellen¶
Nachfolgend finden Sie die JSON-Beschreibung der benutzerdefinierten Azure-Rolle k8sbackup, die für die Snapshot-Verwaltung erforderlich ist. Ersetzen Sie ${SubscriptionId} durch die ID Ihres Azure-Abonnements und speichern Sie die Beschreibung in einer Datei namens 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}"
]
}
Erstellen Sie die benutzerdefinierte Rolle:
Die neue benutzerdefinierte Rolle ist nun verfügbar und kann wie eine integrierte Rolle Benutzern, Gruppen oder Dienstprinzipalen zugewiesen werden. Weitere Informationen finden Sie unter Benutzerdefinierte Azure-Rolle erstellen in der Azure-Dokumentation.
Verwaltete Identität erstellen¶
Erstellen Sie die verwaltete Identität myIdentity, indem Sie den folgenden Befehl az identity ausführen:
Die Befehlsausgabe sollte wie folgt aussehen:
{
"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"
}
Speichern Sie den Wert clientId zur späteren Verwendung.
Rollenzuweisung für die Identität der Steuerungsebene hinzufügen¶
Weisen Sie die Rolle k8sbackup der im vorherigen Schritt erstellten verwalteten Identität myIdentity zu. Dadurch kann myIdentity die Azure-Datenträger und -Snapshots in der Ihrem AKS-Cluster zugeordneten Ressourcengruppe (myResourceGroup) verwalten.
az role assignment create --assignee ${clientId} --role "k8sbackup" \
--scope subscriptions/${SubscriptionId}/resourceGroups/myResourceGroup
Verwaltete Identität der VM-Skalierungsgruppe zuweisen¶
Weisen Sie die verwaltete Identität myIdentity der vorhandenen, dem AKS-Cluster zugeordneten VM-Skalierungsgruppe zu und aktualisieren Sie deren VM-Instanzen.
Secret azure-api-key erstellen und Sicherungsagenten neu starten¶
Erstellen Sie im Namespace, in dem der Afi-Sicherungsagent installiert ist, ein Kubernetes-Secret namens azure-api-key:
Starten Sie das DaemonSet, das Snapshots persistenter Volumes erstellt, neu:
Azure-API-Zugriff über einen Dienstprinzipal einrichten¶
Benutzerdefinierte Rolle erstellen¶
Nachfolgend finden Sie die JSON-Beschreibung der benutzerdefinierten Azure-Rolle k8sbackup, die für die Snapshot-Verwaltung erforderlich ist. Ersetzen Sie ${SubscriptionId} durch die ID Ihres Azure-Abonnements und speichern Sie die Beschreibung in einer Datei namens 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}"
]
}
Erstellen Sie die benutzerdefinierte Rolle:
Die neue benutzerdefinierte Rolle k8sbackup ist nun verfügbar und kann wie eine integrierte Rolle Benutzern, Gruppen oder Dienstprinzipalen zugewiesen werden. Weitere Informationen finden Sie unter Benutzerdefinierte Azure-Rolle erstellen in der Azure-Dokumentation.
Dienstprinzipal erstellen¶
Erstellen Sie den Dienstprinzipal myServicePrincipal und konfigurieren Sie seinen Zugriff auf die Azure-Ressourcengruppe myResourceGroup:
az ad sp create-for-rbac --name myServicePrincipal \
--role k8sbackup \
--scopes subscriptions/${SubscriptionId}/resourceGroups/myResourceGroup
Die Befehlsausgabe sollte wie folgt aussehen:
{
"appId": "<appId>",
"displayName": "myServicePrincipal",
"password": "<password>",
"tenant": "<tenant>"
}
Speichern Sie die Werte appId, password und tenant zur späteren Verwendung.
Secret azure-api-key erstellen und Sicherungsagenten neu starten¶
Erstellen Sie im Namespace, in dem der Afi-Sicherungsagent installiert ist, ein Kubernetes-Secret namens azure-api-key:
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}
Starten Sie das DaemonSet, das Snapshots persistenter Volumes erstellt, neu: