Använd en tjänstens huvudnamn med Azure Kubernetes Service (AKS)

Ett AKS-kluster kräver antingen ett Microsoft Entra-tjänsthuvudnamn eller en hanterad identitet för att dynamiskt skapa och hantera andra Azure-resurser, till exempel en Azure Load Balancer eller Azure Container Registry (ACR).

Kommentar

Vi rekommenderar att du använder hanterade identiteter för att autentisera med andra resurser i Azure, och de är standardautentiseringsmetoden för ditt AKS-kluster. Mer information om hur du använder en hanterad identitet med klustret finns i Använda en systemtilldelad hanterad identitet.

Den här artikeln visar hur du skapar och använder ett huvudnamn för tjänsten för dina AKS-kluster.

Innan du börjar

Om du vill skapa ett Huvudnamn för Microsoft Entra-tjänsten måste du ha behörighet att registrera ett program med din Microsoft Entra-klientorganisation och tilldela programmet till en roll i din prenumeration. Om du inte har de behörigheter som krävs måste du be ditt Microsoft Entra-ID eller prenumerationsadministratör att tilldela nödvändiga behörigheter eller i förväg skapa ett huvudnamn för tjänsten som du kan använda med ditt AKS-kluster.

Om du använder ett huvudnamn för tjänsten från en annan Microsoft Entra-klientorganisation finns det andra överväganden kring de behörigheter som är tillgängliga när du distribuerar klustret. Du kanske inte har rätt behörighet att läsa och skriva kataloginformation. Mer information finns i Vilka är standardanvändarbehörigheterna i Microsoft Entra-ID?

Förutsättningar

  • Om du använder Azure CLI behöver du Azure CLI version 2.0.59 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
  • Om du använder Azure PowerShell behöver du Azure PowerShell version 5.0.0 eller senare. Kör Get-InstalledModule -Name Az för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure Az PowerShell-modulen.

Skapa tjänstens huvudnamn manuellt

  1. Skapa ett huvudnamn för az ad sp create-for-rbac tjänsten med kommandot .

    az ad sp create-for-rbac --name myAKSClusterServicePrincipal
    

    Dina utdata bör likna följande exempelutdata:

    {
      "appId": "559513bd-0c19-4c1a-87cd-851a26afd5fc",
      "displayName": "myAKSClusterServicePrincipal",
      "name": "http://myAKSClusterServicePrincipal",
      "password": "e763725a-5eee-40e8-a466-dc88d980f415",
      "tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48"
    }
    
  2. Kopiera värdena för appId och password från utdata. Du använder dessa när du skapar ett AKS-kluster i nästa avsnitt.

Ange ett tjänstens huvudnamn för ett AKS-kluster

  • Använd ett befintligt huvudnamn för tjänsten för ett nytt AKS-kluster med kommandot az aks create och använd parametrarna --service-principal och --client-secret för att ange appId och password från utdata som du fick föregående avsnitt.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --service-principal <appId> \
        --client-secret <password>
    

    Kommentar

    Om du använder ett befintligt huvudnamn för tjänsten med anpassad hemlighet kontrollerar du att hemligheten inte är längre än 190 byte.

Delegera åtkomst till andra Azure-resurser

Du kan använda tjänstens huvudnamn för AKS-klustret för att få åtkomst till andra resurser. Om du till exempel vill distribuera ditt AKS-kluster till ett befintligt undernät för virtuella Azure-nätverk eller ansluta till Azure Container Registry (ACR) måste du delegera åtkomsten till dessa resurser till tjänstens huvudnamn. Behörighet som beviljas till ett kluster med hjälp av en systemtilldelad hanterad identitet kan ta upp till 60 minuter att fylla i.

  • Skapa en rolltilldelning med kommandot az role assignment create . appId Tilldela till ett visst omfång, till exempel en resursgrupp eller en virtuell nätverksresurs. Rollen definierar vilka behörigheter tjänstens huvudnamn har för resursen.

    Kommentar

    --scope För en resurs måste vara ett fullständigt resurs-ID, till exempel /subscriptions/<guid>/resourceGroups/myResourceGroup eller /subscriptions/<guid>/resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet.

    az role assignment create --assignee <appId> --scope <resourceScope> --role Contributor
    

I följande avsnitt beskrivs vanliga delegeringar som du kan behöva tilldela.

Azure Container Registry

