Use una entidad de servicio con Azure Kubernetes Service (AKS)
Para acceder con otros recursos de Azure Active Directory (Azure AD), un clúster de AKS requiere una entidad de servicio de Azure Active Directory (AD) o una identidad administrada. Estos elementos se necesitan para crear y administrar dinámicamente otros recursos de Azure, como Azure Load Balancer o Container Registry.
Las identidades administradas son la manera recomendada de autenticarse en otros recursos y es el método de autenticación predeterminado para el clúster AKS. Para más información sobre el uso de una identidad administrada con el clúster, consulte Uso de una identidad administrada asignada por el sistema.
En este artículo se muestra cómo crear y usar una entidad de servicio para los clústeres de AKS.
Antes de empezar
Para crear una entidad de servicio de Azure AD, es preciso tener los permisos suficientes para registrar una aplicación en un inquilino de Azure AD y asignarle un rol en una suscripción. Si no tiene los permisos necesarios, tiene que pedir al administrador de Azure AD o de la suscripción que asigne los permisos necesarios o crear previamente una entidad de servicio para su uso con el clúster de AKS.
Si usa una entidad de servicio de otro inquilino de Azure AD, hay otras consideraciones en torno a los permisos disponibles al implementar el clúster. Puede que no tenga los permisos adecuados para leer y escribir datos del directorio. Para obtener más información, consulte ¿Cuáles son los permisos de usuario predeterminados en Azure Active Directory?
Prerrequisitos
CLI de Azure, versión 2.0.59 o posterior. Ejecute az --version
para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
Azure PowerShell, versión 5.0.0 o posterior. Ejecute Get-InstalledModule -Name Az
para encontrar la versión. Si tiene que instalarla o actualizarla, consulte Instalación del módulo Azure Az PowerShell.
Creación manual de una entidad de servicio
Para crear manualmente una entidad de servicio con la CLI de Azure, use el comando az ad sp create-for-rbac.
az ad sp create-for-rbac --name myAKSClusterServicePrincipal
La salida será similar al del ejemplo siguiente: Copie los valores de appId
y password
. Se usan al crear un clúster de AKS en la sección siguiente.
{
"appId": "559513bd-0c19-4c1a-87cd-851a26afd5fc",
"displayName": "myAKSClusterServicePrincipal",
"name": "http://myAKSClusterServicePrincipal",
"password": "e763725a-5eee-40e8-a466-dc88d980f415",
"tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48"
}
Especificación de una entidad de servicio para un clúster de AKS
Para usar una entidad de servicio existente al crear un clúster de AKS mediante el comando az aks create, use los parámetros --service-principal
y --client-secret
para especificar los valores appId
y password
a partir del resultado del comando az ad sp create-for-rbac:
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--service-principal <appId> \
--client-secret <password>
Nota
Si utiliza una entidad de servicio existente con secreto personalizado, asegúrese de que este no supera los 190 bytes.
Delegación del acceso a otros recursos de Azure
La entidad de servicio del clúster de AKS se puede utilizar para acceder a otros recursos. Por ejemplo, si quiere implementar el clúster de AKS en una subred de red virtual de Azure o conectarse a Azure Container Registry (ACR), debe delegar el acceso a estos recursos a la entidad de servicio.
Para delegar permisos, cree una asignación de roles mediante el comando az role assignment create. Asigne el elemento appId
a un ámbito determinado, como un grupo de recursos o un recurso de red virtual. Un rol define qué permisos tiene la entidad de servicio en el recurso, como se muestra en el ejemplo siguiente:
az role assignment create --assignee <appId> --scope <resourceScope> --role Contributor
El elemento --scope
de un recurso debe ser un identificador de recurso completo, como /subscriptions/<guid>/resourceGroups/myResourceGroup o /subscriptions/<guid >/resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet
Nota
Si ha quitado la asignación del rol Colaborador del grupo de recursos del nodo, se pueden producir errores en las siguientes operaciones. El permiso concedido a un clúster mediante una identidad administrada asignada por el sistema puede tardar hasta 60 minutos en rellenarse.
Las secciones siguientes detallan las delegaciones comunes que es posible que deba asignar.
Azure Container Registry
Si usa Azure Container Registry (ACR) como el almacén de imágenes de contenedor, deberá conceder permisos a la entidad de servicio que el clúster de AKS pueda leer y extraer imágenes. Actualmente, la configuración recomendada es usar el comando az aks create o az aks update para integrarse con un registro y asignar el rol adecuado a la entidad de servicio. Para ver los pasos detallados, consulte Autenticación con Azure Container Registry desde Azure Kubernetes Service.
Redes
Puede usar redes avanzadas en las que la red virtual y la subred o las direcciones IP públicas se encuentran en otro grupo de recursos. Asigne el rol integrado Colaborador de la red en la subred dentro de la red virtual. Como alternativa, puede crear un rol personalizado con permisos para tener acceso a los recursos de red de ese grupo de recursos. Para obtener más información, consulte los permisos de servicio de AKS.
Almacenamiento
Si necesita acceder a los recursos de disco existentes en otro grupo de recursos, asigne uno de los siguientes conjuntos de permisos de rol:
- Cree un rol personalizado y defina los siguientes permisos de rol:
- Microsoft.Compute/disks/read
- Microsoft.Compute/disks/write
- O bien, asigne el rol integrado Colaborador de la cuenta de almacenamiento en el grupo de recursos.
Azure Container Instances
Si usa Virtual Kubelet para la integración con AKS y elige ejecutar Azure Container Instances (ACI) en un grupo de recursos separado del clúster de AKS, la entidad de servicio de clúster AKS debe tener concedidos los permisos de Colaborador en el grupo de recursos de ACI.
Otras consideraciones
Al usar AKS y una entidad de servicio de Azure AD, tenga en cuenta lo siguiente:
- La entidad de servicio para Kubernetes forma parte de la configuración del clúster. Sin embargo, no use esta identidad para implementar el clúster.
- De forma predeterminada, las credenciales de la entidad de servicio son válidas durante un año. Puede actualizar o rotar las credenciales de la entidad de servicio en cualquier momento.
- Cada entidad de servicio está asociada a una aplicación de Azure AD. La entidad de servicio de un clúster de Kubernetes puede asociarse con cualquier nombre de aplicación de Azure AD válido (por ejemplo, https://www.contoso.org/example). La dirección URL de la aplicación no tiene por qué ser un punto de conexión real.
- Al especificar el identificador de cliente, utilice el valor de
appId
. - En las VM del nodo de agente del clúster de Kubernetes, las credenciales de la entidad de servicio se almacenan en el archivo
/etc/kubernetes/azure.json
. - Cuando use el comando az aks create para generar la entidad de servicio automáticamente, sus credenciales se escriben en el archivo
~/.azure/aksServicePrincipal.json
de la máquina que se usa para ejecutar el comando. - Si no especifica una entidad de servicio principal de la CLI de AKS, se usa la entidad de servicio predeterminada ubicada en
~/.azure/aksServicePrincipal.json
. - Opcionalmente, puede quitar el archivo
aksServicePrincipal.json
, y AKS crea una nueva entidad de servicio. - Al eliminar un clúster de AKS creado mediante az aks create, no se elimina la entidad de servicio creada automáticamente.
Para eliminar la entidad de servicio, consulte el clúster servicePrincipalProfile.clientId y después elimínelo con el comando az ad sp delete. Reemplace los valores del parámetro
-g
para el nombre del grupo de recursos y el parámetro-n
para el nombre del clúster:az ad sp delete --id $(az aks show -g myResourceGroup -n myAKSCluster --query servicePrincipalProfile.clientId -o tsv)
Solución de problemas
La CLI de Azure almacena en caché las credenciales de la entidad de servicio para un clúster de AKS. Si estas credenciales han expirado, se producen errores durante la implementación del clúster de AKS. El siguiente mensaje de error al ejecutar az aks create puede indicar un problema con las credenciales de la entidad de servicio almacenadas en caché:
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'.
Compruebe la antigüedad del archivo de credenciales con la ejecución del comando siguiente:
ls -la $HOME/.azure/aksServicePrincipal.json
El tiempo de expiración predeterminado para las credenciales de la entidad de servicio es de un año. Si el archivo aksServicePrincipal.json tiene más de un año, elimine el archivo e implementar el clúster de AKS.
Pasos siguientes
Para obtener más información sobre las entidades de servicio de Azure Active Directory, consulte Objetos de aplicación y de entidad de servicio.
Para obtener información sobre cómo actualizar las credenciales, vea Actualizar o rotar las credenciales de una entidad de servicio en AKS.