Tutorial: Configuración de roles de control de acceso basado en rol (RBAC) en Azure Kubernetes Service (AKS) con Ansible
Importante
Para ejecutar los cuadernos de estrategias de ejemplo de este tutorial, se requiere Ansible 2.8 (o cualquier versión posterior).
Azure Kubernetes Service (AKS) simplifica la implementación en Azure de clústeres de Kubernetes administrados. AKS reduce la complejidad y la sobrecarga operativa de la administración de Kubernetes al descargar gran parte de esa responsabilidad en Azure. Como servicio hospedado de Kubernetes, Azure maneja tareas críticas como la supervisión del estado y el mantenimiento para usted. Azure administra los maestros de Kubernetes. Usted solo administra y mantiene los nodos del agente. Como servicio de Kubernetes administrado, AKS es gratuito (solo debe pagar los nodos de agente incluidos en sus clústeres, no los maestros).
AKS se puede configurar para usar Microsoft Entra ID para la autenticación de usuarios. Una vez configurado, use el token de autenticación de Microsoft Entra para iniciar sesión en el clúster de AKS. El RBAC puede basarse en la identidad de un usuario o en la pertenencia al grupo de directorio.
En este artículo aprenderá a:
- Creación de un clúster de AKS habilitado para Microsoft Entra ID
- Configurar un rol de RBAC en el clúster
Requisitos previos
- Suscripción de Azure: si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
- Entidad de servicio de Azure: cree una entidad de servicio y tome nota de los siguientes valores: appId, displayName, password y tenant.
Instalación de Ansible: realice una de las siguientes opciones:
- Instalar y configurar Ansible en una máquina virtual Linux
- Configurar Azure Cloud Shell y, si no tiene acceso a una máquina virtual Linux, crear una máquina virtual con Ansible.
- Instalar la biblioteca de RedHat OpenShift -
pip install openshift
Configuración de Microsoft Entra ID para la autenticación de AKS
Al configurar Microsoft Entra ID para la autenticación de AKS, se configuran dos aplicaciones de Microsoft Entra. Un administrador del inquilino de Azure debe realizar esta operación. Para obtener más información, consulte Integración de Microsoft Entra ID con AKS.
Desde el Administrador de inquilinos de Azure, obtenga los siguientes valores:
- Secreto de la aplicación de servidor
- Id. de la aplicación de servidor
- Id. de la aplicación cliente
- Id. de inquilino
Estos valores son necesarios para ejecutar el cuaderno de estrategias de ejemplo.
Creación de un clúster de AKS
En esta sección, creará una instancia de AKS con la aplicación de Microsoft Entra.
Estas son algunas notas importantes que hay que tener en cuenta al trabajar con el cuaderno de estrategias de ejemplo:
El cuaderno de estrategias carga
ssh_key
desde~/.ssh/id_rsa.pub
. Si lo modifica, utilice el formato de línea única, empezando por "ssh-rsa" (sin las comillas).Los valores
client_id
yclient_secret
se cargan desde~/.azure/credentials
, que es el archivo de credenciales predeterminado. Puede establecer estos valores en su entidad de servicio o cargarlos desde las variables de entorno:client_id: "{{ lookup('env', 'AZURE_CLIENT_ID') }}" client_secret: "{{ lookup('env', 'AZURE_SECRET') }}"
Guarde el siguiente cuaderno de estrategias como aks-create.yml
:
- name: Create resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
- name: List supported kubernetes version from Azure
azure_rm_aksversion_facts:
location: "{{ location }}"
register: versions
- name: Create AKS cluster with RBAC enabled
azure_rm_aks:
resource_group: "{{ resource_group }}"
name: "{{ name }}"
dns_prefix: "{{ name }}"
enable_rbac: yes
kubernetes_version: "{{ versions.azure_aks_versions[-1] }}"
agent_pool_profiles:
- count: 3
name: nodepool1
vm_size: Standard_D2_v2
linux_profile:
admin_username: azureuser
ssh_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
service_principal:
client_id: "{{ lookup('ini', 'client_id section=default file=~/.azure/credentials') }}"
client_secret: "{{ lookup('ini', 'secret section=default file=~/.azure/credentials') }}"
aad_profile:
client_app_id: "{{ client_app_id }}"
server_app_id: "{{ server_app_id }}"
server_app_secret: "{{ server_app_secret }}"
tenant_id: "{{ app_tenant_id }}"
register: aks
- name: Save cluster user config
copy:
content: "{{ aks.kube_config }}"
dest: "aks-{{ name }}-kubeconfig-user"
- name: Get admin config of AKS
azure_rm_aks_facts:
resource_group: "{{ resource_group }}"
name: "{{ name }}"
show_kubeconfig: admin
register: aks
- name: Save the kubeconfig
copy:
content: "{{ aks.aks[0].kube_config }}"
dest: "aks-{{ name }}-kubeconfig"
Obtención del ID de objeto de Microsoft Entra
Para crear un enlace de RBAC, primero debe obtener el identificador de objeto de Microsoft Entra.
Inicie sesión en Azure Portal.
En el campo de búsqueda de la parte superior de la página, escriba Microsoft Entra ID.
Haga clic en
Enter
.En el menú Administrar, seleccione Usuarios.
En el campo de nombre, busque su cuenta.
En la columna Nombre, seleccione el vínculo a su cuenta.
En la sección Identidad, copie el Id. de objeto.
Creación del enlace de RBAC
En esta sección, creará un enlace de rol o un enlace de rol del clúster en AKS.
Guarde el siguiente cuaderno de estrategias como kube-role.yml
:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: cluster-admins
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: <your-aad-account>
Reemplace el marcador de posición <your-aad-account>
por el ID de objeto del inquilino de Microsoft Entra.
Guarde el siguiente cuaderno de estrategias, que implementa el nuevo rol en AKS, como aks-kube-deploy.yml
:
- name: Apply role to AKS
k8s:
src: kube-role.yml
kubeconfig: "aks-{{ name }}-kubeconfig"
Ejecución del cuaderno de estrategias de ejemplo
En esta sección se indica el cuaderno de estrategias de ejemplo completo que llama a las tareas que se crean en este artículo.
Guarde el siguiente cuaderno de estrategias como aks-rbac.yml
:
---
- hosts: localhost
vars:
resource_group: aksansibletest
name: aksansibletest
location: eastus
tasks:
- name: Ensure resource group exist
azure_rm_resourcegroup:
name: "{{ resource_group }}"
location: "{{ location }}"
- name: Create AKS
vars:
client_app_id: <client id>
server_app_id: <server id>
server_app_secret: <server secret>
app_tenant_id: <tenant id>
include_tasks: aks-create.yml
- name: Enable RBAC
include_tasks: aks-kube-deploy.yml
En la sección vars
, reemplace los marcadores de posición siguientes por la información de Microsoft Entra:
<client id>
<server id>
<server secret>
<tenant id>
Ejecute el cuaderno de estrategias completo con el comando ansible-playbook
:
ansible-playbook aks-rbac.yml
Verificación de los resultados
En esta sección, usará la lista de nodos de kubectl creada en este artículo.
Escriba el siguiente comando en un símbolo del sistema de terminal:
kubectl --kubeconfig aks-aksansibletest-kubeconfig-user get nodes
El comando le remitirá a una página de autenticación. Inicie sesión con su cuenta de Azure.
Una vez autenticado, kubectl enumera los nodos de una forma similar a la que se muestra en los siguientes resultados:
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code XXXXXXXX to authenticate.
NAME STATUS ROLES AGE VERSION
aks-nodepool1-33413200-0 Ready agent 49m v1.12.6
aks-nodepool1-33413200-1 Ready agent 49m v1.12.6
aks-nodepool1-33413200-2 Ready agent 49m v1.12.6
Limpieza de recursos
Cuando ya no los necesite, elimine los recursos creados en este artículo.
Guarde el siguiente código como cleanup.yml
:
---
- hosts: localhost
vars:
name: aksansibletest
resource_group: aksansibletest
tasks:
- name: Clean up resource group
azure_rm_resourcegroup:
name: "{{ resource_group }}"
state: absent
force: yes
- name: Remove kubeconfig
file:
state: absent
path: "aks-{{ name }}-kubeconfig"
Ejecute el cuaderno de estrategias mediante ansible-playbook.
ansible-playbook cleanup.yml