Installer Policy Controller

Cette page vous explique comment installer Policy Controller. Policy Controller vérifie, audite et applique la conformité de vos clusters aux règles liées à la sécurité, aux réglementations ou aux règles métier.

Policy Controller est disponible si vous utilisez l'édition Google Kubernetes Engine (GKE) Enterprise. Pour en savoir plus, consultez les tarifs de l'édition Google Kubernetes Engine (GKE) Enterprise. Vous pouvez créer un rapport pour essayer Policy Controller avant de l'installer sans frais.

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  1. Installez et initialisez Google Cloud CLI, qui fournit les commandes gcloud, gsutil, kubectl et nomos utilisées dans les présentes instructions. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant gcloud components update. Si vous utilisez Cloud Shell, la Google Cloud CLI est préinstallée.
  2. Assurez-vous que le gestionnaire d'agent Open Policy Open Policy n'est pas installé sur votre cluster. Si c'est le cas, désinstallez Gatekeeper avant d'installer Policy Controller.
  3. Activez l'API GKE Enterprise.

    Activer l'API GKE Enterprise

  4. Créez un cluster exécutant une version de Kubernetes 1.14.x ou ultérieure, ou assurez-vous d'y avoir accès. Policy Controller peut sembler s'exécuter sur une version de Kubernetes antérieure à 1.14.x, mais le produit ne se comporte pas correctement.

  5. Accorder les rôles IAM requis à l'utilisateur qui enregistre le cluster

  6. Si vous prévoyez d'utiliser Google Cloud CLI pour configurer Policy Controller, enregistrez votre cluster dans un fletet maintenant. Si vous prévoyez d'utiliser Google Cloud Console, enregistrez vos clusters lorsque vous installez Policy Controller.

  7. Si vous utilisez des clusters associés à GKE, assurez-vous que votre cluster AKS ne dispose pas du module complémentaire Azure Policy et évitez d'étiqueter les espaces de noms avec la clé control-plane.

  8. Si vous utilisez GKE sur VMware ou Google Distributed Cloud Virtual pour Bare Metal, veillez à installer Policy Controller sur un cluster d'utilisateur. Policy Controller ne peut pas être installé sur un cluster d'administrateur.

Installer Policy Controller

À partir de la version 1.16.0, si vous utilisez la Google Cloud CLI, vous pouvez installer et gérer Policy Controller directement (recommandé) ou via l'objet ConfigManagement.

Console

Pour installer Policy Controller dans la console Google Cloud, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page Stratégie de GKE Enterprise dans la section Gestion de la stratégie.

    Accéder au règlement

  2. Sélectionnez Installer Policy Controller.

  3. Dans le volet Installation de Policy Controller, sélectionnez l'une des options d'installation suivantes:

    • Pour installer Policy Controller sur tous les clusters d'un parc:

      1. Laissez l'option Installer dans votre parc sélectionnée.

        Si votre projet ne comporte aucun parc, vous pouvez en créer un à l'étape suivante.

      2. Si vous ne possédez pas encore de parc, choisissez un nom pour votre parc.

      3. Sélectionnez Activer Policy Controller.

    • Pour installer Policy Controller sur des clusters individuels, procédez comme suit:

      1. Sélectionnez Installer sur des clusters individuels.

      2. Dans la table Clusters disponibles, sélectionnez les clusters sur lesquels vous souhaitez installer Policy Controller.

      3. Sélectionnez Activer Policy Controller.

Vous êtes redirigé vers l'onglet Paramètres de Policy Controller. Lorsque Policy Controller est installé et configuré sur vos clusters, les colonnes d'état indiquent Installée . Cette opération peut prendre plusieurs minutes.

gcloud Policy Controller

Activez Policy Controller en exécutant la commande suivante:

gcloud container fleet policycontroller enable \
    --memberships=MEMBERSHIP_NAME

