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.
El controlador de políticas está disponible si usas GKE Enterprise. Para obtener más información, consulta Precios. Puedes crear un informe para probar el controlador de políticas antes de instalarlo sin costo.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Instala e inicializa Google Cloud CLI, que proporciona los comandos
gcloud
,gsutil
,kubectl
ynomos
que se usan en estas instrucciones. Si ya instalaste gcloud CLI, ejecutagcloud components update
para obtener la versión más reciente. Si usas Cloud Shell, Google Cloud CLI está preinstalada. - Asegúrate de que Open Policy Agent Gatekeeper de código abierto no esté instalado en el clúster. Si es así, desinstala Gatekeeper antes de instalar el controlador de políticas.
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.
Otorga las funciones de IAM necesarias al usuario que registra el clúster.
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.
Si usas clústeres conectados a GKE, asegúrate de que tu clúster de AKS no tenga el complemento de Azure Policy y evita etiquetar espacios de nombres con la clave
control-plane
.Si usas GKE en VMware o Google Distributed Cloud Virtual para 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
Sigue estos pasos para configurar el Sincronizador de configuración, el Controlador de políticas y el Controlador de configuración para instalar el controlador de admisión dinámico del controlador de políticas en el clúster. Cuando instalas el Sincronizador de configuración con la consola de Google Cloud o Google Cloud CLI, no puedes usar los comandos de kubectl
para modificar tu configuración más tarde.
A partir de la versión 1.16.0 de Config Management, si usas Google Cloud CLI, puedes instalar y administrar el controlador de políticas directamente (recomendado) o a través del objeto ConfigManagement.
Consola
Para instalar el controlador de políticas en Google Cloud Console, completa los siguientes pasos:
En la consola de Google Cloud, ve a la página Política de GKE Enterprise en la sección Funciones.
Selecciona add Instalar Policy Controller.
En el panel Policy Controller Installation, selecciona una de las siguientes opciones de instalación:
Para instalar Policy Controller en todos los clústeres de una flota, haz lo siguiente:
Mantén seleccionada la opción Instalar en tu flota.
Si no tienes una flota en tu proyecto, puedes crearla en el siguiente paso.
Si aún no tienes una flota, elige un nombre para ella.
Selecciona Activar el controlador de políticas.
Para instalar el controlador de políticas en clústeres individuales, sigue estos pasos:
Selecciona Instalar en clústeres individuales.
En la tabla Clústeres disponibles, selecciona los clústeres en los que deseas instalar el controlador de políticas.
Selecciona Activar el controlador de políticas.
Se te redireccionará a la pestaña Configuración del controlador de políticas. Cuando el controlador de políticas está instalado y configurado en tus clústeres, las columnas de estado muestran Instalado check_circle. Esto puede tardar varios minutos.
Controlador de políticas de gcloud
Ejecuta el siguiente comando para habilitar el controlador de políticas:
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
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 deenabled
entrue
. 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 usarPROJECT_ID
: El ID de tu proyectoCONFIG_YAML_PATH
: La ruta de acceso al archivoapply-spec.yaml
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 archivoapply-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.
Consola
Completa los siguientes pasos:
En la consola de Google Cloud, ve a la página Política de GKE Enterprise en la sección Funciones.
En la pestaña Configuración, en la tabla del clúster, verifica la columna Estado del controlador de políticas. Una instalación exitosa tiene el estado Instalada check_circle.
Controlador de políticas de gcloud
Ejecuta el siguiente comando:
gcloud alpha container fleet policycontroller describe --memberships=MEMBERSHIP_NAME
Si la instalación se realiza 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.
Consola
Completa los siguientes pasos:
En la consola de Google Cloud, ve a la página Política de GKE Enterprise en la sección Funciones.
En la pestaña Configuración, en la tabla de clústeres, selecciona la cantidad que aparece en la columna Paquetes instalados. En el panel Estado del contenido de la política (Policy content status), una instalación correcta de la biblioteca de plantillas tendrá el estado Installed check_circle.
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
Puedes habilitar Policy Controller como una configuración predeterminada de la flota. Esto significa que cada clúster nuevo de GKE en Google Cloud que se registre 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.
Crea un archivo llamado
fleet-default.yaml
que contenga la configuración predeterminada del controlador de políticas. El campoinstallSpec
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 ...
Aplica la configuración predeterminada a tu flota:
gcloud alpha container fleet policycontroller enable \ --fleet-default-member-config=fleet-default.yaml
Para verificar que se aplicó la configuración, ejecuta el siguiente comando:
gcloud alpha container hub policycontroller describe
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, Controlador de políticas y Controlador de configuración
El Sincronizador de configuración, el controlador de políticas y el controlador de configuración administran los recursos esenciales para ejecutar el controlador de políticas. Para evitar conflictos entre el Sincronizador de configuración, el controlador de políticas, el controlador de configuración y el controlador de políticas, ten en cuenta lo que se coloca en el repositorio del Sincronizador de configuración.
Cuando uses el Controlador de políticas, ten en cuenta los siguientes puntos:
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 de configuración almacenado en el espacio de nombres
gatekeeper-system
, el espacio de nombres debe no estar definido en el repositorio o coincidir con la configuración que instalarán el Sincronizador de configuración, el controlador de políticas y el controlador de configuración.Si el espacio de nombres
gatekeeper-system
se quita del repositorio de la fuente de información, es posible que el Sincronizador de configuración, el controlador de políticas y el controlador de configuración no puedan recuperarse. Si quieres recuperarlo, borra la configuración de webhook de validación para el Controlador de políticas.
Administra la biblioteca de plantillas de restricciones
Si quieres obtener información para desinstalar o reinstalar plantillas de restricciones, sus restricciones asociadas o la biblioteca de plantillas de restricciones, consulta Crea 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 Sincronizador de configuración, el controlador de políticas y el controlador de configuración se incluyen en la etiqueta de la 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 Sincronizador de configuración, Controlador de políticas y Controlador de configuración junto con sus versiones binarias de nomos
, de manifiesto y de instalación correspondientes en la Matriz de versiones de actualización.
Actualiza el controlador de políticas
Antes de actualizar Policy Controller, consulta las notas de la versión para obtener detalles sobre los cambios entre las versiones.
Para actualizar Policy Controller, completa los siguientes pasos:
Consola
-
En la consola de Google Cloud:
Si usas Google Kubernetes Engine, ve a la página Política de GKE en la sección Configuración y política.
Si usas GKE Enterprise, ve a la página Política de GKE Enterprise en la sección Configuración y política.
- En la pestaña Settings, junto al clúster cuya versión quieres actualizar, selecciona edit Edit configuration.
- Expande el menú Editar configuración del controlador de políticas.
- En la lista desplegable Versión, selecciona la versión a la que deseas actualizar.
- Haga 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, ejecutagcloud container fleet memberships list
.
Desinstala el controlador de políticas
Sigue estos pasos para desinstalar el Controlador de políticas de tus clústeres.
Consola
Para inhabilitar el Controlador de políticas en tus clústeres, completa las siguientes tareas:
En la consola de Google Cloud, ve a la página Política de GKE Enterprise en la sección Funciones.
En la pestaña Configuración, en la tabla de clústeres, selecciona Editar edit en la columna Editar configuración.
En el panel del clúster, desplázate hacia abajo y expande el menú Acerca del controlador de políticas.
Selecciona Desinstalar Policy Controller.
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 do_not_disturb_on.
Controlador de políticas de gcloud
Para desinstalar el controlador de políticas, 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 el Controlador de políticas, sigue estos pasos:
Edita la configuración del Sincronizador de configuración, el controlador de políticas y el controlador de configuración en el archivo
apply-spec.yaml
y establecepolicyController.enabled
enfalse
.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.
Después del Sincronizador de configuración, el controlador de políticas y el controlador de configuración quitan el finalizador policycontroller.configmanagement.gke.io
y se completa la desinstalación.
Quita el operador de Config Management
Si instalaste el controlador de políticas a través del objeto ConfigManagement
, también debes quitar el operador de Config Management de tus clústeres.
Para quitar el operador de Config Management, ejecuta los siguientes comandos:
Borra el objeto ConfigManagement del clúster:
kubectl delete configmanagement --all
Después de ejecutar este comando, sucede lo siguiente:
- Se borrarán del clúster todos los ClusterRoles y ClusterRoleBindings que creó Config Management.
- Se borrarán todos los parámetros de configuración del controlador de admisión que instaló Config Management.
- Se borra el contenido del espacio de nombres
config-management-system
, a excepción del secretogit-creds
, y en las versiones del Sincronizador de configuración, el controlador de políticas y el controlador de configuración a partir de la versión 1.9.0, la Deployment deconfig-management-operator
y el pod deconfig-management-operator
. Config Management no puede funcionar sin el espacio de nombresconfig-management-system
. Cualquier CustomResourceDefinitions (CRD) creada o modificada por el controlador de Config Management se quita de los clústeres en los que se crearon o modificaron. La CRD necesaria para ejecutar Config Management aún existe porque, desde el punto de vista de Kubernetes, la agregó el usuario que instaló Config Management. En el siguiente paso, se explica cómo quitar estos componentes.
Si necesitas retener el Secret
git-creds
, hazlo ahora:kubectl -n config-management-system get secret git-creds -o yaml
Borra el espacio de nombres
config-management-system
:kubectl delete ns config-management-system
Borra el espacio de nombres
config-management-monitoring
:kubectl delete ns config-management-monitoring
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 los componentes del Sincronizador de configuración, del controlador de políticas y del controlador de configuración para cada versión compatible. Las solicitudes de recursos para el operador de Config Management solo se aplican si instalas el controlador de políticas a través del objeto ConfigManagement
.
1.16
Componente | CPU | Memoria |
---|---|---|
Operador de Config Management | 100 m | 100 Mi |
Policy Controller | 100 m | 256 Mi |
1.15
Componente | CPU | Memoria |
---|---|---|
Operador de Config Management | 100 m | 100 Mi |
Policy Controller | 100 m | 256 Mi |
1.14
Componente | CPU | Memoria |
---|---|---|
Operador de Config Management | 100 m | 100 Mi |
Policy Controller | 100 m | 256 Mi |
¿Qué sigue?
- Obtén más información sobre el Controlador de políticas.
- Obtenga más información sobre los paquetes de Policy Controller.
- Obtén más información sobre cómo crear una restricción.
- Soluciona problemas del controlador de políticas.