Distribuera och konfigurera arbetsbelastningsidentitetsfederation i Azure Arc-aktiverade Kubernetes (förhandsversion)
Du kan aktivera funktionen för arbetsbelastningsidentitet i ett Azure Arc-aktiverat Kubernetes-kluster med hjälp av Azure CLI. Processen följer dessa övergripande steg:
- Aktivera funktionen för arbetsbelastningsidentitet i ett nytt eller befintligt Arc-aktiverat Kubernetes-kluster.
- Skapa en hanterad identitet (eller appregistrering) och Kubernetes-tjänstkonto.
- Konfigurera den hanterade identiteten för tokenfederation.
- Konfigurera anteckningar för tjänstkonton och programpoddetiketter för att använda arbetsbelastningsidentitet.
- Konfigurera arbetsbelastningsidentitetsinställningar i Kubernetes-klustret.
- Inaktivera arbetsbelastningsidentitet i klustret.
En översikt över den här funktionen finns i Arbetsbelastningsidentitetsfederation i Azure Arc-aktiverade Kubernetes (förhandsversion).
Viktigt!
Identitetsfederationsfunktionen för Azure Arc-arbetsbelastning är för närvarande i förhandsversion. Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.
Dricks
I den här artikeln beskrivs de steg som krävs för att distribuera och konfigurera arbetsbelastningsidentitet i ett Arc-aktiverat Kubernetes-kluster. Mer information om hur du aktiverar arbetsbelastningsidentitet för andra typer av kluster finns i följande artiklar:
Förutsättningar
- Arbetsbelastningsidentitet för Azure Arc-aktiverade Kubernetes-kluster (förhandsversion) stöds i följande Kubernetes-distributioner:
- Ubuntu Linux-kluster som kör K3s
- AKS on Edge Essentials
- AKS på HCI 23H2
Om du vill använda arbetsbelastningsidentitetsfunktionen måste du ha Azure CLI version 2.64 eller senare och az connectedk8s
version 1.10.0 eller senare. Se till att uppdatera din Azure CLI-version innan du uppdaterar din az connectedk8s
version. Om du använder Azure Cloud Shell installeras den senaste versionen av Azure CLI.
Aktivera arbetsbelastningsidentitet i klustret
Följ lämpliga steg för att aktivera funktionen för arbetsbelastningsidentitet för antingen ett nytt Arc-aktiverat Kubernetes-kluster eller ett befintligt. I båda fallen måste du ersätta namnet och resursgruppen med dina värden och konfigurera parametrarna efter behov.
Parameter | Beskrivning | Obligatoriskt |
---|---|---|
--enable-oidc-issuer |
Genererar och är värd för OIDC-utfärdarens URL som är en offentligt tillgänglig URL som gör att API-servern kan hitta offentliga signeringsnycklar för att verifiera token. | Obligatoriskt |
--enable-workload-identity |
Installerar en muterande webhook för antagning som projicerar en signerad tjänstkontotoken till en välkänd sökväg och matar in autentiseringsrelaterade miljövariabler till programpoddarna baserat på inställningarna för det kommenterade tjänstkontot. Om den här parametern inte är aktiverad för ett nytt kluster måste du montera en beräknad volym på en välkänd sökväg som exponerar token för det signerade tjänstkontot för sökvägen. | Valfritt |
Ange miljövariabler
För enkelhetens skull refereras de miljövariabler som definieras nedan i exemplen i den här artikeln. Ersätt dessa värden med dina egna värden:
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"
Använd följande kommando för att skapa ett Azure Arc-aktiverat kluster med arbetsbelastningsidentitet aktiverat:
az connectedk8s connect --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer –-enable-workload-identity
Om du vill aktivera arbetsbelastningsidentitet i ett befintligt Arc-aktiverat Kubernetes-kluster använder du update
kommandot .
az connectedk8s update --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer --enable-workload-identity
Hämta URL:en för OIDC-utfärdaren
Hämta url:en för OIDC-utfärdaren och spara den i en miljövariabel. Den här utfärdar-URL:en används i följande steg.
export OIDC_ISSUER="$(az connectk8s show --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" \
--query "oidcIssuerProfile.issuerUrl" \
--output tsv)"
Om du vill visa miljövariabeln anger du echo ${OIDC_ISSUER}
. Miljövariabeln bör innehålla utfärdarens URL, ungefär som i följande exempel:
https://northamerica.oic.prod-arc.azure.com/00000000-0000-0000-0000-000000000000/12345678-1234-1234-1234-123456789123/
Som standard är utfärdaren inställd på att använda bas-URL:en https://{region}.oic.prod-arc.azure.com/{tenant_id}/{uuid}
, där värdet för {region}
matchar platsen där Det Arc-aktiverade Kubernetes-klustret skapas. Värdet {uuid}
representerar OIDC-nyckeln (OpenID Connect), som är ett oföränderligt, slumpmässigt genererat guid för varje kluster.
Skapa en hanterad identitet
az identity create
Använd kommandot för att skapa en användartilldelad hanterad identitet. Med arbetsbelastningsidentitet upprättas en förtroenderelation mellan token för den användartilldelade hanteringsidentiteten och Kubernetes-klustrets tjänstkontotoken.
az identity create \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--location "${LOCATION}" \
--subscription "${SUBSCRIPTION}"
Hämta den hanterade identitetens klient-ID och lagra i en miljövariabel.
export USER_ASSIGNED_CLIENT_ID="$(az identity show \
--resource-group "${RESOURCE_GROUP}" \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--query 'clientId' \
--output tsv)"
Skapa ett Kubernetes-tjänstkonto
Skapa ett Kubernetes-tjänstkonto och kommentera det med klient-ID:t för den hanterade identiteten som skapades i föregående steg. De signerade token som är associerade med Kubernetes-tjänstkontot byts ut mot en Microsoft Entra-ID-token när förtroenderelationen har upprättats mellan de två.
Använd följande YAML-kodfragment för att skapa ett tjänstkonto med en anteckning om arbetsbelastningsidentitet.
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
azure.workload.identity/client-id: "${USER_ASSIGNED_CLIENT_ID}"
name: "${SERVICE_ACCOUNT_NAME}"
namespace: "${SERVICE_ACCOUNT_NAMESPACE}"
Skapa federerade identitetsautentiseringsuppgifter
az identity federated-credential create
Använd kommandot för att skapa den federerade identitetsautentiseringsuppgiften mellan den hanterade identiteten, utfärdaren av tjänstkontot och ämnet. Det här steget etablerar förtroenderelationen mellan Kubernetes-klustret och Microsoft Entra för utbyte av token. Mer information om federerade identitetsuppgifter i Microsoft Entra finns i Översikt över federerade identitetsautentiseringsuppgifter i 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
Kommentar
När den federala identitetsautentiseringsuppgiften har lagts till tar det några sekunder att sprida. Om en tokenbegäran görs omedelbart efter att den federerade identitetsautentiseringsuppgiften har lagts till kan begäran misslyckas tills cachen har uppdaterats. Undvik det här problemet genom att lägga till en liten fördröjning i skripten när du har lagt till den federerade identitetsautentiseringsuppgiften.
Konfigurera anteckningar och poddetiketter för tjänstkonto
Följande tjänstkonto och poddanteckningar är tillgängliga för att konfigurera arbetsbelastningsidentitet baserat på programkrav. Poddetiketten som anges nedan är obligatorisk om –-enable-workload-identity
den är inställd på true
.
Anteckningar för tjänstkonto
Alla anteckningar för tjänstkonton är valfria. Om en anteckning inte har angetts används standardvärdet.
Anteckning | beskrivning | Standard |
---|---|---|
azure.workload.identity/client-id |
Microsoft Entra-programklient-ID som ska användas med podden. | |
azure.workload.identity/tenant-id |
Azure-klient-ID där Microsoft Entra-programmet är registrerat. | AZURE_TENANT_ID miljövariabel som extraherats från azure-wi-webhook-config ConfigMap. |
azure.workload.identity/service-account-token-expiration |
expirationSeconds fält för den beräknade tjänstkontotoken. Konfigurera för att förhindra stilleståndstid som orsakas av fel under uppdatering av tjänstkontotoken. Förfallodatum för Kubernetes-tjänstkontotoken korreleras inte med Microsoft Entra-token. Microsoft Entra-token upphör att gälla 24 timmar efter att de har utfärdats. |
3600 (intervallet som stöds är 3600-86400) |
Poddetiketter
Anteckning | beskrivning | Rekommenderat värde | Obligatoriskt |
---|---|---|---|
azure.workload.identity/use |
Krävs i poddmallsspecifikationen. Om –-enable-workload-identity är inställt på true muteras endast poddar med den här etiketten av den muterande webhooken för antagning för att mata in de Azure-specifika miljövariablerna och den beräknade tokenvolymen för tjänstkontot. |
true |
Ja |
Poddanteckningar
Alla poddanteckningar är valfria. Om en anteckning inte har angetts används standardvärdet.
Anteckning | beskrivning | Standard |
---|---|---|
azure.workload.identity/service-account-token-expiration |
expirationSeconds fält för den beräknade tjänstkontotoken. Konfigurera för att förhindra stilleståndstid som orsakas av fel under uppdatering av tjänstkontotoken. Förfallodatum för Kubernetes-tjänstkontotoken korreleras inte med Microsoft Entra-token. Microsoft Entra-token upphör att gälla 24 timmar efter att de har utfärdats. |
3600 (intervallet som stöds är 3600-86400) |
azure.workload.identity/skip-containers |
Representerar en semikolonavgränsad lista över containrar för att hoppa över att lägga till den beräknade tokenvolymen för tjänstkontot. Exempel: container1;container2 . |
Som standard läggs den beräknade tokenvolymen för tjänstkontot till i alla containrar om podden är märkt med azure.workload.identity/use: true . |
Konfigurera arbetsbelastningsidentitetsinställningar i Kubernetes-klustret
API-servern i Kubernetes-klustret måste konfigureras för att utfärda tjänstkontotoken som innehåller den offentligt tillgängliga OIDC-utfärdarens URL (så att Entra vet var de offentliga nycklarna ska hittas för att verifiera token).
Om du vill konfigurera arbetsbelastningsidentitetsinställningar i Ubuntu Linux med K3s följer du stegen nedan för att slutföra konfigurationen:
Skapa konfigurationsfilen k3s.
Redigera
/etc/rancher/k3s/config.yaml
för att lägga till följande inställningar:`kube-apiserver-arg: - 'service-account-issuer=${OIDC_ISSUER}' - 'service-account-max-token-expiration=24h'`
Spara config.yaml.
Starta om k3s API-servern med kommandot
systemctl restart k3s
.Vi rekommenderar att du roterar tjänstkontonycklar ofta. Mer information finns i Nyckelrotation för tjänstkonto utfärdare.
Inaktivera arbetsbelastningsidentitet
Om du vill inaktivera funktionen för arbetsbelastningsidentitet i ett Azure Arc-aktiverat Kubernetes-kluster kör du följande kommando:
az connectedk8s update
--resource-group "${RESOURCE_GROUP}"
--name "${CLUSTER_NAME}"
--disable-workload-identity