Instala el controlador de políticas

En esta página, se muestra cómo instalar el Controlador de políticas. El Controlador de políticas verifica, audita y aplica el cumplimiento de tus clústeres con las políticas relacionadas con la seguridad, las regulaciones o las reglas comerciales.

Policy Controller está disponible si usas la edición Google Kubernetes Engine (GKE) Enterprise. Para obtener más información, consulta los precios de Google Kubernetes Engine (GKE) Enterprise. Puedes crear un informe para probar Policy Controller antes de instalarlo sin costo.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  1. Instala e inicializa Google Cloud CLI, que proporciona los comandos gcloud, gsutil, kubectl y nomos que se usan en estas instrucciones. Si instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente. Si usas Cloud Shell, Google Cloud CLI tendrá preinstalado.
  2. Asegúrate de que el Gatekeeper de agente de Open Policy de código abierto no esté instalado en el clúster. Si es así, desinstala Gatekeeper antes de instalar el controlador de políticas.
  3. Habilita la API de GKE Enterprise.

    Habilitar la API de GKE Enterprise

  4. Crea un clúster que ejecute una versión de Kubernetes 1.14.x o posterior o asegúrate de tener acceso a uno. Parece que el Controlador de políticas se ejecuta en versiones de Kubernetes anteriores a la versión 1.14.x, pero el producto no se comporta correctamente.

  5. Otorga las funciones de IAM necesarias al usuario que registra el clúster.

  6. Si planeas usar Google Cloud CLI para configurar el controlador de políticas, registra tu clúster en una flota ahora. Si planeas usar la consola de Google Cloud, registra tus clústeres cuando instales el controlador de políticas.

  7. Si usas clústeres conectados de GKE, asegúrate de que el clúster de AKS no tenga el complemento de política de Azure y evita etiquetar espacios de nombres con la clave control-plane.

  8. Si usas GKE en VMware o Google Distributed Cloud Virtual for Bare Metal, asegúrate de instalar el controlador de políticas en un clúster de usuario. El controlador de políticas no se puede instalar en un clúster de administrador.

Instalar Controlador de políticas

A partir de la versión 1.16.0, si usas Google Cloud CLI, puedes instalar y administrar el controlador de políticas directamente (recomendado) o a través del objeto ConfigManagement.

Console

Para instalar el controlador de políticas en Google Cloud Console, completa los siguientes pasos:

  1. En la consola de Google Cloud, ve a la página Política de GKE Enterprise en la sección Funciones.

    Ir a la política

  2. Selecciona Install Policy Controller.

  3. En el panel Policy Controller Installation, selecciona una de las siguientes opciones de instalación:

    • Para instalar el controlador de políticas en todos los clústeres de una flota, sigue estos pasos:

      1. Mantén seleccionada la opción Instalar en tu flota.

        Si no tienes una flota en tu proyecto, puedes crearla en el siguiente paso.

      2. Si aún no tienes una flota, elige un nombre para ella.

      3. Selecciona Activar Policy Controller.

    • Para instalar el controlador de políticas en clústeres individuales, sigue estos pasos:

      1. Selecciona Instalar en clústeres individuales.

      2. En la tabla Clústeres disponibles, selecciona los clústeres en los que deseas instalar el controlador de políticas.

      3. Selecciona Activar Policy Controller.

Se te redireccionará a la pestaña Configuración del controlador de políticas. Cuando el controlador de políticas se instala y configura en los clústeres, las columnas de estado muestran Instalado . Esto puede tardar varios minutos.

Controlador de políticas de gcloud

Para habilitar el controlador de políticas, ejecuta el siguiente comando:

gcloud alpha container fleet policycontroller enable \
    --memberships=MEMBERSHIP_NAME

Puedes establecer campos adicionales para configurar Policy Controller. Por ejemplo, es posible que desees indicarle al controlador de políticas que exima algunos espacios de nombres de la aplicación. Para obtener una lista completa de los campos que puedes configurar, consulta la documentación del Controlador de políticas de Google Cloud CLI o ejecuta gcloud alpha container fleet policycontroller enable --help.

