Descripción general del controlador de jerarquía

En este documento se describe el controlador de jerarquía, un controlador de Kubernetes y de admisión dinámico que agrega jerarquías a los espacios de nombres de Kubernetes.

Espacios de nombres jerárquicos

El controlador de jerarquía presenta el concepto de espacios de nombres jerárquicos, que son extensiones de los espacios de nombres de Kubernetes que facilitan la administración de grupos de espacios de nombres que comparten un concepto común de propiedad. Son especialmente útiles en clústeres que comparten varios equipos, pero no es necesario que los propietarios sean personas. Por ejemplo, recomendamos convertir a un operador en propietario de un conjunto de espacios de nombres.

Para admitir casos de uso de multiusuario, los espacios de nombres jerárquicos tienen los siguientes dos comportamientos clave además de los espacios de nombres de Kubernetes normales:

  • Creación de espacios de nombres delegados. El controlador de jerarquía presenta el concepto de un subespacio de nombres, que los usuarios pueden crear en un espacio de nombres existente, incluso si no tienen privilegios de espacio de nombres a nivel de clúster.

    Por ejemplo, puedes definir un espacio de nombres para un equipo en el Sincronizador de configuración en un repositorio de Git, pero luego delegar la creación de subespacios de nombres al equipo. Esto les permite crear sus propios subespacios de nombres en el espacio de nombres a nivel del equipo que definiste para ellos, sin hacer modificaciones en Git.

  • Aplicación de políticas. Al igual que el sincronizador de configuración puede propagar objetos de políticas de directorios de espacios de nombres abstractos a espacios de nombres de Kubernetes, el controlador de jerarquía puede propagar aún más estos objetos a espacios de nombres secundarios. Por ejemplo, hacer esto garantiza que las políticas que se aplican al espacio de nombres raíz de un equipo también se apliquen a sus espacios de nombres secundarios.

    Sin embargo, hay algunas diferencias entre la manera en que el controlador de jerarquía y el sincronizador de configuración propagan las políticas. El sincronizador de configuración copia todos los objetos de los directorios de espacio de nombres abstractos en sus espacios de nombres de Kubernetes descendientes. Por el contrario, el controlador de jerarquía copia solo las funciones de RBAC y las vinculaciones de funciones de forma predeterminada, aunque se puede configurar para propagar cualquier otro tipo de objeto de Kubernetes.

El controlador de jerarquía está integrado en la versión 1.4.1 y posteriores del Sincronizador de configuración. Además, el controlador de jerarquía se basa en el controlador de espacios de nombres jerárquico (HNC), un proyecto de código abierto.

Espacios de nombres jerárquicos frente a espacios de nombres abstractos

Los espacios de nombres jerárquicos que proporciona el controlador de jerarquía son similares a los espacios de nombres abstractos del sincronizador de configuración. Sin embargo, si bien los espacios de nombres abstractos solo existen en el repositorio del sincronizador de configuración, los espacios de nombres jerárquicos son todos espacios de nombres de Kubernetes y existen en el clúster.

Para evitar la contención entre los espacios de nombres abstractos del sincronizador de configuración y los espacios de nombres del controlador de jerarquía, asegúrate de que no se cree un espacio de nombres jerárquico sin raíz como un espacio de nombres abstracto o de hoja en el repositorio del sincronizador de configuración.

De manera alternativa, puedes usar un repositorio no estructurado para inhabilitar los espacios de nombres abstractos del sincronizador de configuración y depender únicamente del controlador de jerarquía para definir jerarquías y propagar políticas. Esto puede ser útil si no puedes usar la estructura de directorio del repositorio predeterminado, pero quieres aprovechar las funciones jerárquicas.

Para usar repositorios no estructurados, verifica en los espacios de nombres secundarios o los espacios de nombres completos. Recomendamos usar espacios de nombres completos porque puedes actualizar sus relaciones jerárquicas modificando el objeto HierarchicalConfiguration (que también debes revisar). Por el contrario, si revisas los espacios de nombres secundarios, asegúrate de revisar tanto los espacios de nombres como los objetos SubnamespaceAnchor en sus elementos superiores, pero ten en cuenta que no están diseñados para modificarse fácilmente después de su creación.

En ambos casos, asegúrate de configurar el controlador de jerarquía para aplicar todos los tipos de objetos de Kubernetes deseados en las jerarquías. De forma predeterminada, solo se aplican las funciones de RBAC y las vinculaciones de funciones.

¿Qué sigue?