Bereitstellen und Konfigurieren des Workloadidentitätsverbunds in Azure Arc-fähigem Kubernetes (Vorschau)
Sie können das Workloadidentitätsfeature in einem Azure Arc-fähigen Kubernetes-Cluster mithilfe der Azure CLI aktivieren. Der Prozess folgt den folgenden allgemeinen Schritten:
- Aktivieren Sie das Workloadidentitätsfeature für einen neuen oder vorhandenen Arc-fähigen Kubernetes-Cluster.
- Erstellen Sie eine verwaltete Identität (oder App-Registrierung) und ein Kubernetes-Dienstkonto.
- Konfigurieren der verwalteten Identität für den Tokenverbund
- Konfigurieren Sie Dienstkontoanmerkungen und Bezeichnungen für Anwendungspods für die Verwendung der Workloadidentität.
- Konfigurieren Sie die Einstellungen für die Workloadidentität im Kubernetes-Cluster.
- Deaktivieren Sie die Workloadidentität im Cluster.
Eine Übersicht über diese Funktion finden Sie im Artikel zum Aktivieren des Workloadidentitätsverbund in Azure Arc-fähigem Kubernetes (Vorschau).
Wichtig
Das Feature für den Azure Arc-Workloadidentitätsverbund befindet sich derzeit in der VORSCHAU. Die zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauen enthalten rechtliche Bedingungen. Sie gelten für diejenigen Azure-Features, die sich in der Beta- oder Vorschauversion befinden oder aber anderweitig noch nicht zur allgemeinen Verfügbarkeit freigegeben sind.
Tipp
In diesem Artikel werden die Schritte beschrieben, die zum Bereitstellen und Konfigurieren der Workloadidentität in einem Arc-fähigen Kubernetes-Cluster erforderlich sind. Informationen zum Aktivieren der Workloadidentität für andere Clustertypen finden Sie in den folgenden Artikeln:
Voraussetzungen
- Die Workloadidentität für Azure Arc-fähige Kubernetes-Cluster (Vorschau) wird für die folgenden Kubernetes-Distributionen unterstützt:
- Ubuntu Linux-Cluster mit K3s
- AKS auf Edge Essentials
- AKS auf HCI 23H2
Um das Workloadidentitätsfeature zu verwenden, benötigen Sie Azure CLI Version 2.64 oder höher und az connectedk8s
-Version 1.10.0 oder höher. Achten Sie darauf, Ihre Azure CLI-Version zu aktualisieren, bevor Sie Ihre az connectedk8s
-Version aktualisieren. Wenn Sie Azure Cloud Shell verwenden, wird die neueste Version der Azure CLI installiert.
Aktivieren der Workloadidentität auf Ihrem Cluster
Führen Sie die entsprechenden Schritte aus, um das Workloadidentitätsfeature für einen neuen Arc-fähigen Kubernetes-Cluster oder einen vorhandenen Cluster zu aktivieren. Achten Sie in beiden Fällen darauf, den Namen und die Ressourcengruppe durch Ihre Werte zu ersetzen und Parameter nach Bedarf zu konfigurieren.
Parameter | Beschreibung des Dataflows | Erforderlich |
---|---|---|
--enable-oidc-issuer |
Generiert und hostet die OIDC-Aussteller-URL. Dabei handelt es sich um eine öffentlich zugängliche URL, mit der der API-Server öffentliche Signaturschlüssel für die Überprüfung von Token finden kann. | Erforderlich |
--enable-workload-identity |
Installiert einen Webhook für die mutierende Zulassung, der ein signiertes Dienstkontotoken in einen bekannten Pfad projiziert und authentifizierungsbezogene Umgebungsvariablen basierend auf den Einstellungen des kommentierten Dienstkontos in die Anwendungspods einfügt. Wenn dieser Parameter für einen neuen Cluster nicht aktiviert ist, müssen Sie ein projiziertes Volume unter einem bekannten Pfad bereitstellen, der das signierte Dienstkontotoken für den Pfad verfügbar macht. | Optional |
Festlegen von Umgebungsvariablen
Aus Gründen der Einfachheit werden die unten definierten Umgebungsvariablen in den Beispielen in diesem Artikel referenziert. Ersetzen Sie diese Werte durch Ihre eigenen Werte:
export RESOURCE_GROUP="myRG"
export LOCATION="eastus"
export CLUSTER_NAME="mycluster"
export SERVICE_ACCOUNT_NAMESPACE="myKubernetesnamespace"
export SERVICE_ACCOUNT_NAME="mysa"
export SUBSCRIPTION="$(az account show --query id --output tsv)"
export USER_ASSIGNED_IDENTITY_NAME="myIdentity"
export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity"
Verwenden Sie den folgenden Befehl, um einen Azure Arc-fähigen Cluster mit aktivierter Workloadidentität zu erstellen:
az connectedk8s connect --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer –-enable-workload-identity
Verwenden Sie den update
-Befehl, um die Workloadidentität in einem vorhandenen Arc-fähigen Kubernetes-Cluster zu aktivieren.
az connectedk8s update --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer --enable-workload-identity
Abrufen der OIDC-Zertifikataussteller-URL
Rufen Sie die URL des OIDC-Ausstellers ab, und speichern Sie sie in einer Umgebungsvariablen. Diese Aussteller-URL wird im folgenden Schritt verwendet.
export OIDC_ISSUER="$(az connectk8s show --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" \
--query "oidcIssuerProfile.issuerUrl" \
--output tsv)"
Um die Umgebungsvariable anzuzeigen, geben Sie echo ${OIDC_ISSUER}
ein. Die Umgebungsvariable sollte die URL des Zertifikatausstellers enthalten, ähnlich wie im folgenden Beispiel:
https://northamerica.oic.prod-arc.azure.com/00000000-0000-0000-0000-000000000000/12345678-1234-1234-1234-123456789123/
Standardmäßig ist der Aussteller auf die Verwendung der Basis-URL https://{region}.oic.prod-arc.azure.com/{tenant_id}/{uuid}
festgelegt, wobei der Wert für {region}
mit dem Speicherort übereinstimmt, an dem der AKS-fähige Kubernetes-Cluster bereitgestellt wird. Der Wert {uuid}
stellt den OpenID Connect-Schlüssel (OIDC) dar, bei dem es sich um eine zufällig generierte, unveränderliche GUID für jeden Cluster handelt.
Erstellen einer verwalteten Identität
Verwenden Sie den Befehl az identity create
zum Erstellen einer benutzerseitig zugewiesenen verwaltete Identität. Bei der Workloadidentität wird eine Vertrauensstellung zwischen dem Token der nutzerseitig zugewiesenen Verwaltungsidentität und dem Dienstkontotoken des Kubernetes-Clusters hergestellt.
az identity create \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--location "${LOCATION}" \
--subscription "${SUBSCRIPTION}"
Rufen Sie die Client-ID der verwalteten Identität ab, und speichern Sie sie in einer Umgebungsvariablen.
export USER_ASSIGNED_CLIENT_ID="$(az identity show \
--resource-group "${RESOURCE_GROUP}" \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--query 'clientId' \
--output tsv)"
Erstellen eines Kubernetes-Dienstkontos
Erstellen Sie ein Kubernetes-Dienstkonto, und kommentieren Sie es mit der Client-ID der verwalteten Identität, die Sie im vorherigen Schritt erstellt haben. Die mit dem Kubernetes-Dienstkonto verknüpften signierten Token werden nach dem Einrichten der Vertrauensstellung zwischen den beiden gegen ein Microsoft Entra ID-Token ausgetauscht.
Wenden Sie den folgenden YAML-Codeausschnitt an, um ein Dienstkonto mit hinzugefügter Workloadidentitätsanmerkung zu erstellen.
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
azure.workload.identity/client-id: "${USER_ASSIGNED_CLIENT_ID}"
name: "${SERVICE_ACCOUNT_NAME}"
namespace: "${SERVICE_ACCOUNT_NAMESPACE}"
Erstellen von Anmeldeinformationen für eine Verbundidentität
Verwenden Sie den az identity federated-credential create
-Befehl, um die Verbundidentitäts-Anmeldeinformationen zwischen der verwalteten Identität, dem Dienstkontoaussteller und dem Antragsteller zu erstellen. In diesem Schritt wird die Vertrauensstellung zwischen dem Kubernetes-Cluster und Microsoft Entra für den Austausch von Token festgelegt. Weitere Informationen zu Anmeldeinformationen für eine Verbundidentität in Microsoft Entra finden Sie unter Übersicht über die Anmeldeinformationen für Verbundidentitäten in Microsoft Entra ID.
az identity federated-credential create \
--name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} \
--identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--issuer "${OIDC_ISSUER}" \
--subject system:serviceaccount:"${SERVICE_ACCOUNT_NAMESPACE}":"${SERVICE_ACCOUNT_NAME}" \
--audience api://AzureADTokenExchange
Hinweis
Nachdem die Anmeldeinformationen für die Verbundidentität hinzugefügt wurden, dauert es einige Sekunden, bis sie verteilt werden. Wenn eine Tokenanforderung unmittelbar nach dem Hinzufügen der Anmeldeinformationen für die Verbundidentität erfolgt, schlägt die Anforderung möglicherweise fehl, bis der Cache aktualisiert wird. Um dieses Problem zu vermeiden, können Sie in Ihren Skripts eine kleine Verzögerung nach dem Hinzufügen der Verbundidentitäts-Anmeldeinformationen hinzufügen.
Konfigurieren von Dienstkontoanmerkungen und Podbezeichnungen
Die folgenden Dienstkonto- und Podanmerkungen sind für die Konfiguration der Workloadidentität basierend auf Anwendungsanforderungen verfügbar. Die unten angegebene Podbezeichnung ist obligatorisch, wenn –-enable-workload-identity
auf true
festgelegt ist.
Dienstkontoanmerkungen
Alle Dienstkontoanmerkungen sind optional. Wenn die Anmerkung nicht angegeben ist, wird der Standardwert verwendet.
Anmerkung | BESCHREIBUNG | Standard |
---|---|---|
azure.workload.identity/client-id |
Die Anwendungsclient-ID in Microsoft Entra, die mit dem Pod verwendet werden soll. | |
azure.workload.identity/tenant-id |
Azure-Mandanten-ID, in der die Microsoft Entra-Anwendung registriert ist. | Aus AZURE_TENANT_ID ConfigMap extrahierte azure-wi-webhook-config -Umgebungsvariable. |
azure.workload.identity/service-account-token-expiration |
Das expirationSeconds -Feld für das projizierte Dienstkontotoken. Konfigurieren Sie dies, um Ausfallzeiten zu verhindern, die durch Fehler während der Aktualisierung des Dienstkontotokens verursacht werden. Ablaufdatum des Kubernetes-Dienstkontotokens korreliert nicht mit Microsoft Entra-Token. Microsoft Entra-Token sind 24 Stunden gültig, nachdem sie ausgestellt wurden. |
3600 (der unterstützte Bereich ist 3600–86400) |
Podbezeichnungen
Anmerkung | Beschreibung | Empfohlener Wert | Erforderlich |
---|---|---|---|
azure.workload.identity/use |
Dies ist in der Podvorlagenspezifikation erforderlich. Wenn –-enable-workload-identity auf true festgelegt ist, werden nur Pods mit dieser Bezeichnung durch den Webhook für mutierende Zulassungen verändert, um die Azure-spezifischen Umgebungsvariablen und das projizierte Dienstkonto-Tokenvolume einzufügen. |
true |
Ja |
Podanmerkungen
Alle Podanmerkungen sind optional. Wenn die Anmerkung nicht angegeben ist, wird der Standardwert verwendet.
Anmerkung | BESCHREIBUNG | Standard |
---|---|---|
azure.workload.identity/service-account-token-expiration |
Das expirationSeconds -Feld für das projizierte Dienstkontotoken. Konfigurieren Sie dies, um Ausfallzeiten zu verhindern, die durch Fehler während der Aktualisierung des Dienstkontotokens verursacht werden. Ablaufdatum des Kubernetes-Dienstkontotokens korreliert nicht mit Microsoft Entra-Token. Microsoft Entra-Token sind 24 Stunden gültig, nachdem sie ausgestellt wurden. |
3600 (der unterstützte Bereich ist 3600–86400) |
azure.workload.identity/skip-containers |
Stellt eine durch Semikolons getrennte Containerliste dar, um das Hinzufügen von projizierten Dienstkontotokenvolumes zu überspringen. Beispiel: container1;container2 |
Standardmäßig wird das projizierte Dienstkonto-Tokenvolume allen Containern hinzugefügt, wenn der Pod die Bezeichnung azure.workload.identity/use: true hat. |
Konfigurieren der Einstellungen für die Workloadidentität im Kubernetes-Cluster
Der API-Server im Kubernetes-Cluster muss so konfiguriert werden, dass Dienstkontotoken ausgegeben werden, die die öffentlich zugängliche OIDC-Aussteller-URL enthalten (sodass Entra weiß, wo sich die öffentlichen Schlüssel zum Überprüfen des Tokens befinden).
Führen Sie zum Konfigurieren der Workloadidentitätseinstellungen unter Ubuntu Linux mit K3s die folgenden Schritte aus, um die Konfiguration abzuschließen:
Erstellen Sie eine k3s-Konfigurationsdatei.
Bearbeiten Sie
/etc/rancher/k3s/config.yaml
, um diese Einstellungen hinzuzufügen:`kube-apiserver-arg: - 'service-account-issuer=${OIDC_ISSUER}' - 'service-account-max-token-expiration=24h'`
Speichern Sie „config.yaml“.
Starten Sie den k3s-API-Server mithilfe des Befehls
systemctl restart k3s
neu.Es wird empfohlen, Dienstkontoschlüssel häufig zu rotieren. Weitere Informationen finden Sie im Artikel zum Rotieren des Dienstkonto-Ausstellerschlüssels.
Deaktivieren der Workloadidentität
Führen Sie den folgenden Befehl aus, um das Workloadidentitätsfeature in einem Azure Arc-fähigen Kubernetes-Cluster zu deaktivieren.
az connectedk8s update
--resource-group "${RESOURCE_GROUP}"
--name "${CLUSTER_NAME}"
--disable-workload-identity
Nächste Schritte
- Sehen Sie sich ein Beispiel für die Konfiguration einer Anwendung für die Verwendung der Workloadidentität an.