gcloud ConfigManagement

  1. Para preparar la configuración, crea un nuevo manifiesto apply-spec.yaml o usa un manifiesto existente. El uso de un manifiesto existente te permite configurar tu clúster con la misma configuración que usa otro clúster.

    Crear manifiesto nuevo

    Para configurar el Controlador de políticas con una configuración nueva para tu clúster, crea un archivo llamado apply-spec.yaml y copia el siguiente archivo YAML en él:

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      policyController:
        # Set to true to install and enable Policy Controller
        enabled: true
        # Uncomment to prevent the template library from being installed
        # templateLibraryInstalled: false
        # Uncomment to enable support for referential constraints
        # referentialRulesEnabled: true
        # Uncomment to disable audit, adjust value to set audit interval
        # auditIntervalSeconds: 0
        # Uncomment to log all denies and dryrun failures
        # logDeniesEnabled: true
        # Uncomment to enable mutation
        # mutationEnabled: true
        # Uncomment to exempt namespaces
        # exemptableNamespaces: ["namespace-name"]
        # Uncomment to change the monitoring backends
        # monitoring:
        #     backends:
        #     - cloudmonitoring
        #     - prometheus
      # ...other fields...
    

    Debes agregar un campo spec.policyController y establecer el valor de enabled en true. Puedes elegir habilitar otras funciones del controlador de políticas. La compatibilidad para restricciones referenciales está inhabilitada según la configuración predeterminada. Antes de habilitarlo, asegúrate de familiarizarte con las advertencias sobre la coherencia eventual.

    Usar el manifiesto existente

    Para configurar tu clúster con la misma configuración que usa otro clúster, recupera la configuración de un clúster registrado:

    gcloud alpha container fleet config-management fetch-for-apply \
         --membership=MEMBERSHIP_NAME \
         --project=PROJECT_ID \
         > CONFIG_YAML_PATH
    

    Reemplaza lo siguiente:

    • MEMBERSHIP_NAME: El nombre de la membresía del clúster registrado que tiene la configuración del controlador de políticas que deseas usar
    • PROJECT_ID: El ID de tu proyecto
    • CONFIG_YAML_PATH: La ruta de acceso al archivo apply-spec.yaml
  2. Aplica el archivo apply-spec.yaml:

    gcloud beta container fleet config-management apply \
        --membership=MEMBERSHIP_NAME \
        --config=CONFIG_YAML \
        --project=PROJECT_ID
    

    Reemplaza lo siguiente:

    • MEMBERSHIP_NAME: Es el nombre de la membresía del clúster registrado que tiene la configuración del controlador de políticas que deseas usar.
    • CONFIG_YAML: Agrega la ruta de acceso a tu archivo apply-spec.yaml.
    • PROJECT_ID: Agrega ID de tu proyecto.

Se crea el pod, y el Controlador de políticas comienza a buscar restricciones y a aplicarlas.

Verifica la instalación del controlador de políticas

Después de instalar el controlador de políticas, puedes verificar que se haya completado de forma correcta.

Console

Completa los siguientes pasos:

  1. En la consola de Google Cloud, ve a la página Política de GKE Enterprise en la sección Funciones.

    Ir a la política

  2. En la pestaña Configuración, en la tabla del clúster, verifica la columna Estado del controlador de políticas. Si la instalación se realiza correctamente, tendrá el estado Instalada .

Controlador de políticas de gcloud

Ejecuta el siguiente comando:

gcloud alpha container fleet policycontroller describe --memberships=MEMBERSHIP_NAME

Si la instalación se realizó correctamente, se mostrará membershipStates: MEMBERSHIP_NAME: policycontroller: state: ACTIVE.

gcloud ConfigManagement

Ejecuta el siguiente comando:

gcloud beta container fleet config-management status \
    --project=PROJECT_ID

Reemplaza PROJECT_ID por el ID del proyecto.

Deberías ver un resultado similar al siguiente:

Name          Status  Last_Synced_Token  Sync_Branch  Last_Synced_Time      Policy_Controller
CLUSTER_NAME  SYNCED  a687c2c            1.0.0        2021-02-17T00:15:55Z  INSTALLED

Una instalación correcta tiene el estado INSTALLED en la columna del Controlador de políticas.

Verifica la instalación de la biblioteca de plantillas de restricciones

Cuando instalas el controlador de políticas, la biblioteca de plantillas de restricciones se instala de forma predeterminada. Esta instalación puede tardar varios minutos en completarse. Puedes verificar que la biblioteca de plantillas se haya completado correctamente.

Console

Completa los siguientes pasos:

  1. En la consola de Google Cloud, ve a la página Política de GKE Enterprise en la sección Funciones.

    Ir a la política

  2. En la pestaña Configuración, en la tabla del clúster, selecciona el número que aparece en la columna Paquetes instalados. En el panel Estado del contenido de la política, una instalación exitosa de la biblioteca de plantillas tendrá el estado Instalada .