Vous pouvez définir des champs supplémentaires pour configurer Policy Controller. Par exemple, vous pouvez demander à Policy Controller d'exempter certains espaces de noms de l'application forcée. Pour obtenir la liste complète des champs que vous pouvez configurer, consultez la documentation de la Google Cloud CLI de Policy Controller ou exécutez gcloud container fleet policycontroller enable --help.

gcloud ConfigManagement

  1. Préparez la configuration en créant un nouveau fichier manifeste apply-spec.yaml ou en utilisant un fichier manifeste existant. L'utilisation d'un fichier manifeste existant vous permet de configurer votre cluster avec les mêmes paramètres que ceux utilisés par un autre cluster.

    Créer un nouveau fichier manifeste

    Pour configurer Policy Controller avec de nouveaux paramètres pour votre cluster, créez un fichier nommé apply-spec.yaml et copiez-y le fichier YAML suivant :

    # 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...
    

    Vous devez ajouter un champ spec.policyController et définir la valeur de enabled sur true. Vous pouvez choisir d'activer d'autres fonctionnalités de Policy Controller. Toutefois, la prise en charge des contraintes référentielles est désactivée par défaut. Avant de l'activer, veillez à vous familiariser avec les mises en garde concernant la cohérence à terme.

    Utiliser un fichier manifeste existant

    Pour configurer votre cluster avec les mêmes paramètres que ceux utilisés par un autre cluster, récupérez les paramètres d'un cluster enregistré :

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

    Remplacez les éléments suivants :

    • MEMBERSHIP_NAME : nom de l'appartenance du cluster enregistré contenant les paramètres Policy Controller que vous souhaitez utiliser.
    • PROJECT_ID : ID de votre projet.
    • CONFIG_YAML_PATH : chemin d'accès au fichier apply-spec.yaml.
  2. Appliquez le fichier apply-spec.yaml :

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

    Remplacez les éléments suivants :

    • MEMBERSHIP_NAME: nom d'appartenance du cluster enregistré qui contient les paramètres Policy Controller que vous souhaitez utiliser.
    • CONFIG_YAML : ajoutez le chemin d'accès à votre fichier apply-spec.yaml.
    • PROJECT_ID : ajoutez l'ID de votre projet.

Le pod est créé, et Policy Controller commence à vérifier et à appliquer les contraintes.

Vérifier l'installation de Policy Controller

Après avoir installé Policy Controller, vous pouvez vérifier qu'il s'est exécuté avec succès.

Console

Procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Stratégie de GKE Enterprise dans la section Gestion de la stratégie.

    Accéder au règlement

  2. Dans l'onglet Paramètres, dans la table des clusters, consultez la colonne État de Policy Controller. Une installation réussie affiche l'état Installée .

gcloud Policy Controller

Exécutez la commande ci-dessous.

gcloud container fleet policycontroller describe --memberships=MEMBERSHIP_NAME

Une installation réussie affiche membershipStates: MEMBERSHIP_NAME: policycontroller: state: ACTIVE.

gcloud ConfigManagement

Exécutez la commande ci-dessous.

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

Remplacez PROJECT_ID par l'ID de votre projet.

Un résultat semblable aux lignes suivantes doit s'afficher :

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

Une installation réussie affiche l'état INSTALLED dans la colonne Policy Controller.

Vérifier l'installation de la bibliothèque de modèles de contraintes

Lorsque vous installez Policy Controller, la bibliothèque de modèles de contraintes est installée par défaut. Cette installation peut prendre plusieurs minutes. Vous pouvez vérifier que la bibliothèque de modèles a bien été exécutée.

Console

Procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Stratégie de GKE Enterprise dans la section Gestion de la stratégie.

    Accéder au règlement

  2. Dans l'onglet Paramètres, dans la table des clusters, sélectionnez le nombre indiqué dans la colonne Bundles installés. Dans le volet État du contenu de la règle, une installation réussie de la bibliothèque de modèles affiche l'état Installée .

gcloud

Exécutez la commande ci-dessous.

