Tutorial: Configuración de roles de control de acceso basado en rol (RBAC) en Azure Kubernetes Service (AKS) con AnsibleTutorial: Configure role-based access control (RBAC) roles in Azure Kubernetes Service (AKS) using Ansible

Importante

Para ejecutar los cuadernos de estrategias de ejemplo de este tutorial, se requiere Ansible 2.8 (o cualquier versión posterior).Ansible 2.8 (or later) is required to run the sample playbooks in this article.

Azure Kubernetes Service (AKS) simplifica la implementación en Azure de clústeres de Kubernetes administrados.Azure Kubernetes Service (AKS) makes it simple to deploy a managed Kubernetes cluster in Azure. AKS reduce la complejidad y la sobrecarga operativa de la administración de Kubernetes al descargar gran parte de esa responsabilidad en Azure.AKS reduces the complexity and operational overhead of managing Kubernetes by offloading much of that responsibility to Azure. Como servicio hospedado de Kubernetes, Azure maneja tareas críticas como la supervisión del estado y el mantenimiento para usted.As a hosted Kubernetes service, Azure handles critical tasks like health monitoring and maintenance for you. Azure administra los maestros de Kubernetes.The Kubernetes masters are managed by Azure. Solo debe administrar y mantener los nodos de agente.You only manage and maintain the agent nodes. Como servicio de Kubernetes administrado, AKS es gratuito (solo debe pagar los nodos de agente incluidos en sus clústeres, no los maestros).As a managed Kubernetes service, AKS is free - you pay only for the agent nodes within your clusters; not for the masters.

Es posible configurar AKS para que utilice Azure Active Directory (AD) para la autenticación de usuarios.AKS can be configured to use Azure Active Directory (AD) for user authentication. Una vez configurado, use el token de autenticación de Azure AD para iniciar sesión en el clúster de AKS.Once configured, you use your Azure AD authentication token to sign into the AKS cluster. El RBAC puede basarse en la identidad de un usuario o en la pertenencia al grupo de directorio.The RBAC can be based on a user's identity or directory group membership.

En este tutorial, se usa Ansible para:In this tutorial, Ansible is used to:

  • Crear un clúster de AKS habilitado para Azure ADCreate an Azure AD-enabled AKS cluster
  • Configurar un rol de RBAC en el clústerConfigure an RBAC role in the cluster

Requisitos previosPrerequisites

  • Suscripción de Azure: Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.Azure subscription: If you don't have an Azure subscription, create a free account before you begin.
  • Entidad de servicio de Azure: Cree una entidad de servicio, tomando nota de los siguientes valores: appId, displayName, password y tenant.Azure service principal: Create a service principal, making note of the following values: appId, displayName, password, and tenant.
  • Instalar la biblioteca de RedHat OpenShift - pip install openshiftInstall the RedHat OpenShift library - pip install openshift

Configurar Azure AD para la autenticación de AKSConfigure Azure AD for AKS authentication

Al configurar Azure AD para la autenticación de AKS, se configuran dos aplicaciones de Azure AD.When configuring Azure AD for AKS authentication, two Azure AD applications are configured. Un administrador del inquilino de Azure debe realizar esta operación.This operation must be completed by an Azure tenant administrator. Para más información, vea Integración de Azure Active Directory con Azure Kubernetes Service.For more information, see Integrate Azure Active Directory with AKS.

Desde el Administrador de inquilinos de Azure, obtenga los siguientes valores:From the Azure tenant administrator, get the following values:

  • Secreto de la aplicación de servidorServer app secret
  • Id. de la aplicación de servidorServer app ID
  • Id. de la aplicación clienteClient app ID
  • Id. de inquilinoTenant ID

Estos valores son necesarios para ejecutar el cuaderno de estrategias de ejemplo.These values are needed to run the sample playbook.

Creación de un clúster de AKSCreate an AKS cluster

En esta sección, creará una instancia de AKS con la aplicación de Azure AD.In this section, you create an AKS with the Azure AD application.

