Delen via


Federatie van workloadidentiteit implementeren en configureren in Kubernetes met Azure Arc (preview)

U kunt de functie voor workloadidentiteit inschakelen op een Kubernetes-cluster met Azure Arc met behulp van Azure CLI. Het proces volgt deze stappen op hoog niveau:

  1. Schakel de functie voor workloadidentiteit in op een nieuw of bestaand Kubernetes-cluster met Arc.
  2. Maak een beheerde identiteit (of app-registratie) en een Kubernetes-serviceaccount.
  3. Configureer de beheerde identiteit voor tokenfederatie.
  4. Configureer aantekeningen van serviceaccounts en toepassingspodlabels om workloadidentiteit te gebruiken.
  5. Configureer de instellingen voor workloadidentiteit in het Kubernetes-cluster.
  6. Schakel de workloadidentiteit in het cluster uit.

Zie Workload-identiteitsfederatie in Kubernetes met Azure Arc (preview) voor een overzicht van deze functie.

Belangrijk

De azure Arc-functie voor identiteitsfederatie is momenteel beschikbaar in PREVIEW. Raadpleeg de Aanvullende voorwaarden voor Microsoft Azure-previews voor juridische voorwaarden die van toepassing zijn op Azure-functies die in bèta of preview zijn of die anders nog niet algemeen beschikbaar zijn.

Tip

In dit artikel worden de stappen beschreven die nodig zijn voor het implementeren en configureren van de workloadidentiteit op een Kubernetes-cluster met Arc. Zie de volgende artikelen voor meer informatie over het inschakelen van workloadidentiteit op andere typen clusters:

Vereisten

  • Workloadidentiteit voor Kubernetes-clusters met Azure Arc (preview) wordt ondersteund op de volgende Kubernetes-distributies:
    • Ubuntu Linux-cluster met K3s
    • AKS op Edge Essentials
    • AKS op HCI 23H2

Als u de functie voor workloadidentiteit wilt gebruiken, moet u Beschikken over Azure CLI versie 2.64 of hoger en az connectedk8s versie 1.10.0 of hoger. Zorg ervoor dat u uw Azure CLI-versie bijwerkt voordat u uw az connectedk8s versie bijwerkt. Als u Azure Cloud Shell gebruikt, wordt de nieuwste versie van Azure CLI geïnstalleerd.

Workloadidentiteit inschakelen in uw cluster

Volg de juiste stappen om de functie voor workloadidentiteit in te schakelen voor een nieuw Kubernetes-cluster met Arc of een bestaand kubernetes-cluster. Zorg er in beide gevallen voor dat u de naam en resourcegroep vervangt door uw waarden en dat u parameters naar wens configureert.

Parameter Omschrijving Vereist
--enable-oidc-issuer Genereert en host de OIDC-verlener-URL die een openbaar toegankelijke URL is waarmee de API-server openbare ondertekeningssleutels kan vinden voor het verifiëren van tokens.  Vereist
--enable-workload-identity Installeert een muterende toegangswebhook die een token voor een ondertekend serviceaccount projecteert op een bekend pad en omgevingsvariabelen met betrekking tot verificatie in de toepassingspods injecteert op basis van de instellingen van het geannoteerde serviceaccount. Als deze parameter niet is ingeschakeld voor een nieuw cluster, moet u een geprojecteerd volume koppelen aan een bekend pad dat het ondertekende serviceaccounttoken beschikbaar maakt voor het pad. Optioneel

Omgevingsvariabelen instellen

Voor het gemak worden de hieronder gedefinieerde omgevingsvariabelen in de voorbeelden in dit artikel beschreven. Vervang deze waarden door uw eigen waarden:

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"

Gebruik de volgende opdracht om een cluster met Azure Arc te maken waarvoor workloadidentiteit is ingeschakeld:

az connectedk8s connect --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer –-enable-workload-identity

Gebruik de update opdracht om de workloadidentiteit in te schakelen voor een bestaand Kubernetes-cluster met Arc.

az connectedk8s update --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer --enable-workload-identity

De URL van de OIDC-verlener ophalen