kubectl get constrainttemplates

Un résultat semblable aux lignes suivantes doit s'afficher :

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

Lorsqu'un modèle de contrainte individuelle est installé correctement, son champ status.created est true.

Configurer les paramètres par défaut au niveau du parc

Si vous avez activé l'édition Google Kubernetes Engine (GKE) Enterprise, vous pouvez activer et configurer Policy Controller comme valeur par défaut au niveau du parc pour vos clusters. Cela signifie que Policy Controller est activé sur chaque nouveau cluster GKE sur Google Cloud enregistré lors de sa création avec les paramètres que vous spécifiez. Pour en savoir plus sur la configuration par défaut du parc, consultez Gérer les fonctionnalités au niveau du parc.

Pour configurer les valeurs par défaut au niveau du parc pour Policy Controller, procédez comme suit:

Console

  1. Dans la console Google Cloud, accédez à la page Gestionnaire de fonctionnalités.

    Accéder au gestionnaire de fonctionnalités

  2. Dans le volet Stratégie, cliquez sur Configurer.

  3. Vérifiez vos paramètres au niveau du parc. Tous les nouveaux clusters que vous enregistrerez dans le parc hériteront de ces paramètres.

  4. Facultatif : Pour modifier les paramètres par défaut, cliquez sur Personnaliser les paramètres du parc. Dans la boîte de dialogue qui apparaît, procédez comme suit :

    1. Dans la section Ajouter/Modifier des groupes de règles, incluez ou excluez un groupe de règles en cliquant sur le bouton d'activation correspondant.
    2. Dans la section Modifier la configuration de Policy Controller, procédez comme suit :
      1. Pour activer le webhook de mutation, cochez la case Activer le webhook de mutation. Cette fonctionnalité n'est pas compatible avec les clusters Autopilot.
      2. Dans la zone Intervalle d'audit, saisissez la période en secondes entre deux audits consécutifs.
      3. Dans le champ Espaces de noms exemptés, saisissez une liste d'espaces de noms. Policy Controller ignore les objets de ces espaces de noms.
      4. Pour activer les contraintes référentielles, cochez la case Activer les modèles de contrainte qui font référence à des objets autres que celui en cours d'évaluation.
      5. Dans la liste Version, sélectionnez la version de Policy Controller que vous souhaitez utiliser.
    3. Cliquez sur Enregistrer les modifications.
  5. Cliquez sur Configurer.

  6. Dans la boîte de dialogue de confirmation, cliquez sur Confirmer. Si vous n'avez pas encore activé Policy Controller, le fait de cliquer sur Confirmer active l'API anthospolicycontroller.googleapis.com.

  7. Facultatif : Synchronisez les clusters existants avec les paramètres par défaut :

    1. Dans la liste Clusters du parc, sélectionnez les clusters que vous souhaitez synchroniser.
    2. Cliquez sur Synchroniser avec les paramètres du parc, puis sur Confirmer dans la boîte de dialogue de confirmation qui s'affiche. Cette opération peut durer quelques minutes.

gcloud

  1. Créez un fichier nommé fleet-default.yaml contenant les configurations par défaut de Policy Controller. Le champ installSpec est obligatoire pour activer les valeurs par défaut au niveau du parc. Cet exemple présente les options que vous pouvez configurer:

    # 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. Appliquez la configuration par défaut à votre parc:

    gcloud container fleet policycontroller enable \
      --fleet-default-member-config=fleet-default.yaml
    
  3. Pour vérifier que la configuration a été appliquée, exécutez la commande suivante:

    gcloud container fleet policycontroller describe
    
  4. Pour supprimer la configuration par défaut au niveau du parc, exécutez la commande suivante:

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

Interactions Policy Controller avec Config Sync

