Configuración de directivas de cuota de recursos de AKS mediante Azure Policy para Kubernetes

Completado

Azure Policy le ayuda a aplicar estándares y a evaluar el cumplimiento a escala para el entorno en la nube. Se recomienda que las empresas implementen reglas de negocio para definir la forma en que se permite a los empleados poder usar el software, el hardware y otros recursos de la organización. Por tanto, las empresas usan directivas para aplicar, revisar y definir el acceso. Una directiva permite a una empresa cumplir con la gobernanza y los requisitos legales, implementar los procedimientos recomendados y establecer las convenciones de la organización.

Azure Kubernetes Service (AKS) permite organizar de forma eficiente las aplicaciones nativas de la nube mediante directivas. Se da cuenta de que necesita aplicar reglas de negocios para administrar el modo en que los equipos usan AKS para garantizar una estrategia rentable. Decide usar Azure Policy para aplicar esta idea en los recursos en la nube basados en Azure.

Antes de describir el uso de Azure Policy para Kubernetes, debe comprender algunos conceptos adicionales que permiten esta característica desde Kubernetes.

¿Qué es un controlador de admisión de Kubernetes?

Un controlador de admisión es un complemento de Kubernetes que intercepta las solicitudes autenticadas y autorizadas a la API de Kubernetes antes de la persistencia del objeto solicitado. Por ejemplo, imagine que implementa una nueva carga de trabajo y la implementación incluye una solicitud de pods con requisitos de memoria específicos. El controlador de admisión intercepta la solicitud de implementación y debe autorizarla antes de que se conserve en el clúster.

Un controlador de admisión es como un software que rige y aplica el uso y el diseño del clúster. Limita las solicitudes de creación, eliminación y modificación de objetos de Kubernetes.

¿Qué es un webhook de controlador de admisión?

Un webhook de controlador de admisión es una función de devolución de llamada HTTP que recibe solicitudes de admisión y luego actúa sobre ellas. Los controladores de admisión deben configurarse en tiempo de ejecución. Estos controladores existen para el complemento de admisión compilado o una extensión implementada que se ejecuta como webhook.

Los webhooks de admisión están disponibles en dos tipos: webhook de validación o webhook de mutación. Un webhook de mutación se invoca primero, y puede cambiar y aplicar los valores predeterminados en los objetos enviados al servidor de API. Un webhook de validación valida los valores de objeto y puede rechazar solicitudes.

¿Qué es el OPA (Open Policy Agent)?

Open Policy Agent (OPA) es un motor de directivas de uso general y de código abierto que ofrece un lenguaje declarativo general para crear directivas. Estas directivas le permiten definir reglas que supervisan el comportamiento del sistema.

¿Qué es OPA Gatekeeper?

OPA Gatekeeper es un webhook de controlador de admisión de Kubernetes de validación y de código abierto que aplica directivas basadas en definición de recursos personalizados (CRD) que siguen la sintaxis de OPA.

El objetivo de OPA Gatekeeper es permitir la personalización de directivas de admisión mediante configuración, en lugar de tener que codificar de forma rígida las reglas de directivas de servicios. También proporciona una vista completa del clúster para identificar los recursos que infringen las directivas.

Use OPA Gatekeeper para definir las directivas de toda la organización con reglas:

  • Que los límites máximos de recursos, como los de CPU y memoria, se apliquen para todos los pods configurados.

  • Que la implementación de imágenes solo se permita desde repositorios autorizados.

  • La convención de nomenclatura de las etiquetas para todos los espacios de nombres de un clúster debe especificar un punto de contacto para cada espacio de nombres.

  • Exija que los servicios de clúster tengan selectores únicos globales.

Azure Policy para AKS

Azure Policy extiende la versión 3 de OPA Gatekeeper y se integra con AKS mediante directivas integradas. Estas directivas aplican cumplimientos y medidas de seguridad a escala en el clúster de forma centralizada y coherente.

Los equipos de desarrollo de su empresa quieren optimizar el desarrollo e introducir herramientas como DevSpaces con el objetivo de simplificar el flujo de trabajo de desarrollo de Kubernetes. Usted quiere asegurarse de que los miembros del equipo cumplan los límites de recursos específicos de sus proyectos. Decide aplicar una directiva que defina los recursos de proceso y almacenamiento, y el número de objetos permitidos en los espacios de nombres de desarrollo.