gcloud

Ejecuta el siguiente comando:

kubectl get constrainttemplates

Deberías ver un resultado similar al siguiente:

NAME                                      AGE
k8sallowedrepos                           84s
k8scontainerlimits                        84s
k8spspallowprivilegeescalationcontainer   84s
...[OUTPUT TRUNCATED]...

Cuando una plantilla de restricciones individual se instala de forma adecuada, su campo status.created es true.

Configura los valores predeterminados a nivel de la flota

Si habilitaste la edición Google Kubernetes Engine (GKE) Enterprise, puedes habilitar y configurar Policy Controller como un valor predeterminado a nivel de la flota para tus clústeres. Esto significa que cada clúster de GKE nuevo en Google Cloud registrado durante la creación del clúster tendrá el controlador de políticas habilitado en el clúster con la configuración que especifiques. Puedes obtener más información sobre la configuración predeterminada de la flota en Administra las funciones a nivel de la flota.

Si deseas configurar los valores predeterminados a nivel de la flota para el controlador de políticas, completa los siguientes pasos:

Console

  1. En la consola de Google Cloud, ve a la página Administrador de funciones.

    Ir a Administrador de funciones

  2. En el panel Política, haz clic en Configurar.

  3. Revisa la configuración a nivel de la flota. Todos los clústeres nuevos que registres en la flota heredarán esta configuración.

  4. Opcional: Para cambiar la configuración predeterminada, haz clic en Personalizar la configuración de la flota. En el cuadro de diálogo que aparece, haz lo siguiente:

    1. En la sección Agregar o editar paquetes de políticas, incluye o excluye un paquete de políticas haciendo clic en el botón de activación correspondiente.
    2. En la sección Edita la configuración del controlador de políticas, haz lo siguiente:
      1. Para habilitar el webhook de mutación, selecciona la casilla de verificación Habilitar webhook de mutación. Esta función no es compatible con los clústeres de Autopilot.
      2. En el cuadro Intervalo de auditoría, ingresa el período en segundos entre dos auditorías consecutivas.
      3. En el cuadro Espacios de nombres exentos, ingresa una lista de espacios de nombres. El controlador de políticas ignora los objetos en estos espacios de nombres.
      4. Para habilitar las restricciones referenciales, selecciona la casilla de verificación Habilitar plantillas de restricciones que hacen referencia a objetos distintos del objeto que se está evaluando en el momento.
      5. En la lista Versión, selecciona la versión del controlador de políticas que deseas usar.
    3. Haz clic en Guardar cambios.
  5. Haz clic en Configurar.

  6. En el cuadro de diálogo Confirmación, haz clic en Confirmar. Si no habilitaste el controlador de políticas antes, haz clic en Confirmar para habilitar la API de anthospolicycontroller.googleapis.com.

  7. Opcional: Sincroniza los clústeres existentes con la configuración predeterminada:

    1. En la lista Clústeres de la flota, selecciona los clústeres que deseas sincronizar.
    2. Haz clic en Sincronizar con la configuración de la flota y, luego, en Confirmar en el diálogo de confirmación que aparece. Esta operación puede tardar unos minutos en completarse.

gcloud

  1. Crea un archivo llamado fleet-default.yaml que contenga la configuración predeterminada del controlador de políticas. El campo installSpec es obligatorio para habilitar los valores predeterminados a nivel de la flota. En este ejemplo, se muestran las opciones que puedes configurar:

    # cat fleet-default.yaml
    
     policyControllerHubConfig:
      installSpec: INSTALL_SPEC_ENABLED 
      # Uncomment to set default deployment-level configurations.
      # deploymentConfigs:
      #   admission:
      #     containerResources:
      #       limits:
      #        cpu: 1000m
      #         memory: 8Gi
      #       requests:
      #         cpu: 500m
      #         memory: 4Gi
      # Uncomment to set policy bundles that you want to install by default.
      # policyContent:
      #   bundles:
      #     cis-k8s-v1.5.1:
      #       exemptedNamespaces:
      #       - "namespace-name"
      # Uncomment to exempt namespaces from admission.
      # exemptableNamespaces:
      # - "namespace-name"
      # Uncomment to enable support for referential constraints
      # referentialRulesEnabled: true
      # Uncomment to disable audit, adjust value to set audit interval
      # auditIntervalSeconds: 0
      # Uncomment to log all denies and dryrun failures
      # logDeniesEnabled: true
      # Uncomment to enable mutation
      # mutationEnabled: true
      # Uncomment to adjust the value to set the constraint violation limit
      # constraintViolationLimit: 20
      # ... other fields ...
    
  2. Aplica la configuración predeterminada a tu flota:

    gcloud alpha container fleet policycontroller enable \
      --fleet-default-member-config=fleet-default.yaml
    
  3. Para verificar que se aplicó la configuración, ejecuta el siguiente comando:

    gcloud alpha container hub policycontroller describe
    
  4. Para quitar la configuración predeterminada a nivel de la flota, ejecuta el siguiente comando:

    gcloud alpha container fleet policycontroller enable \
      --no-fleet-default-member-config
    