Si vous utilisez Policy Controller avec Config Sync, vous devez connaître les interactions suivantes avec les ressources stockées dans votre source de référence et synchronisées par Config Sync:

  • Vous ne pouvez pas synchroniser un modèle de contrainte qui fait également partie de la bibliothèque de modèles, sauf si la bibliothèque de modèles de contraintes est désactivée.

  • Si vous souhaitez synchroniser la ressource Config stockée dans l'espace de noms gatekeeper-system, vous ne devez définir la ressource Config que dans la source fiable. Le Namespace gatekeeper-system ne doit pas être défini avec lui.

Gérer la bibliothèque de modèles de contraintes

Pour en savoir plus sur la désinstallation ou l'installation de modèles de contraintes, les contraintes associées ou la bibliothèque de modèles de contraintes, consultez Créer des contraintes.

Exempter des espaces de noms de l'application forcée

Vous pouvez configurer Policy Controller pour ignorer des objets dans un espace de noms. Pour en savoir plus, consultez la page Exclure des espaces de noms de Policy Controller.

Muter des ressources

Policy Controller agit également comme un webhook de mutation. Pour en savoir plus, consultez la section Muter des ressources.

Afficher la version de Policy Controller

Pour connaître la version de Gatekeeper que Policy Controller utilise, affichez le tag d'image en exécutant la commande suivante :

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

Le tag Git (ou le hachage) utilisé pour créer Gatekeeper et le numéro de version de ConfigManagement Operator sont inclus dans le tag d'image comme suit:

.../gatekeeper:VERSION_NUMBER-GIT_TAG.gBUILD_NUMBER

Par exemple, pour l'image suivante :

gcr.io/config-management-release/gatekeeper:anthos1.3.2-480baac.g0
  • anthos1.3.2 est le numéro de version.
  • 480baac est le tag Git.
  • 0 est le numéro de build.

Vous pouvez également afficher la liste de toutes les versions de Policy Controller, ainsi que leur fichier manifeste, leur installation et les versions binaires nomos correspondantes dans la matrice des versions.

Mettre à niveau Policy Controller

Avant de mettre à niveau Policy Controller, consultez les notes de version pour en savoir plus sur les modifications apportées entre les versions.

Pour mettre à niveau Policy Controller, procédez comme suit:

Console

  1. Dans la console Google Cloud, accédez à la page Stratégie de GKE Enterprise dans la section Gestion de la stratégie.

    Accéder au règlement

  2. Dans l'onglet Paramètres, à côté du cluster dont vous souhaitez mettre à niveau la version, sélectionnez Modifier la configuration.
  3. Développez le menu Modifier la configuration de Policy Controller.
  4. Dans la liste déroulante Version, sélectionnez la version vers laquelle vous souhaitez effectuer la mise à niveau.
  5. Cliquez sur Enregistrer les modifications.

gcloud

Exécutez la commande ci-dessous.

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

Remplacez les éléments suivants :

  • VERSION : version vers laquelle vous souhaitez effectuer la mise à jour.
  • MEMBERSHIP_NAME : nom d'appartenance que vous avez choisi lors de l'enregistrement de votre cluster. Vous pouvez trouver le nom de l'abonnement en exécutant gcloud container fleet memberships list.

Désinstaller Policy Controller

Suivez ces étapes pour désinstaller Policy Controller de vos clusters.

Console

Pour désactiver Policy Controller sur vos clusters, effectuez les tâches suivantes :

  1. Dans la console Google Cloud, accédez à la page Stratégie de GKE Enterprise dans la section Gestion de la stratégie.

    Accéder au règlement

  2. Dans l'onglet Paramètres, dans la table des clusters, sélectionnez Modifier dans la colonne Modifier la configuration.
  3. Dans le volet du cluster, faites défiler la page vers le bas et développez le menu À propos de Policy Controller.
  4. Sélectionnez Désinstaller Policy Controller.
  5. Confirmez la désinstallation en suivant les instructions de la boîte de dialogue de confirmation, puis en sélectionnant Confirmer.

Lorsque Policy Controller est désinstallé, les colonnes d'état indiquent Non installé .

gcloud Policy Controller

