Freigeben über


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:

  1. Aktivieren Sie das Workloadidentitätsfeature für einen neuen oder vorhandenen Arc-fähigen Kubernetes-Cluster.
  2. Erstellen Sie eine verwaltete Identität (oder App-Registrierung) und ein Kubernetes-Dienstkonto.
  3. Konfigurieren der verwalteten Identität für den Tokenverbund
  4. Konfigurieren Sie Dienstkontoanmerkungen und Bezeichnungen für Anwendungspods für die Verwendung der Workloadidentität.
  5. Konfigurieren Sie die Einstellungen für die Workloadidentität im Kubernetes-Cluster.
  6. 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:

  1. Erstellen Sie eine k3s-Konfigurationsdatei.

  2. 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'`
    
  3. Speichern Sie „config.yaml“.

  4. 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