Interacciones del controlador de políticas con el Sincronizador de configuración

Si usas el controlador de políticas con el Sincronizador de configuración, debes tener en cuenta las siguientes interacciones con los recursos almacenados en tu fuente de confianza que sincroniza el Sincronizador de configuración:

  • No puedes sincronizar una plantilla de restricciones que también es parte de la biblioteca de plantillas, a menos que la biblioteca de plantillas de restricciones esté inhabilitada.

  • Si deseas sincronizar el recurso Config almacenado en el espacio de nombres gatekeeper-system, solo debes definir el recurso Config en la fuente de confianza. No se debe definir el Namespace de la gatekeeper-system con ella.

Administra la biblioteca de plantillas de restricciones

Para obtener información sobre cómo desinstalar o instalar plantillas de restricciones, sus restricciones asociadas o la biblioteca de plantillas de restricciones, consulta Cómo crear restricciones.

Exime espacios de nombres de la aplicación

Puedes configurar el controlador de políticas para ignorar objetos dentro de un espacio de nombres. Para obtener más información, consulta Excluye espacios de nombres del controlador de políticas.

Muta los recursos

El controlador de políticas también actúa como un webhook de mutación. Para obtener más información, consulta Muta recursos.

Visualiza la versión del controlador de políticas

Para descubrir qué versión del Controlador de políticas de Gatekeeper usa, ejecuta el siguiente comando a fin de ver la etiqueta de imagen:

kubectl get deployments -n gatekeeper-system gatekeeper-controller-manager \
  -o="jsonpath={.spec.template.spec.containers[0].image}"

La etiqueta de Git (o hash) que se usa para compilar Gatekeeper y el número de versión del operador de ConfigManagement se incluyen en la etiqueta de imagen de la siguiente manera:

.../gatekeeper:VERSION_NUMBER-GIT_TAG.gBUILD_NUMBER

Por ejemplo, en la siguiente imagen, sucede lo siguiente:

gcr.io/config-management-release/gatekeeper:anthos1.3.2-480baac.g0
  • anthos1.3.2 es el número de versión.
  • 480baac es la etiqueta de Git.
  • 0 es el número de compilación.

También puedes ver una lista de todas las versiones del controlador de políticas junto con las versiones correspondientes del manifiesto, la instalación y el objeto binario nomos en la matriz de la versión de actualización.

Actualiza el controlador de políticas

Antes de actualizar el controlador de políticas, consulta las notas de la versión para obtener detalles sobre los cambios entre versiones.

Para actualizar Policy Controller, completa los siguientes pasos:

Console

  1. En la consola de Google Cloud, ve a la página Política de GKE Enterprise en la sección Funciones.

    Ir a la política

  2. En la pestaña Configuración, junto al clúster cuya versión quieres actualizar, selecciona Editar configuración.
  3. Expande el menú Edit Policy Controller configuration.
  4. En la lista desplegable Versión, selecciona la versión a la que deseas actualizar.
  5. Haz clic en Guardar cambios.

gcloud

Ejecuta el siguiente comando:

gcloud alpha container fleet policycontroller update \
  --version=VERSION \
  --membership=MEMBERSHIP_NAME

Reemplaza lo siguiente:

  • VERSION: Es la versión a la que deseas actualizar.
  • MEMBERSHIP_NAME: Es el nombre de la membresía que elegiste cuando registraste el clúster. Para encontrar el nombre de la membresía, ejecuta gcloud container fleet memberships list.

Desinstala el controlador de políticas

Sigue estos pasos para desinstalar el Controlador de políticas de tus clústeres.

Console