Para configurar los límites de recursos, puede aplicar cuotas de recurso en el nivel de espacio de nombres y supervisar el uso de los recursos para ajustar las cuotas de la directiva. Use esta estrategia para reservar y limitar los recursos en el equipo de desarrollo.

Habilitación del complemento de Azure Policy para AKS

Para registrar la característica Complemento de Azure Policy para AKS debe seguir varios pasos. Aquí se proporcionan ejemplos, pero en realidad completará los pasos en la unidad siguiente.

  1. Registre dos proveedores de recursos mediante el comando az provider register:

    • Microsoft.ContainerService y Microsoft.PolicyInsights: Estos proveedores de recursos admiten acciones como consultar información sobre eventos de directiva y administrar contenedores. Estas son acciones para consultar, crear, actualizar o eliminar la corrección de directivas.

    Este es un ejemplo de los dos comandos de registro:

    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.PolicyInsights
    
  2. Registre la característica AKS-AzurePolicyAutoApprove con el proveedor de recursos Microsoft. ContainerService. Este es un ejemplo del comando:

    az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
    
  3. Después de confirmar el registro correcto de la característica, ejecute el comando az provider register con el parámetro --namespace para propagar el registro de las nuevas características. Este es un ejemplo del comando:

    az provider register -n Microsoft.ContainerService
    
  4. Habilitación del complemento de Azure Policy:

    az aks enable-addons \
        --addons azure-policy \
        --name myAKSCluster \
        --resource-group myResourceGroup
    

    Al activar el complemento, se programan las cargas de trabajo en dos espacios de nombres del clúster. El primer espacio de nombres es kube-system, que contiene azure-policy y azure-policy-webhook. El segundo espacio de nombres es gatekeeper-system, que contiene gatekeeper-controller-manager. Estas cargas de trabajo son las responsables de evaluar las solicitudes enviadas al plano de control de AKS. En función de las directivas configuradas, el webhook de directiva puede permitir o denegar las solicitudes.

Asignación de una definición de directiva integrada

Las directivas del entorno de Azure se administran mediante el panel de cumplimiento de Azure Policy. El panel permite explorar en profundidad hasta un nivel de detalle de recurso y directiva. Contribuye al cumplimiento de los recursos gracias a la corrección en masa de recursos existentes y la corrección automática de nuevos recursos.

En cada directiva se muestra la siguiente información general:

Elemento Descripción Ejemplo
Nombre El nombre de la directiva. [Versión preliminar]: Asegurarse de que los límites de los recursos de memoria y CPU del contenedor no superan los límites especificados en el clúster de Kubernetes.
Ámbito El grupo de recursos de la suscripción al que se aplica esta directiva. mySubscription/rg-akscostsaving.
Estado de cumplimiento Estado de las directivas asignadas. Compatible, En conflicto, No iniciado o No registrado.
Compatibilidad de recursos Porcentaje de recursos que cumplen la directiva. En este cálculo se tienen en cuenta los recursos conformes, no conformes y con conflictos. 100
Recursos no compatibles Número de recursos únicos que infringen una o más reglas de la directiva. 3
Directivas no compatibles Número de directivas no conformes. 5

Desde aquí, explorará en profundidad los detalles por recurso y por directiva de los eventos desencadenados. Por ejemplo, puede examinar los detalles de la implementación de una carga de trabajo denegada.

Asignación de directivas

Para asignar una directiva, seleccione la opción Asignaciones en la sección Creación del panel de navegación de Azure Policy.

Las directivas de Azure se asignan de dos formas: como un grupo de directivas, lo que se denomina una iniciativa, o como una única directiva.

Asignación de iniciativa

Una asignación de iniciativa es una colección de definiciones de directivas de Azure agrupadas para satisfacer un objetivo o propósito concreto. Por ejemplo, el objetivo podría ser aplicar el Estándar de Seguridad de Datos para la Industria de Tarjeta de Pago en todos los recursos.

Asignación de directiva

Una asignación de directiva asigna una única directiva, como No permitir contenedores con privilegios en el clúster de Kubernetes.

Cómo asignar una directiva