Pour désinstaller Policy Controller, exécutez la commande suivante:

gcloud container fleet policycontroller disable \
  --memberships=MEMBERSHIP_NAME

Remplacez MEMBERSHIP_NAME par le nom d'appartenance du cluster enregistré sur lequel désactiver Policy Controller. Vous pouvez spécifier plusieurs abonnements séparés par une virgule.

gcloud ConfigManagement

Pour désinstaller Policy Controller, procédez comme suit:

  1. Modifiez la configuration de ConfigManagement Operator dans le fichier apply-spec.yaml et définissez policyController.enabled sur false.

  2. Appliquez les modifications dans le fichier apply-spec.yaml :

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

    Remplacez les éléments suivants :

    • CLUSTER_NAME : ajoutez le cluster enregistré auquel vous souhaitez appliquer cette configuration.
    • CONFIG_YAML : ajoutez le chemin d'accès à votre fichier apply-spec.yaml.
    • PROJECT_ID : ajoutez l'ID de votre projet.

Supprimer l'opérateur ConfigManagement Operator

Si vous avez installé Policy Controller via l'objet ConfigManagement, vous devez également supprimer ConfigManagement Operator de vos clusters.

Pour supprimer l'opérateur ConfigManagement Operator, exécutez les commandes suivantes:

  1. Supprimez l'objet ConfigManagement du cluster :

    kubectl delete configmanagement --all
    

    Une fois cette commande exécutée, voici ce qui se produit :

    • Tous les objets ClusterRole et ClusterRoleBinding créés dans le cluster par ConfigManagement Operator sont supprimés du cluster.
    • Toutes les configurations de contrôleur d'admission installées par ConfigManagement Operator sont supprimées.
    • Le contenu de l'espace de noms config-management-system est supprimé, à l'exception du secret git-creds, et pour les versions de Policy Controller, de Config Sync et de Config Controller à partir de la version 1.9.0, du déploiement config-management-operator et du pod config-management-operator. ConfigManagement Operator ne peut pas fonctionner sans l'espace de noms config-management-system. Tous les objets CustomResourceDefinition (CRD) créés ou modifiés par le contrôleur ConfigManagement Operator sont supprimés des clusters où ils ont été créés ou modifiés. Les CRD requises pour exécuter ConfigManagement Operator existent toujours, car du point de vue de Kubernetes, elles ont été ajoutées par l'utilisateur qui a installé ConfigManagement Operator. La procédure de suppression de ces composants est présentée à l'étape suivante.
  2. Si vous devez conserver le secret git-creds, procédez comme suit dès à présent :

    kubectl -n config-management-system get secret git-creds -o yaml
    
  3. Supprimez l'espace de noms config-management-system :

    kubectl delete ns config-management-system
    
  4. Supprimez l'espace de noms config-management-monitoring :

    kubectl delete ns config-management-monitoring
    
  5. Supprimez l'objet CustomResourceDefinition ConfigManagement :

    kubectl delete crd configmanagements.configmanagement.gke.io
    

RBAC Policy Controller et autorisations

Policy Controller comprend des charges de travail à privilèges élevés. Les autorisations associées à ces charges de travail sont décrites dans la documentation des opérations Open Policy Agent Gatekeeper.

Requêtes de ressources Policy Controller

Le tableau suivant présente les exigences en ressources Kubernetes pour chaque version compatible. Les demandes de ressources pour ConfigManagement Operator ne s'appliquent que si vous avez installé Policy Controller via l'objet ConfigManagement.

1.16

Composant CPU Mémoire
ConfigManagement Operator 100 m 100 Mi
Policy Controller 100 m 256 Mi

1.15

Composant CPU Mémoire
ConfigManagement Operator 100 m 100 Mi
Policy Controller 100 m 256 Mi

1.14

Composant CPU Mémoire
ConfigManagement Operator 100 m 100 Mi
Policy Controller 100 m 256 Mi

Étapes suivantes