Om du använder Azure Container Registry (ACR) som containeravbildningsarkiv måste du bevilja behörighet till tjänstens huvudnamn för aks-klustret för att läsa och hämta avbildningar. Vi rekommenderar att du använder az aks create kommandot eller az aks update för att integrera med ett register och tilldela lämplig roll för tjänstens huvudnamn. Detaljerade steg finns i Autentisera med Azure Container Registry från Azure Kubernetes Service.

Nätverk

Du kan använda avancerade nätverk där det virtuella nätverket och undernätet eller offentliga IP-adresser finns i en annan resursgrupp. Tilldela den inbyggda rollen Nätverksdeltagare i undernätet i det virtuella nätverket. Du kan också skapa en anpassad roll med behörighet att komma åt nätverksresurserna i resursgruppen. Mer information finns i BEHÖRIGHETer för AKS-tjänsten.

Lagring

Om du behöver komma åt befintliga diskresurser i en annan resursgrupp tilldelar du någon av följande uppsättningar rollbehörigheter:

Azure Container Instances

Om du använder Virtual Kubelet för att integrera med AKS och väljer att köra Azure Container Instances (ACI) i resursgruppen separat från AKS-klustret, måste AKS-klustertjänstens huvudnamn beviljas deltagarbehörigheter för ACI-resursgruppen.

Övrigt att tänka på

Tänk på följande när du använder AKS och microsoft entra-tjänstens huvudnamn:

  • Tjänstens huvudnamn för Kubernetes är en del av klusterkonfigurationen, men använd inte den här identiteten för att distribuera klustret.
  • Som standard är autentiseringsuppgifterna för tjänstens huvudnamn giltiga i ett år. Du kan uppdatera eller rotera autentiseringsuppgifterna för tjänstens huvudnamn när som helst.
  • Varje huvudnamn för tjänsten är associerat med ett Microsoft Entra-program. Du kan associera tjänstens huvudnamn för ett Kubernetes-kluster med valfritt giltigt Microsoft Entra-programnamn (till exempel: https://www.contoso.org/example). URL:en för programmet behöver inte vara en verklig slutpunkt.
  • När du anger Klient-ID för tjänstens huvudnamn använder du värdet för appId.
  • På de virtuella agentnoddatorerna i Kubernetes-klustret lagras autentiseringsuppgifterna för tjänstens huvudnamn i /etc/kubernetes/azure.json filen.
  • När du tar bort ett AKS-kluster som skapades med kommandot az aks create tas inte tjänstens huvudnamn som skapats bort automatiskt.
    • Om du vill ta bort tjänstens huvudnamn frågar du efter klustrets servicePrincipalProfile.clientId och tar bort det med hjälp av az ad sp delete kommandot . Ersätt värdena för parametern -g för resursgruppens namn och -n parameter för klusternamnet:

      az ad sp delete --id $(az aks show -g myResourceGroup -n myAKSCluster --query servicePrincipalProfile.clientId -o tsv)
      

Felsöka

Azure CLI cachelagrar autentiseringsuppgifterna för tjänstens huvudnamn för AKS-kluster. Om dessa autentiseringsuppgifter upphör att gälla uppstår fel under AKS-klusterdistributionen. Om du kör az aks create kommandot och får ett felmeddelande som liknar följande kan det tyda på ett problem med autentiseringsuppgifterna för den cachelagrade tjänstens huvudnamn:

Operation failed with status: 'Bad Request'.
Details: The credentials in ServicePrincipalProfile were invalid. Please see https://aka.ms/aks-sp-help for more details.
(Details: adal: Refresh request failed. Status Code = '401'.

Du kan kontrollera förfallodatumet för autentiseringsuppgifterna för tjänstens huvudnamn med hjälp av az ad app credential list kommandot med frågan "[].endDateTime" .

az ad app credential list --id <app-id> --query "[].endDateTime" -o tsv

Standardförfallotiden för autentiseringsuppgifter för tjänstens huvudnamn är ett år. Om dina autentiseringsuppgifter är äldre än ett år kan du återställa befintliga autentiseringsuppgifter eller skapa ett nytt huvudnamn för tjänsten.

Allmän Azure CLI-felsökning

Azure CLI kan köras i flera gränssnittsmiljöer, men med små formatvariationer. Om du har oväntade resultat med Azure CLI-kommandon kan du läsa Så här använder du Azure CLI.

Nästa steg

Mer information om Microsoft Entra-tjänstens huvudnamn finns i Objekt för program och tjänstens huvudnamn.

Information om hur du uppdaterar autentiseringsuppgifterna finns i Uppdatera eller rotera autentiseringsuppgifterna för tjänstens huvudnamn i AKS.