Cada directiva se define mediante una serie de pasos de configuración. La cantidad de información que se captura depende del tipo de directiva que se selecciona.

Por ejemplo, para limitar la implementación de recursos por parte de los desarrolladores en el entorno de nube de la empresa, puede asignar una de las directivas integradas de Azure para Azure Kubernetes Service. El nombre de la directiva es Asegurarse de que los límites de los recursos de memoria y la CPU del contenedor no superan los límites especificados en el clúster de Kubernetes.

La directiva requiere que establezca el límite de recursos que pueden ser consumidos por las solicitudes de implementación.

Echemos un vistazo a las opciones configurables al asignar una directiva.

Información básica de la directiva

El primer paso exige seleccionar y escribir información básica que define a la nueva directiva. Por ejemplo, esta información puede ser la directiva y el ámbito del recurso. En la tabla siguiente, se muestra cada elemento que puede configurar:

Elemento Descripción
Ámbito El ámbito determina en qué recursos o grupo de recursos se aplica la asignación de directiva. Este valor se basa en una suscripción o un grupo de administración. Puede excluir recursos de la selección en un nivel inferior al nivel de ámbito.
Definición de directiva Directiva que se quiere aplicar. Puede elegir entre varias opciones de directivas integradas.
Nombre de asignación Nombre usado para identificar la directiva asignada.
Descripción Descripción de texto libre de la directiva.
Cumplimiento de directivas Es posible elegir Habilitado y Deshabilitado. Si es Deshabilitado, la directiva no se aplica y las solicitudes no se deniegan con un estado de no cumplimiento.
Asignada por Valor de texto libre cuyo valor predeterminado es el usuario registrado. Es posible cambiar este valor.

Parámetros de directiva

Las directivas de requieren la configuración de las reglas de negocio que se aplican a cada directiva en concreto. No todas las directivas tienen las mismas reglas de negocio, y por eso cada directiva tiene distintos parámetros.

Por ejemplo, la directiva Asegurarse de que los límites de los recursos de memoria y la CPU del contenedor no superan los límites especificados en el clúster de Kubernetes requiere que se establezcan tres parámetros:

  • El número máximo de unidades de CPU permitidas en un contenedor
  • El número máximo de bytes de memoria permitidos en un contenedor
  • Lista de los espacios de nombres de Kubernetes que se excluirán de la directiva

Compare esa directiva con Recomendación de acceso a las aplicaciones web solo a través de HTTPS, que no tiene parámetros personalizados que configurar.

Todas las directivas tienen un valor de Efecto. Este valor habilita o deshabilita la ejecución de la directiva. Como ocurre con los parámetros, las directivas también pueden tener diferentes opciones Efecto.

Por ejemplo, para la directiva de administración de recursos, es posible seleccionar auditoría, denegar o deshabilitar como valor de Efecto. En la directiva de aplicaciones web, solo puede seleccionar Auditoría o Deshabilitar.

En la tabla siguiente se indican todos los efectos admitidos actualmente en las definiciones de directivas:

Efecto Descripción
Anexar Agrega más campos al recurso solicitado
Auditoría Crea un evento de advertencia en el registro de actividad
AuditIfNotExists Habilita la auditoría de recursos en relación con el recurso que coincida con la condición
Deny Evita una solicitud de recursos que no coincida con los estándares definidos en una definición de directiva y genera un error en la solicitud
DeployIfNotExists Ejecuta una implementación de plantilla cuando se cumple una condición
Deshabilitado Útil para situaciones de prueba o si la definición de la directiva ha parametrizado el efecto, y se quiere deshabilitar una única asignación
Modify Agrega, actualiza o quita etiquetas en un recurso durante la creación o la actualización

Corrección de directivas

El paso final es pensar en la corrección de directivas. Al asignar directivas, es posible que los recursos ya existan y se vean afectados por la nueva directiva. De forma predeterminada, solo los recursos recién creados se ven afectados por la nueva directiva. Use la corrección para comprobar los recursos existentes después de asignar una nueva directiva. Las tareas de corrección pueden diferir según los tipos de directivas aplicadas.

En el ejercicio siguiente, use la directiva Asegurarse de que los límites de los recursos de memoria y la CPU del contenedor no superan los límites especificados en el clúster de Kubernetes para reducir los costos aún más.