Haal de URL van de OIDC-verlener op en sla deze op in een omgevingsvariabele. Deze URL voor verleners wordt gebruikt in de volgende stap.

export OIDC_ISSUER="$(az connectedk8s show --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" \ 
    --query "oidcIssuerProfile.issuerUrl" \  
    --output tsv)"

Voer in om de omgevingsvariabele weer te geven echo ${OIDC_ISSUER}. De omgevingsvariabele moet de URL van de verlener bevatten, vergelijkbaar met het volgende voorbeeld:

https://northamerica.oic.prod-arc.azure.com/00000000-0000-0000-0000-000000000000/12345678-1234-1234-1234-123456789123/

De verlener is standaard ingesteld op het gebruik van de basis-URL https://{region}.oic.prod-arc.azure.com/{tenant_id}/{uuid}, waarbij de waarde overeenkomt {region} met de locatie waar het Kubernetes-cluster met Arc is gemaakt. De waarde {uuid} vertegenwoordigt de OpenID Connect-sleutel (OIDC), een onveranderbare, willekeurig gegenereerde GUID voor elk cluster.

Een beheerde identiteit maken

Gebruik de opdracht om een door de az identity create gebruiker toegewezen beheerde identiteit te maken. Met workloadidentiteit wordt een vertrouwensrelatie tot stand gebracht tussen het token van de door de gebruiker toegewezen beheeridentiteit en het serviceaccounttoken van het Kubernetes-cluster.

az identity create \ 
    --name "${USER_ASSIGNED_IDENTITY_NAME}" \
    --resource-group "${RESOURCE_GROUP}" \
    --location "${LOCATION}" \
    --subscription "${SUBSCRIPTION}"

Haal de client-id van de beheerde identiteit op en sla deze op in een omgevingsvariabele.

export USER_ASSIGNED_CLIENT_ID="$(az identity show \ 
    --resource-group "${RESOURCE_GROUP}" \
    --name "${USER_ASSIGNED_IDENTITY_NAME}" \
    --query 'clientId' \
    --output tsv)"

Een Kubernetes-serviceaccount maken

Maak een Kubernetes-serviceaccount en annotaeer dit met de client-id van de beheerde identiteit die u in de vorige stap hebt gemaakt. De ondertekende tokens die zijn gekoppeld aan het Kubernetes-serviceaccount, worden uitgewisseld voor een Microsoft Entra ID-token nadat de vertrouwensrelatie tussen de twee is ingesteld.

Pas het volgende YAML-fragment toe om een serviceaccount te maken met aantekening van workloadidentiteit toegevoegd.

apiVersion: v1 
kind: ServiceAccount 
metadata: 
  annotations: 
    azure.workload.identity/client-id: "${USER_ASSIGNED_CLIENT_ID}" 
  name: "${SERVICE_ACCOUNT_NAME}" 
  namespace: "${SERVICE_ACCOUNT_NAMESPACE}" 

De federatieve identiteitsreferentie maken

Gebruik de az identity federated-credential create opdracht om de federatieve identiteitsreferentie te maken tussen de beheerde identiteit, de verlener van het serviceaccount en het onderwerp. Met deze stap wordt de vertrouwensrelatie tussen het Kubernetes-cluster en Microsoft Entra vastgelegd voor het uitwisselen van tokens. Zie Overzicht van federatieve identiteitsreferenties in Microsoft Entra voor meer informatie over federatieve identiteitsreferenties 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 

Notitie

Nadat de referentie voor de federale identiteit is toegevoegd, duurt het enkele seconden om door te geven. Als er direct na het toevoegen van de federatieve identiteitsreferentie een tokenaanvraag wordt gedaan, mislukt de aanvraag mogelijk totdat de cache wordt vernieuwd. Als u dit probleem wilt voorkomen, voegt u een kleine vertraging in uw scripts toe nadat u de federatieve identiteitsreferentie hebt toegevoegd.

Aantekeningen en podlabels voor serviceaccounts configureren

De volgende serviceaccount- en podaantekeningen zijn beschikbaar voor het configureren van de workloadidentiteit op basis van toepassingsvereisten. Het hieronder opgegeven podlabel is verplicht als –-enable-workload-identity deze is ingesteld op true.