Estas son algunas notas claves que se deben tener en cuenta al trabajar con el cuaderno de estrategias de ejemplo:Here are some key notes to consider when working with the sample playbook:

  • El cuaderno de estrategias carga ssh_key desde ~/.ssh/id_rsa.pub.The playbook loads ssh_key from ~/.ssh/id_rsa.pub. Si lo modifica, utilice el formato de línea única, empezando por "ssh-rsa" (sin las comillas).If you modify it, use the single-line format - starting with "ssh-rsa" (without the quotes).

  • Los valores client_id y client_secret se cargan desde ~/.azure/credentials, que es el archivo de credenciales predeterminado.The client_id and client_secret values are loaded from ~/.azure/credentials, which is the default credential file. Puede establecer estos valores en su entidad de servicio o cargarlos desde las variables de entorno:You can set these values to your service principal or load these values from environment variables:

    client_id: "{{ lookup('env', 'AZURE_CLIENT_ID') }}"
    client_secret: "{{ lookup('env', 'AZURE_SECRET') }}"
    

Guarde el siguiente cuaderno de estrategias como aks-create.yml:Save the following playbook as 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"

Obtener el identificador de objeto de AzureGet the Azure AD Object ID

Para crear un enlace de RBAC, primero debe obtener el identificador de objeto de Azure AD.To create an RBAC binding, you first need to get the Azure AD Object ID.

  1. Inicie sesión en el Azure Portal.Sign in to the Azure portal.

  2. En el campo de búsqueda de la parte superior de la página, escriba Azure Active Directory.In the search field at the top of the page, enter Azure Active Directory.

  3. Haga clic en Enter.Click Enter.

  4. En el menú Administrar, seleccione Usuarios.In the Manage menu, select Users.

  5. En el campo de nombre, busque su cuenta.In the name field, search for your account.

  6. En la columna Nombre, seleccione el vínculo a su cuenta.In the Name column, select the link to your account.

  7. En la sección Identidad, copie el Id. de objeto.In the Identity section, copy the Object ID.

    Copie el identificador de objeto de Azure AD.

Creación del enlace de RBACCreate RBAC binding

En esta sección, creará un enlace de rol o un enlace de rol del clúster en AKS.In this section, you create a role binding or cluster role binding in AKS.

Guarde el siguiente cuaderno de estrategias como kube-role.yml:Save the following playbook as 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 &lt;your-aad-account> por el Id. de objeto del inquilino de Azure AD.Replace the &lt;your-aad-account> placeholder with your Azure AD tenant Object ID.

Guarde el siguiente cuaderno de estrategias, que implementa el nuevo rol en AKS, como aks-kube-deploy.yml:Save the following playbook - that deploys your new role to AKS - as 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 ejemploRun the sample playbook

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.This section lists the complete sample playbook that calls the tasks creating in this article.

Guarde el siguiente cuaderno de estrategias como aks-rbac.yml:Save the following playbook as 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 Azure AD:In the vars section, replace the following placeholders with your Azure AD information:

  • <client id>
  • <server id>
  • <server secret>
  • <tenant id>

Ejecute el cuaderno de estrategias completo con el comando ansible-playbook:Run the complete playbook using the ansible-playbook command:

ansible-playbook aks-rbac.yml

Verificación de los resultadosVerify the results

En esta sección, usará la lista de nodos de kubectl creada en este artículo.In this section, you use kubectl list the nodes creating in this article.

Escriba el siguiente comando en un símbolo del sistema de terminal:Enter the following command at a terminal prompt:

kubectl --kubeconfig aks-aksansibletest-kubeconfig-user get nodes

El comando le remitirá a una página de autenticación.The command will direct you to an authentication page. Inicie sesión con su cuenta de Azure.Sign in with your Azure account.

Una vez autenticado, kubectl enumera los nodos de una forma similar a la que se muestra en los siguientes resultados:Once authenticated, kubectl lists the nodes in similar fashion to the following results:

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 recursosClean up resources

Cuando ya no los necesite, elimine los recursos creados en este artículo.When no longer needed, delete the resources created in this article.

Guarde el siguiente código como cleanup.yml:Save the following code as 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"

Use el comando ansible-playbook para ejecutar el cuaderno de estrategias:Run the playbook using the ansible-playbook command:

ansible-playbook cleanup.yml

Pasos siguientesNext steps