Service-principals met AKS (Azure Kubernetes Service)

Voor interactie met Azure-API's is voor een AKS-cluster een service-principal van Azure Active Directory (AD) of een beheerde identiteit vereist. Een service-principal of beheerde identiteit is nodig voor het dynamisch maken en beheren van andere Azure-resources, zoals een Azure load balancer of containerregister (ACR).

In dit artikel ziet u hoe u een service-principal voor uw AKS-clusters maakt en gebruikt.

Voordat u begint

Als u een service-principal voor Azure AD wilt maken, moet u beschikken over machtigingen voor het registreren van een toepassing bij de Azure AD-tenant. U moet ook machtigingen hebben om de toepassing aan een rol toe te wijzen in uw abonnement. Als u niet beschikt over de benodigde machtigingen, moet u mogelijk de Azure AD- of abonnementsbeheerder vragen om de benodigde machtigingen toe te wijzen, of vooraf een service-principal maken voor gebruik met het AKS-cluster.

Als u een service-principal van een andere Azure AD-tenant gebruikt, zijn er aanvullende overwegingen met het oog op de machtigingen die beschikbaar zijn wanneer u het cluster implementeert. Mogelijk hebt u niet de juiste machtigingen om mapgegevens te lezen en te schrijven. Zie What are the default user permissions in Azure Active Directory? (Wat zijn de standaardgebruikersmachtigingen in Azure Active Directory?

U moet ook Azure CLI versie 2.0.59 of hoger installeren en configureren. Voer az --version uit om de versie te bekijken. Zie Azure CLI installeren als u de CLI wilt installeren of een upgrade wilt uitvoeren.

Automatisch een service-principal maken en gebruiken

Wanneer u een AKS-cluster maakt in het Azure Portal of met de opdracht az aks create, maakt Azure een beheerde identiteit.

In het volgende Azure CLI-voorbeeld is geen service-principal opgegeven. In dit scenario maakt de Azure CLI een beheerde identiteit voor het AKS-cluster.

az aks create --name myAKSCluster --resource-group myResourceGroup

Handmatig een service-principal maken

Gebruik de opdracht az ad sp create-for-rbac als u handmatig een service-principal wilt maken met de Azure CLI.

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

De uitvoer lijkt op die in het volgende voorbeeld. Noteer uw eigen appId en password. Deze waarden worden gebruikt wanneer u in de volgende sectie een AKS-cluster maakt.

{
  "appId": "559513bd-0c19-4c1a-87cd-851a26afd5fc",
  "displayName": "myAKSClusterServicePrincipal",
  "name": "http://myAKSClusterServicePrincipal",
  "password": "e763725a-5eee-40e8-a466-dc88d980f415",
  "tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48"
}

Een service-principal opgeven voor een AKS-cluster

Als u een bestaande service-principal wilt gebruiken wanneer u een AKS-cluster maakt met de opdracht az aks create, gebruikt u de parameters --service-principal en --client-secret om de appId en het password uit de uitvoer van de opdracht az ad sp create-for-rbac op te geven:

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

Notitie

Als u een bestaande service-principal met aangepast geheim gebruikt, moet u ervoor zorgen dat het geheim niet langer is dan 190 bytes.

Als u een AKS-cluster implementeert met behulp van de Azure Portal, kiest u op de pagina Verificatie van het dialoogvenster Kubernetes-cluster maken de optie Service-principal configureren. Selecteer Bestaande gebruiken en geef de volgende waarden op:

  • Client-id van de service-principal is uw appId
  • Clientgeheim van de service-principal is de waarde van het wachtwoord

Afbeelding van browsen naar Azure Vote

Machtiging afgeven voor toegang tot andere Azure-resources

De service-principal voor het AKS-cluster kan worden gebruikt voor toegang tot andere resources. Als u bijvoorbeeld uw AKS-cluster wilt implementeren in een bestaand subnet van een virtueel Azure-netwerk of verbinding wilt maken met Azure Container Registry (ACR), moet u de toegang tot deze resources delegeren aan de service-principal.

Als u machtigingen wilt delegeren, maakt u een roltoewijzing met behulp van de opdracht az role assignment create. Wijs appId de toe aan een bepaald bereik, zoals een resourcegroep of virtuele netwerkresource. Op basis van de rol wordt gedefinieerd welke machtigingen de service-principal heeft voor de resource, zoals in het volgende voorbeeld wordt weergegeven:

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

De voor een resource moet een volledige --scope resource-id zijn, zoals /subscriptions/ <guid> /resourceGroups/myResourceGroup of /subscriptions/ <guid> /resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet

Notitie

Als u de roltoewijzing Inzender hebt verwijderd uit de knooppuntresourcegroep, kunnen de onderstaande bewerkingen mislukken. Het kan 60 minuten duren voordat machtigingen worden verleend aan clusters die gebruikmaken van door het systeem beheerde identiteit.

In de volgende secties wordt meer uitleg gegeven over algemene machtigingen die u mogelijk moet afgeven.

Azure Container Registry

Als u Azure Container Registry (ACR) als containeropslag gebruikt, moet u machtigingen verlenen aan de service-principal voor uw AKS-cluster om afbeeldingen te lezen en op te halen. De aanbevolen configuratie is momenteel om de opdracht az aks create of az aks update te gebruiken om te integreren met een register en de juiste rol voor de service-principal toe te wijzen. Zie Verifiëren met Azure Container Registry van Azure Kubernetes Service voor gedetailleerde Azure Kubernetes Service.

Netwerken

U kunt gebruikmaken van geavanceerde netwerkmogelijkheden als het virtuele netwerk en het subnet of de openbare IP-adressen zich in een andere resourcegroep bevinden. Wijs de ingebouwde rol Inzender voor netwerken toe aan het subnet binnen het virtuele netwerk. U kunt ook een aangepaste rol maken met machtigingen voor toegang tot de netwerkresources in die resourcegroep. Zie AKS-servicemachtigingen voor meer informatie.

Storage

Mogelijk hebt u toegang nodig tot bestaande schijfresources in een andere resourcegroep. Wijs een van de volgende sets rolmachtigingen toe:

  • Maak een aangepaste rol en definieer de volgende rolmachtigingen:
    • Microsoft.Compute/disks/read
    • Microsoft.Compute/disks/write
  • U kunt ook de ingebouwde rol Inzender voor opslagaccounts toewijzen aan de resourcegroep

Azure Container Instances

Als u Virtual Kubelet gebruikt om te integreren met AKS en ervoor kiest Azure Container Instances (ACI) uit te voeren in de resourcegroep, los van de AKS-cluster, dan moet u de AKS-service-principal de machtiging Inzender voor de ACI-resourcegroep verlenen.

Aanvullende overwegingen

Houd rekening met het volgende wanneer u werkt met AKS en Azure AD-service-principals.

  • De service-principal voor Kubernetes is een onderdeel van de configuratie van het cluster. Gebruik echter niet de id voor het implementeren van het cluster.
  • De referenties voor de service-principal zijn standaard één jaar geldig. U kunt de referenties van de service-principal op elk moment bijwerken of roteren.
  • Elke service-principal is gekoppeld aan een Azure AD-toepassing. De service-principal voor een Kubernetes-cluster kan worden gekoppeld aan elke geldige Azure AD-toepassingsnaam (bijvoorbeeld: https://www.contoso.org/example ). De URL van de toepassing hoeft geen echt eindpunt te zijn.
  • Gebruik bij het opgeven van de client-id van de service-principal de waarde van de appId.
  • Op de VM's van het agentknooppunt in het Kubernetes-cluster worden de referenties van de service-principal opgeslagen in het bestand /etc/kubernetes/azure.json
  • Wanneer u de opdracht az aks create gebruikt om de service-principal automatisch te genereren, worden de referenties voor de service-principal naar het bestand ~/.azure/aksServicePrincipal.json geschreven op de computer die wordt gebruikt om de opdracht uit te voeren.
  • Als u niet specifiek een service-principal door geeft in aanvullende AKS CLI-opdrachten, wordt de standaardservice-principal in ~/.azure/aksServicePrincipal.json gebruikt.
  • U kunt eventueel ook het bestand aksServicePrincipal.json verwijderen, zodat AKS een nieuwe service-principal maakt.
  • Wanneer u een AKS-cluster verwijdert dat is gemaakt met az aks create, wordt de automatisch gemaakte service-principal niet verwijderd.
    • Als u de service-principal wilt verwijderen, moet u een query uitvoeren voor uw clusterservicePrincipalProfile.clientId en vervolgens verwijderen met az ad sp delete. Vervang de volgende brongroeps- en clusternamen door uw eigen waarden:

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

Problemen oplossen

De aanmeldingsgegevens van de service-principal voor een AKS-cluster worden in de cache opgeslagen door de Azure CLI. Als deze aanmeldingsgegevens zijn verlopen, ontstaan er fouten bij het implementeren van AKS-clusters. Het volgende foutbericht bij het uitvoeren van az aks create kan duiden op een probleem met de referenties van de service-principal in de cache:

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

Controleer de leeftijd van het bestand met aanmeldingsgegevens met de volgende opdracht:

ls -la $HOME/.azure/aksServicePrincipal.json

De standaardverlooptijd voor de aanmeldingsgegevens van de service-principal is één jaar. Als het bestand aksServicePrincipal.json ouder is dan één jaar, verwijdert u het bestand en probeert u opnieuw een AKS-cluster te implementeren.

Volgende stappen

Zie Toepassings- en service-principalobjecten voor meer informatie over Azure Active Directory service-principals.

Zie De referenties voor een service-principalbijwerken of roteren in AKS voor meer informatie over het bijwerken van de referenties.