Distribuire e configurare la federazione delle identità del carico di lavoro in Kubernetes abilitato per Azure Arc (anteprima)
È possibile abilitare la funzionalità di identità del carico di lavoro in un cluster Kubernetes abilitato per Azure Arc usando l'interfaccia della riga di comando di Azure. Il processo segue questi passaggi generali:
- Abilitare la funzionalità di identità del carico di lavoro in un cluster Kubernetes nuovo o esistente abilitato per Arc.
- Creare un'identità gestita (o una registrazione dell'app) e un account del servizio Kubernetes.
- Configurare l'identità gestita per la federazione dei token.
- Configurare le annotazioni dell'account del servizio e le etichette dei pod dell'applicazione per l'uso dell'identità del carico di lavoro.
- Configurare le impostazioni di identità del carico di lavoro nel cluster Kubernetes.
- Disabilitare l'identità del carico di lavoro nel cluster.
Per una panoramica di questa funzionalità, vedere Federazione delle identità del carico di lavoro in Kubernetes abilitato per Azure Arc (anteprima).
Importante
La funzionalità di federazione dell'identità del carico di lavoro di Azure Arc è attualmente disponibile in ANTEPRIMA. Vedere le condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure per termini legali aggiuntivi che si applicano a funzionalità di Azure in versione beta, in anteprima o in altro modo non ancora disponibili a livello generale.
Suggerimento
Questo articolo descrive i passaggi necessari per distribuire e configurare l'identità del carico di lavoro in un cluster Kubernetes abilitato per Arc. Per informazioni su come abilitare l'identità del carico di lavoro in altri tipi di cluster, vedere gli articoli seguenti:
Prerequisiti
- L'identità del carico di lavoro per i cluster Kubernetes abilitati per Azure Arc (anteprima) è supportata nelle distribuzioni Kubernetes seguenti:
- Cluster Ubuntu Linux che esegue K3s
- Servizio Azure Kubernetes in Edge Essentials
- Servizio Azure Kubernetes in HCI 23H2
Per usare la funzionalità di identità del carico di lavoro, è necessario avere l'interfaccia della riga di comando di Azure versione 2.64 o successiva e az connectedk8s
la versione 1.10.0 o successiva. Assicurarsi di aggiornare la versione dell'interfaccia della riga di comando di Azure prima di aggiornare la az connectedk8s
versione. Se si usa Azure Cloud Shell, verrà installata la versione più recente dell'interfaccia della riga di comando di Azure.
Abilitare l'identità del carico di lavoro nel cluster
Seguire i passaggi appropriati per abilitare la funzionalità di identità del carico di lavoro per un nuovo cluster Kubernetes abilitato per Arc o per uno esistente. In entrambi i casi, assicurarsi di sostituire il nome e il gruppo di risorse con i valori e configurare i parametri in base alle esigenze.
Parametro | Descrizione | Richiesto |
---|---|---|
--enable-oidc-issuer |
Genera e ospita l'URL dell'autorità emittente OIDC che è un URL accessibile pubblicamente che consente al server API di trovare le chiavi di firma pubbliche per la verifica dei token. | Richiesto |
--enable-workload-identity |
Installa un webhook di ammissione di modifica che proietta un token di account del servizio firmato in un percorso noto e inserisce le variabili di ambiente correlate all'autenticazione ai pod dell'applicazione in base alle impostazioni dell'account del servizio con annotazioni. Per un nuovo cluster, se questo parametro non è abilitato, è necessario montare un volume proiettato in un percorso noto che espone il token dell'account del servizio firmato al percorso. | Facoltativo |
Impostare le variabili di ambiente
Per praticità, le variabili di ambiente definite di seguito sono riportate negli esempi di questo articolo. Sostituire questi valori con i propri valori:
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"
Per creare un cluster abilitato per Azure Arc con l'identità del carico di lavoro abilitata, usare il comando seguente:
az connectedk8s connect --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer –-enable-workload-identity
Per abilitare l'identità del carico di lavoro in un cluster Kubernetes abilitato per Arc esistente, usare il update
comando .
az connectedk8s update --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer --enable-workload-identity
Recuperare l'URL dell'autorità di certificazione OIDC
Recuperare l'URL dell'autorità emittente OIDC e salvarlo in una variabile di ambiente. Questo URL dell'autorità emittente verrà usato nel passaggio seguente.
export OIDC_ISSUER="$(az connectk8s show --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" \
--query "oidcIssuerProfile.issuerUrl" \
--output tsv)"
Per visualizzare la variabile di ambiente, immettere echo ${OIDC_ISSUER}
. La variabile di ambiente deve contenere l'URL dell'autorità di certificazione, in modo simile all'esempio seguente:
https://northamerica.oic.prod-arc.azure.com/00000000-0000-0000-0000-000000000000/12345678-1234-1234-1234-123456789123/
Per impostazione predefinita, l'autorità emittente è impostata per usare l'URL https://{region}.oic.prod-arc.azure.com/{tenant_id}/{uuid}
di base , dove il valore per {region}
corrisponde alla posizione in cui viene creato il cluster Kubernetes abilitato per Arc. Il valore {uuid}
rappresenta la chiave OIDC (OpenID Connect), che è un GUID non modificabile generato in modo casuale per ogni cluster.
Creare un'identità gestita
Usare il az identity create
comando per creare un'identità gestita assegnata dall'utente. Con l'identità del carico di lavoro, viene stabilita una relazione di trust tra il token dell'identità di gestione assegnata dall'utente e il token dell'account del servizio del cluster Kubernetes.
az identity create \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--location "${LOCATION}" \
--subscription "${SUBSCRIPTION}"
Recuperare l'ID client dell'identità gestita e archiviare in una variabile di ambiente.
export USER_ASSIGNED_CLIENT_ID="$(az identity show \
--resource-group "${RESOURCE_GROUP}" \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--query 'clientId' \
--output tsv)"
Creare un account del servizio Kubernetes
Creare un account del servizio Kubernetes e annotarlo con l'ID client dell'identità gestita creata nel passaggio precedente. I token firmati associati all'account del servizio Kubernetes verranno scambiati per un token ID Microsoft Entra dopo che la relazione di trust viene stabilita tra i due.
Applicare il frammento YAML seguente per creare un account del servizio con l'annotazione identity del carico di lavoro aggiunta.
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
azure.workload.identity/client-id: "${USER_ASSIGNED_CLIENT_ID}"
name: "${SERVICE_ACCOUNT_NAME}"
namespace: "${SERVICE_ACCOUNT_NAMESPACE}"
Creare le credenziali dell'identità federata
Usare il az identity federated-credential create
comando per creare le credenziali di identità federate tra l'identità gestita, l'emittente dell'account del servizio e l'oggetto. Questo passaggio stabilisce la relazione di trust tra il cluster Kubernetes e Microsoft Entra per lo scambio di token. Per altre informazioni sulle credenziali di identità federate in Microsoft Entra, vedere Panoramica delle credenziali di identità federate 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
Nota
Dopo l'aggiunta delle credenziali di identità federali, la propagazione richiede alcuni secondi. Se una richiesta di token viene effettuata immediatamente dopo l'aggiunta della credenziale dell'identità federata, la richiesta potrebbe non riuscire finché non viene aggiornata la cache. Per evitare questo problema, aggiungere un lieve ritardo negli script dopo l'aggiunta delle credenziali dell'identità federata.
Configurare le annotazioni dell'account del servizio e le etichette dei pod
Per la configurazione dell'identità del carico di lavoro in base ai requisiti dell'applicazione, sono disponibili gli account del servizio e le annotazioni dei pod seguenti. L'etichetta pod specificata di seguito è obbligatoria se –-enable-workload-identity
è impostata su true
.
Annotazioni dell'account del servizio
Tutte le annotazioni dell'account del servizio sono facoltative. Se non viene specificata un'annotazione, verrà usato il valore predefinito.
Annotazione | Descrizione | Default |
---|---|---|
azure.workload.identity/client-id |
ID client dell'applicazione Microsoft Entra da usare con il pod. | |
azure.workload.identity/tenant-id |
ID tenant di Azure in cui è registrata l'applicazione Microsoft Entra. | AZURE_TENANT_ID variabile di ambiente estratta da azure-wi-webhook-config ConfigMap. |
azure.workload.identity/service-account-token-expiration |
expirationSeconds campo per il token dell'account del servizio proiettato. Configurare per evitare tempi di inattività causati da errori durante l'aggiornamento del token dell'account del servizio. La scadenza del token dell'account del servizio Kubernetes non è correlata ai token di Microsoft Entra. I token Microsoft Entra scadono 24 ore dopo l'emissione. |
3600 (intervallo supportato è 3600-86400) |
Etichette dei pod
Annotazione | Descrizione | Valore consigliato | Richiesto |
---|---|---|---|
azure.workload.identity/use |
Obbligatorio nella specifica del modello di pod. Se –-enable-workload-identity è impostato su true , solo i pod con questa etichetta vengono modificati dal webhook di ammissione di modifica per inserire le variabili di ambiente specifiche di Azure e il volume del token dell'account del servizio proiettato. |
true |
Sì |
Annotazioni dei pod
Tutte le annotazioni dei pod sono facoltative. Se non viene specificata un'annotazione, verrà usato il valore predefinito.
Annotazione | Descrizione | Default |
---|---|---|
azure.workload.identity/service-account-token-expiration |
expirationSeconds campo per il token dell'account del servizio proiettato. Configurare per evitare tempi di inattività causati da errori durante l'aggiornamento del token dell'account del servizio. La scadenza del token dell'account del servizio Kubernetes non è correlata ai token di Microsoft Entra. I token Microsoft Entra scadono 24 ore dopo l'emissione. |
3600 (intervallo supportato è 3600-86400) |
azure.workload.identity/skip-containers |
Rappresenta un elenco delimitato da punti e virgola dei contenitori per ignorare l'aggiunta del volume di token dell'account del servizio proiettato. Ad esempio: container1;container2 . |
Per impostazione predefinita, il volume del token dell'account del servizio proiettato viene aggiunto a tutti i contenitori se il pod è etichettato con azure.workload.identity/use: true . |
Configurare le impostazioni di identità del carico di lavoro nel cluster Kubernetes
Il server API nel cluster Kubernetes deve essere configurato per rilasciare token dell'account del servizio che includono l'URL dell'autorità di certificazione OIDC accessibile pubblicamente (in modo che Entra sappia dove trovare le chiavi pubbliche per convalidare il token).
Per configurare le impostazioni di identità del carico di lavoro in Ubuntu Linux con K3s, seguire questa procedura per completare la configurazione:
Creare il file di configurazione k3s.
Modificare
/etc/rancher/k3s/config.yaml
per aggiungere queste impostazioni:`kube-apiserver-arg: - 'service-account-issuer=${OIDC_ISSUER}' - 'service-account-max-token-expiration=24h'`
Salvare config.yaml.
Riavviare il server API k3s usando il comando
systemctl restart k3s
.È consigliabile ruotare frequentemente le chiavi dell'account del servizio. Per altre informazioni, vedere Rotazione della chiave dell'autorità di certificazione dell'account del servizio.
Disabilitare l'identità dei carichi di lavoro
Per disabilitare la funzionalità di identità del carico di lavoro in un cluster Kubernetes abilitato per Azure Arc, eseguire il comando seguente:
az connectedk8s update
--resource-group "${RESOURCE_GROUP}"
--name "${CLUSTER_NAME}"
--disable-workload-identity
Passaggi successivi
- Esplorare un esempio per configurare un'applicazione per l'uso dell'identità del carico di lavoro.