Aantekeningen voor serviceaccounts

Alle aantekeningen voor serviceaccounts zijn optioneel. Als er geen aantekening is opgegeven, wordt de standaardwaarde gebruikt.

Annotatie Beschrijving Standaard
azure.workload.identity/client-id Client-id van Microsoft Entra-toepassing die moet worden gebruikt met de pod.
azure.workload.identity/tenant-id Azure-tenant-id waar de Microsoft Entra-toepassing is geregistreerd. AZURE_TENANT_ID omgevingsvariabele geëxtraheerd uit azure-wi-webhook-config ConfigMap.
azure.workload.identity/service-account-token-expiration expirationSeconds veld voor het token voor het geprojecteerde serviceaccount. Configureer deze om downtime te voorkomen die wordt veroorzaakt door fouten tijdens het vernieuwen van het serviceaccounttoken. Het verlopen van het token van het Kubernetes-serviceaccount is niet gecorreleerd met Microsoft Entra-tokens. Microsoft Entra-tokens verlopen 24 uur nadat ze zijn uitgegeven. 3600 (ondersteund bereik is 3600-86400)

Podlabels

Annotatie Beschrijving Aanbevolen waarde Vereist
azure.workload.identity/use Vereist in de sjabloonspecificatie voor pods. Als –-enable-workload-identity dit is ingesteld trueop, worden alleen pods met dit label gedempt door de muterende toegangswebhook om de Azure-specifieke omgevingsvariabelen en het geprojecteerde tokenvolume van het serviceaccount te injecteren. true Ja

Podaantekeningen

Alle podaantekeningen zijn optioneel. Als er geen aantekening is opgegeven, wordt de standaardwaarde gebruikt.

Annotatie Beschrijving Standaard
azure.workload.identity/service-account-token-expiration expirationSeconds veld voor het token voor het geprojecteerde serviceaccount. Configureer deze om downtime te voorkomen die wordt veroorzaakt door fouten tijdens het vernieuwen van het serviceaccounttoken. Het verlopen van het token van het Kubernetes-serviceaccount is niet gecorreleerd met Microsoft Entra-tokens. Microsoft Entra-tokens verlopen 24 uur nadat ze zijn uitgegeven. 3600 (ondersteund bereik is 3600-86400)
azure.workload.identity/skip-containers Vertegenwoordigt een door puntkomma's gescheiden lijst met containers om het toevoegen van een projected serviceaccounttokenvolume over te slaan. Voorbeeld: container1;container2. Standaard wordt het tokenvolume van het geprojecteerde serviceaccount toegevoegd aan alle containers als de pod is gelabeld met azure.workload.identity/use: true.

Instellingen voor workloadidentiteit configureren in het Kubernetes-cluster

De API-server in het Kubernetes-cluster moet worden geconfigureerd om serviceaccounttokens uit te geven die de openbaar toegankelijke URL van de OIDC-verlener bevatten (zodat Entra weet waar de openbare sleutels moeten worden gevonden om het token te valideren).

Volg de onderstaande stappen om de configuratie te voltooien om de identiteitsinstellingen voor workloads in Ubuntu Linux met K3s te configureren:

  1. Maak een k3s-configuratiebestand.

  2. Bewerken /etc/rancher/k3s/config.yaml om deze instellingen toe te voegen:

       `kube-apiserver-arg:  
         - 'service-account-issuer=${OIDC_ISSUER}'
         - 'service-account-max-token-expiration=24h'`
    
  3. Sla de config.yaml op.

  4. Start de k3s API-server opnieuw met behulp van de opdracht systemctl restart k3s.

    We raden u aan om regelmatig sleutels voor serviceaccounts te roteren. Zie Sleutelrotatie voor serviceaccountverleners voor meer informatie.

Workloadidentiteit uitschakelen

Als u de functie workloadidentiteit wilt uitschakelen in een Kubernetes-cluster met Azure Arc, voert u de volgende opdracht uit:

az connectedk8s update
    --resource-group "${RESOURCE_GROUP}"
    --name "${CLUSTER_NAME}"
    --disable-workload-identity

Volgende stappen