Para inhabilitar el Controlador de políticas en tus clústeres, completa las siguientes tareas:

  1. En la consola de Google Cloud, ve a la página Política de GKE Enterprise en la sección Funciones.

    Ir a la política

  2. En la pestaña Configuración, en la tabla del clúster, selecciona Editar en la columna Editar configuración.

  3. En el panel del clúster, desplázate hacia abajo y expande el menú Acerca del controlador de políticas.

  4. Selecciona Desinstalar Policy Controller.

  5. Para confirmar la desinstalación, sigue las instrucciones del diálogo de confirmación y selecciona Confirmar.

Cuando se desinstala el controlador de políticas, las columnas de estado muestran No instalada .

Controlador de políticas de gcloud

Para desinstalar Policy Controller, ejecuta el siguiente comando:

gcloud alpha container fleet policycontroller disable \
  --memberships=MEMBERSHIP_NAME

Reemplaza MEMBERSHIP_NAME por el nombre de la membresía del clúster registrado para inhabilitar el controlador de políticas. Puedes especificar varias membresías separadas por comas.

gcloud ConfigManagement

Para desinstalar Policy Controller, sigue estos pasos:

  1. Edita la configuración del operador de ConfigManagement en tu archivo apply-spec.yaml y establece policyController.enabled en false.

  2. Aplica los cambios en el archivo apply-spec.yaml como sigue:

     gcloud beta container fleet config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML \
         --project=PROJECT_ID
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: Agrega el clúster registrado al que deseas aplicar esta configuración.
    • CONFIG_YAML: Agrega la ruta de acceso a tu archivo apply-spec.yaml.
    • PROJECT_ID: Agrega ID de tu proyecto.

Quita el operador ConfigManagement

Si instalaste el controlador de políticas a través del objeto ConfigManagement, también debes quitar el operador ConfigManagement de tus clústeres.

Para quitar el operador ConfigManagement, ejecuta los siguientes comandos:

  1. Borra el objeto ConfigManagement del clúster:

    kubectl delete configmanagement --all
    

    Después de ejecutar este comando, sucede lo siguiente:

    • Todos los ClusterRoles y ClusterRoleBindings que creó el operador de ConfigManagement se borran del clúster.
    • Se borrará cualquier configuración del controlador de admisión que haya instalado el operador de ConfigManagement.
    • Se borrará el contenido del espacio de nombres config-management-system, a excepción del secreto git-creds, y, en el caso de las versiones del controlador de políticas, del Sincronizador de configuración y del controlador de configuración a partir de la versión 1.9.0, la Deployment de config-management-operator y el Pod config-management-operator. El operador de ConfigManagement no puede funcionar sin el espacio de nombres config-management-system. Cualquier CustomResourceDefinitions (CRD) que el controlador del operador de ConfigManagement crea o modifica se quita de los clústeres en los que se crearon o modificaron. La CRD necesaria para ejecutar el operador ConfigManagement todavía existe porque, desde el punto de vista de Kubernetes, lo agregó el usuario que instaló el operador ConfigManagement. En el siguiente paso, se explica cómo quitar estos componentes.
  2. Si necesitas retener el Secret git-creds, hazlo ahora:

    kubectl -n config-management-system get secret git-creds -o yaml
    
  3. Borra el espacio de nombres config-management-system:

    kubectl delete ns config-management-system
    
  4. Borra el espacio de nombres config-management-monitoring:

    kubectl delete ns config-management-monitoring
    
  5. Borra la CustomResourceDefinition de ConfigManagement:

    kubectl delete crd configmanagements.configmanagement.gke.io
    

RBAC y permisos del controlador de políticas

El controlador de políticas incluye cargas de trabajo con muchos privilegios. Los permisos para estas cargas de trabajo se analizan en la documentación de operaciones Open Policy Agent Gatekeeper.

Solicitudes de recursos del controlador de políticas

En la siguiente tabla, se enumeran los requisitos de los recursos de Kubernetes para cada versión compatible. Las solicitudes de recursos para el operador de ConfigManagement solo se aplican si instalaste el controlador de políticas a través del objeto ConfigManagement.

1.16

Componente CPU Memoria
Operador de ConfigManagement 100 m 100 mi
Policy Controller 100 m 256 mi

1.15

Componente CPU Memoria
Operador de ConfigManagement 100 m 100 mi
Policy Controller 100 m 256 mi

1.14

Componente CPU Memoria
Operador de ConfigManagement 100 m 100 mi
Policy Controller 100 m 256 mi

¿Qué sigue?