|Index|Premiers pas avec SUSE Private Registry
SUSE Private Registry

Premiers pas avec SUSE Private Registry

Publication Date: 2026-05-04

Release notes

SUSE Private Registry is an on-premises container registry. It is designed for SUSE customers who need a container registry that works well with other SUSE services and products.

This document provides a high-level overview of the features, capabilities and limitations of SUSE Private Registry, and highlights important product updates.

1 Release 1.2.0

Security updates:

Component updates:

  • Updates k8s.io/client-go to 0.34.1.

  • Updates aws-sdk-go to 1.55.8.

  • Updates go-ldap to 3.4.11.

  • Updates Go to 1.25.9.

New features and performance:

  • Adds support for the Cosign v3 Bundle signature format.

  • Introduces an option to disable audit log recording to the database during initialization.

  • Enables pprof support and the ability to export the Harbor version via the Prometheus exporter binary.

  • Replaces the existing pull-through cache with a new proxy cache implementation.

  • Improves general performance through code refactoring (for example, by using strings.Builder and strings.CutPrefix).

Key fixes:

  • Implements a security fix to reject bearer tokens issued before project creation.

  • Fixes issues related to OpenID Connect (OIDC) integration for users with a single group.

  • Corrects errors in user and group search functionality.

  • Resolves various user interface (UI) issues, including an unwanted scrollbar in tag retention and issues with the "Copy Pull Button" when tags are undefined.

  • Adds support for both docker-compose v1 and docker-compose v2.

  • Calls the /v2/auth/token application programming interface (API) to get a bearer token for the Docker Hub adapter.

Container image updates:

  • private-registry/harbor-core:1.1.2 ➡ private-registry/1.2/harbor-core:1.2.0

  • private-registry/harbor-exporter:1.1.2 ➡ private-registry/1.2/harbor-exporter:1.2.0

  • private-registry/harbor-jobservice:1.1.2 ➡ private-registry/1.2/harbor-jobservice:1.2.0

  • private-registry/harbor-portal:1.1.2 ➡ private-registry/1.2/harbor-portal:1.2.0

  • private-registry/harbor-registry:1.1.2 ➡ private-registry/1.2/harbor-registry:1.2.0

  • private-registry/harbor-registryctl:1.1.2 ➡ private-registry/1.2/harbor-registryctl:1.2.0

  • private-registry/harbor-trivy-adapter:1.1.2 ➡ private-registry/1.2/harbor-trivy-adapter:1.2.0

Helm chart updates:

  • The chart is the version 1.2.x will be in oci://registry.suse.com/private-registry/1.2/private-registry-helm

  • Makes health probe timeoutSeconds and failureThreshold configurable via values.

  • Fixes extra environment variables for the exporter.

  • Installs PodDisruptionBudget resources when the replica count is greater than one.

Upgrade notes:

  • No breaking changes in this release.

2 Release 1.1.3

Security updates:

Key fixes:

  • Fixed SessionRegenerate arguments/lifetime and prevented background polling from artificially renewing session TTLs.

  • Fixes scanner application programming interface (API) issues and resolves an issue that occurs when editing distribution instances without credentials.

  • Calls the /v2/auth/token API to get a bearer token for the Docker Hub adapter.

  • Bumped Go to version 1.25.9 and upgraded the OpenTelemetry SDK and go-jose packages.

Container image updates:

  • private-registry/harbor-core:1.1.2 ➡ private-registry/harbor-core:1.1.3

  • private-registry/harbor-exporter:1.1.2 ➡ private-registry/harbor-exporter:1.1.3

  • private-registry/harbor-jobservice:1.1.2 ➡ private-registry/harbor-jobservice:1.1.3

  • private-registry/harbor-portal:1.1.2 ➡ private-registry/harbor-portal:1.1.3

  • private-registry/harbor-registry:1.1.2 ➡ private-registry/harbor-registry:1.1.3

  • private-registry/harbor-registryctl:1.1.2 ➡ private-registry/harbor-registryctl:1.1.3

  • private-registry/harbor-trivy-adapter:1.1.2 ➡ private-registry/harbor-trivy-adapter:1.1.3

  • suse/postgres:17.9 ➡ suse/postgres:17.10

  • suse/nginx:1.21 ➡ suse/nginx:1.27

Upgrade notes:

  • No breaking changes in this release.

3 Release 1.1.2

Security Updates:

  • CVE-2026-4404: Use of hard coded credentials allows attackers to use the default password and gain access to the Web UI, if not set during installation or upgrade.

Now if the HARBOR_ADMIN_PASSWORD is not set during the installation or upgrade, it will be generated randomly and stored in a Kubernetes secret. This change mitigates the risk of using a default password and enhances the security of the installation.

Upgrade Notes:

No breaking changes in this release.

4 Release 1.1.1

Security Updates:

Container Image Updates:

  • private-registry/harbor-core:1.1.0 ➡ private-registry/harbor-core:1.1.1

  • private-registry/harbor-exporter:1.1.0 ➡ private-registry/harbor-exporter:1.1.1

  • private-registry/harbor-jobservice:1.1.0 ➡ private-registry/harbor-jobservice:1.1.1

  • private-registry/harbor-portal:1.1.0 ➡ private-registry/harbor-portal:1.1.1

  • private-registry/harbor-registry:1.1.0 ➡ private-registry/harbor-registry:1.1.1

  • private-registry/harbor-registryctl:1.1.0 ➡ private-registry/harbor-registryctl:1.1.1

  • private-registry/harbor-trivy-adapter:1.1.0 ➡ private-registry/harbor-trivy-adapter:1.1.1

Upgrade Notes:

No breaking changes in this release.

5 Release 1.1.0

Security Updates:

Container Image Updates:

  • Update the base image bci/bci-micro:15.6 to bci/bci-micro:15.7

  • Updated images:

    • private-registry/harbor-valkey:8.0.6 ➡ suse/valkey:8.0.6

    • private-registry/harbor-db:2.13.2 (postgres 17) ➡ suse/postgres:17.6

    • private-registry/harbor-nginx:1.21 ➡ suse/nginx:1.21

Upgrade Notes:

Images are now tagged with the SUSE Private Registry version instead of the corresponding Harbor version. The change in image versioning scheme is handled by Helm when upgrading the installation using the chart:

  • private-registry/harbor-core:1.1.0

  • private-registry/harbor-exporter:1.1.0

  • private-registry/harbor-jobservice:1.1.0

  • private-registry/harbor-portal:1.1.0

  • private-registry/harbor-registry:1.1.0

  • private-registry/harbor-registryctl:1.1.0

  • private-registry/harbor-registryctl:1.1.0

No breaking changes in this release.

6 Release 1.0.1

Security updates:

  • CVE-2025-55198: Helm may panic due to incorrect YAML content.

  • CVE-2025-55199: Helm charts with specific JSON schema values can cause memory exhaustion.

  • CVE-2025-54410: Moby versions before 25.0.13, when firewall reloads, Docker fails to re-create iptables rules isolating bridge networks. This allows any container to access all ports on any other container across different bridge networks on the same host and breaks network segmentation in multi-tenant environments (only --internal networks remain protected).

  • CVE-2025-29923: go-redis allows potential out of order responses when CLIENT SETINFO times out during connection establishment.

  • CVE-2025-54388: Moby versions 28.2.0–28.3.2 fails to re-create iptables rules after a firewall reloads. This exposes containers with localhost-published ports (e.g., 127.0.0.1:8080) to remote access via the Docker bridge, while unpublished ports remain protected; fixed in version 28.3.3.

  • GHSA-2464-8j7c-4cjm: go-viper’s map structure may leak sensitive information in logs when processing malformed data.

  • CVE-2025-8959: HashiCorp go-getter vulnerable to arbitrary read through a symlink attack.

  • CVE-2025-58058: github.com/ulikunitz/xz leaks memory when decoding a corrupted multiple LZMA archives.

  • CVE-2025-53547: Helm chart dependency updating with malicious Chart.yaml content and symlink can lead to code execution.

Bugs fixed:

  • Trivy: the correct version is shown when calling trivy version.

Container image updates:

  • Valkey updated from 8.0.2 ➡ 8.0.6.

Upgrade notes:

  • No breaking changes in this release.

7 Release 1.0

Key features:

  • SUSE Private Registry is based on Harbor 2.13.2

    • Integration with Model Spec for first-class handling of AI models

    • Enhanced audit logging

  • Predictable release cycle aligned with SUSE Rancher Prime. SUSE Private Registry will be updated every 4 months

  • Each release is supported by SUSE for 18 months from the date of release

    • 6 months of security and bug fix maintenance, followed by

    • 12 months of security-only maintenance

  • Can be used to mirror SUSE Collection d’applications

  • Supports SUSE Sécurité as an external scanner

SUSE Private Registry includes all the features of Harbor:

  • On-premises private container image and OCI artifact registry

  • Web interface for administration

  • Role-based Access Control

  • Fine-grained project configuration for image and artifact storage

  • Mirroring and pull-through caching of upstream registries' artifacts

  • Image retention and garbage collection controls

  • Scanning images for security vulnerabilities with the Trivy scanner

  • Generate SBOMs for stored images

  • Content trust with Cosign (Notary is not included)

1 Introduction

1.1 Qu’est-ce que SUSE Private Registry ?

SUSE Private Registry (Registre privé) est un registre de conteneurs sur site. Registre privé est conçu pour les clients SUSE ayant besoin d’un registre de conteneurs qui fonctionne bien avec d’autres services et produits SUSE.

1.2 Quels sont les avantages de SUSE Private Registry?

Registre privé est basé sur le projet Harbor et inclut toutes ses fonctionnalités principales ainsi que des avantages supplémentaires. Par exemple :

  • Registre de conteneurs sur site. Registre privé est un registre de conteneurs hébergé localement avec accès aux services de registre SUSE en ligne.

  • Sécurité. Registre privé offre des considérations de sécurité pour les environnements conteneurisés. Il inclut l’authentification, l’autorisation et l’analyse des vulnérabilités.

  • Flexibilité de déploiement. Vous pouvez installer Registre privé sur un environnement Kubernetes tel que SUSE Rancher Prime : RKE2. Vous pouvez également déployer Registre privé avec une configuration de haute disponibilité.

  • Gestion des utilisateurs. Registre privé fournit un mécanisme d’authentification et d’autorisation avec un contrôle d’accès en fonction du rôle (RBAC).

  • Interface utilisateur. En plus d’une interface de ligne de commande, vous pouvez administrer Registre privé via une interface utilisateur Web.

1.3 Comment fonctionne SUSE Private Registry ?

Registre privé est livré sous forme de conteneurs Open Container Initiative (OCI) et est prévu pour être déployé sur un cluster Kubernetes. Registre privé se compose des conteneurs suivants:

  • harbor-core: le composant principal du registre Harbor, responsable de la gestion des fonctionnalités de base telles que la gestion des projets, des dépôts et des interactions avec les utilisateurs.

  • harbor-db: le conteneur de base de données qui stocke toutes les métadonnées liées aux images, aux utilisateurs et aux configurations pour le registre Harbor.

  • harbor-jobservice: un service qui gère les tâches en arrière-plan, telles que la réplication d’images et les tâches planifiées, garantissant un traitement efficace des opérations au sein du registre.

  • harbor-nginx: le proxy inverse et l’équilibreur de charge qui dirige les requêtes entrantes vers les services Harbor appropriés, fournissant un point d’entrée unique pour les utilisateurs.

  • harbor-portal: l’interface utilisateur Web qui permet aux utilisateurs d’interagir avec le registre Harbor, de gérer les images et de configurer les paramètres via une interface graphique.

  • harbor-registry: le conteneur qui sert de véritable back-end de stockage d’images, gérant le stockage et la récupération des images de conteneurs.

  • harbor-registryctl: un outil de ligne de commande pour gérer le registre Harbor, permettant aux utilisateurs d’effectuer des tâches administratives et des configurations directement depuis le terminal.

  • harbor-trivy-adapter: un conteneur qui intègre le scanner de vulnérabilités Trivy avec Harbor, permettant un scan de sécurité automatisé des images de conteneurs pour détecter les vulnérabilités.

  • harbor-exporter: le conteneur qui exporte les métriques Harbor dans un format pouvant être collecté par Prometheus pour la surveillance et l’observabilité.

  • harbor-valkey: un magasin de clés-valeurs en mémoire.

Après le déploiement, vous pouvez vous connecter via l’interface utilisateur Web. Après une authentification et une autorisation réussies, vous pouvez configurer plusieurs aspects du produit, par exemple:

  • Configurer les paramètres globaux, par exemple pour définir le registre en mode lecture seule ou limiter les autorisations de création de projets.

  • Sélectionnez une méthode d'authentification.

  • Ajoutez des utilisateurs lorsque vous êtes en mode d’authentification par base de données et attribuez le rôle d’administrateur du système à d’autres utilisateurs.

  • Appliquez des quotas de ressources aux projets.

  • Configurez la réplication des images entre les instances Registre privé.

1.4 informations supplémentaires

Référez-vous aux sources suivantes pour obtenir plus de détails:

2 Configuration requise

Cette section décrit les prérequis minimaux de la plateforme et la taille de production recommandée pour SUSE Private Registry.

2.1 Conditions préalables

  • Une version 1.20 ou supérieure Kubernetesdu cluster

  • Une Helmversion 3.2.0 ou supérieure de

  • Support du provisionneur de volume persistant (PV) dans votre infrastructure

  • Un abonnement actif pour SUSE Private Registry

2.2 Recommandations matérielles et de dimensionnement :

Utilisez ces valeurs comme point de départ pour la production. Ajustez en fonction de la politique de rétention, du renouvellement d’images, de la concurrence des analyses et du trafic de réplication. ==== Base de référence du cluster

ÉtenduePoint de départ recommandé

Nœuds de travail

Minimum de 3 nœuds de travail

Type de nœud :

Minimum de 4 vCPU et 16 GiB de RAM par nœud

Type de nœud préféré :

8 vCPU et 32 GiB de RAM par nœud pour une plus grande concurrence d’analyse et de poussée

Ces recommandations sont conformes aux directives de Rancher pour RKE2 Kubernetes. Pour plus de détails, voir exigences d’installation de RKE2 Kubernetes.

2.2.1 Base de référence de stockage persistant :

ComposantTaille par défaut du graphique :Taille de départ recommandée :

Données du registre :

5 Gi

500 Gi à 1 Ti

Cache et base de données Trivy :

5 Gi

20 Gi à 50 Gi

Journaux de Jobservice :

1 Gi

10 Gi

PostgreSQL interne (si utilisé) :

1 Gi

20 Gi minimum

Valkey interne (si utilisé) :

1 Gi

20 Gi minimum

Les valeurs par défaut du graphique sont orientées vers l’installation et ne doivent pas être utilisées comme valeurs de capacité de production à long terme.

3 Installation à l’aide de l’interface utilisateur Rancher

Pour installer SUSE Private Registry en utilisant l’interface utilisateur Rancher, vous devez répondre aux exigences suivantes et suivre les étapes ci-dessous.

3.1 Quelles exigences dois-je respecter?

  • Un environnement avec un ou plusieurs clusters Kubernetes en cours d’exécution et supportés, et Rancher déployé. Reportez-vous aux Rancherexigences d’installation pour plus de détails.

  • Identifiants SUSE Registre pour un compte avec un abonnement SUSE Private Registry (un nom d’utilisateur et un mot de passe/token). Reportez-vous à Obtenir les Kubernetes secrets de SCC pour plus de détails.

3.2 Quelles sont les étapes pour installer SUSE Private Registry en utilisant l’interface utilisateur Rancher?

ÉTAPE 1: Indiquez à Rancher où se trouve le dépôt SUSE Private Registry pour rechercher le chart d’installation.
  1. Connectez-vous à Rancher.

  2. Cliquez sur le menu trois lignes (☰) dans le coin supérieur gauche, sélectionnez Gestion des clusters, et cliquez sur le nom de votre cluster, généralement local.

  3. Dans le menu de gauche, sélectionnez Applis › Dépôts.

  4. Cliquez sur le bouton Créer en haut à droite et complétez le formulaire qui s’ouvre:

    1. Cible: Sélectionnez Dépôt OCI.

    2. Nom: Entrez un nom pour le dépôt, tel que SUSE Private Registry.

    3. Description: Optionnellement, ajoutez une description du dépôt.

    4. URL d’hôte du dépôt OCI: Enter `oci://registry.suse.com/private-registry/private-registry-helm`.

    5. Authentification: Changez en Create an HTTP Basic Auth Secret et entrez le nom d’utilisateur et le mot de passe des identifiants du registre.

  5. Confirmez avec Créer.

Une capture d’écran montrant comment ajouter un dépôt SUSE Private Registry à Rancher
Figure 3.1: Ajout d’un dépôt SUSE Private Registry
ÉTAPE 2: Créez un secret pour accéder aux images dans le `registry.suse.com`.
  1. Cliquez sur le menu trois lignes (☰) dans le coin supérieur gauche et sélectionnez Gestion des clusters.

  2. Basculez vers le cluster auquel vous souhaitez ajouter le secret et cliquez sur Explorer.

  3. Pour naviguer vers la gestion des secrets, sélectionnez Stockage › Secrets et cliquez sur Créer en haut à droite.

  4. Sélectionnez le secret HTTP Basic Auth puis l’espace de noms private-registry.

  5. Entrez suse-registry comme nom pour le secret.

  6. Remplissez les champs username et password avec les identifiants SUSE obtenus dans Section 3.1, “Quelles exigences dois-je respecter?”.

Une capture d’écran montrant comment ajouter des secrets SUSE Private Registry à Rancher
Figure 3.2: Ajout de secrets SUSE Private Registry
ÉTAPE 3: Installez le Helm chart.
  1. Dans le menu principal à gauche, sélectionnez Applis › Charts.

  2. Entrez le nom du dépôt SUSE Private Registry assigné dans la zone de recherche. Par exemple : SUSE Private Registry. Si cela n’apparaît pas dans la liste, cliquez sur Actualiser tous les dépôts.

  3. Cliquez sur le chart et consultez le README.md.

  4. Vous pouvez personnaliser les valeurs d’installation si vous le souhaitez. Cliquez soit sur les sections à gauche du panneau Edit Options pour voir toutes les valeurs que vous pouvez configurer, soit modifiez les valeurs directement dans le fichier YAML du chart.

  5. Dans le coin supérieur droit, cliquez sur Installer cette version.

Une capture d’écran montrant l’écran d’installation de SUSE Private Registry dans Rancher
Figure 3.3: Installation SUSE Private Registry

4 Installation à l’aide de la ligne de commande

Les procédures suivantes décrivent comment déployer SUSE Private Registry (Registre privé) sur un cluster Kubernetes.

4.1 Obtention des secrets Kubernetes depuis le SUSE Centre Client

Pour télécharger et installer les images Registre privé depuis SUSE Registre, vous avez besoin d’un secret Kubernetes avec des identifiants de miroir SUSE Centre Client (SCC). Pour obtenir les identifiants de SCC, suivez ces étapes:

  1. Visitez SUSE Centre Client à https://scc.suse.com et connectez-vous.

  2. Sélectionnez l’organisation avec un abonnement Registre privé actif dans la barre latérale gauche.

  3. Sélectionnez Proxies dans le menu supérieur. Les identifiants sont affichés dans le coin supérieur droit.

  4. Pour voir le mot de passe, cliquez sur l’icône 'œil'.

  5. Créez un fichier password.txt contenant le mot de passe obtenu.

    >head -1 ./password.txt | helm registry login registry.suse.com \
      --username <PRIVATE_REGISTRY_USERNAME> --password-stdin
  6. Créez un espace de noms pour SUSE Registre.

    >kubectl create namespace <PRIVATE_REGISTRY_NAMESPACE>
  7. Stockez les identifiants de miroir récupérés depuis SCC en tant que secrets Kubernetes en exécutant la commande suivante:

    >kubectl create secret docker-registry suse-registry \
      --namespace <PRIVATE_REGISTRY_NAMESPACE> \
      --docker-server=registry.suse.com \
      --docker-username=<PRIVATE_REGISTRY_USERNAME> \
      --docker-password=$(head -1 ./password.txt)
  8. Optionnellement, pour utiliser une communication chiffrée TLS, créez un secret TLS à partir de vos fichiers de clé privée et de certificat.

    >kubectl create secret tls suse-registry-tls \
      --namespace <PRIVATE_REGISTRY_NAMESPACE> \
      --cert=<CERTIFICATE>.pem \
      --key=<PRIVATE_KEY>.pem

4.2 Installation et exécution de Registre privé à l’aide de Helm

La procédure suivante décrit comment installer Registre privé à l’aide de Helm. Remplacez <RELEASE_NAME> par votre nom de version personnalisé pour le déploiement du graphique Helm.

  1. Connectez-vous à SUSE Registre en utilisant les identifiants de miroir SCC obtenus.

    >head -1 ./password.txt | helm registry login registry.suse.com \
      --username <SUSE_REGISTRY_USERNAME> --password-stdin
  2. Installez la dernière version du graphique Registre privé Helm.

    >helm install <RELEASE_NAME> \
      oci://registry.suse.com/private-registry/private-registry-helm \
      --namespace <PRIVATE_REGISTRY_NAMESPACE>

    Lorsque vous installez le graphique Registre privé Helm, il affiche la sortie suivante:

    NOTES:
    CHART VERSION: 1.1.6
    It may take several minutes for the SUSE Private Registry  1.1.2 deployment to complete.
    
    Once the deployment has finished, you will be able to open the SUSE Private Registry portal at https://core.harbor.domain
    
    To get the admin credentials, copy and run the following commands:
    
    echo Username: "admin"
    echo Password: $(kubectl get secret --namespace <PRIVATE_REGISTRY_NAMESPACE>-harbor-core <RELEASE_NAME> -o jsonpath="{.data.HARBOR_ADMIN_PASSWORD}" | base64 -d)

    À partir de la version 4 de Helm, vous pouvez utiliser un digest pour spécifier le graphique à installer:

    >helm install <RELEASE_NAME> \
      oci://registry.suse.com/private-registry/private-registry-helm@sha256:<DIAGEST_OF_CHART_TO_INSTALL> \
      --namespace <PRIVATE_REGISTRY_NAMESPACE>
Tip
Tip
  • Pour obtenir le mot de passe de l’utilisateur administrateur, vous pouvez également exécuter la commande suivante:

    >kubectl get secret \
      --namespace <PRIVATE_REGISTRY_NAMESPACE> \
      --harbor-core <RELEASE_NAME> \
      -o jsonpath="{.data.HARBOR_ADMIN_PASSWORD}" | base64 -d; echo
  • Il est possible d’utiliser le watcher kstatus avec l’option '--wait=watcher' pour s’assurer que tous les objets sont prêts à terminer l’installation. L’utilisation du watcher peut prolonger la durée de la commande.

Pour remplacer l’installation par défaut par des valeurs personnalisées du fichier suse_registry_override.yaml, référez-vous à Appendix A, Surcharge du graphique SUSE Private Registry Helm.

La commande commence à déployer plusieurs conteneurs liés et peut prendre plusieurs minutes pour se terminer. Elle imprime également un message avec l’URL du portail Web Registre privé et des commandes pour obtenir les identifiants de l’administrateur.

4.3 Mise à niveau de Registre privé

Pour mettre à niveau la version du graphique Helm vers une version plus récente spécifique, exécutez la commande suivante:

>helm upgrade <RELEASE_NAME> \
  oci://registry.suse.com/private-registry/private-registry-helm \
  --version <NEW_VERSION_OF_HELM_CHART> \
  --namespace <PRIVATE_REGISTRY_NAMESPACE> \

Le digest n’est possible qu’avec Helm la version 4 de.

>helm update <RELEASE_NAME> \
  oci://registry.suse.com/private-registry/private-registry-helm@sha256:<DIAGEST_OF_CHART_TO_INSTALL> \
  --namespace <PRIVATE_REGISTRY_NAMESPACE> \

5 Haute disponibilité configuration

Vous pouvez utiliser Helm pour déployer le hautement disponible (HA) Registre privé sur un cluster Kubernetes. Le Configuration HA garantit que les utilisateurs ne subissent pas d’interruptions de service si l’un des nœuds sur lequel Registre privé fonctionne devient indisponible.

5.1 Architecture du Configuration HA

La plupart des composants du Registre privé sont désormais sans état. Par conséquent, nous pouvons les mettre à l’échelle en augmentant le nombre de réplicas de pods, garantissant qu’ils s’exécutent sur plusieurs nœuds de travail. Les services Kubernetes assurent la connectivité entre les pods.

Pour le stockage, les utilisateurs doivent fournir un PostgreSQL HA et un cluster Valkey ou Redis pour les données de l’application, ainsi que des PVC ou un stockage d’objets pour stocker des images et des graphiques.

image::private-registry-ha.png[Registre privé Configuration HA, width=100%]. Registre privé Configuration HA Un cluster Kubernetes avec Ingress dans Configuration HA utilisant HA PostgreSQL et HA Valkey.

5.2 Conditions préalables

  • Un Kubernetes cluster version 1.20 ou supérieure

  • Helm version 3.2.0 ou supérieure

  • Contrôleur HA Ingress (Registre privé ne gère pas le point de terminaison externe)

  • HA PostgreSQL 9.6+ (Registre privé ne gère pas le déploiement de la base de données HA)

  • HA Valkey ou Redis (Registre privé ne gère pas le déploiement de HA Valkey ou Redis)

  • Requête de volume persistant (PVC) qui peut être partagée entre les nœuds ou avec un stockage d’objets externe

  • Un abonnement actif pour SUSE Private Registry

5.3 Déploiement de Registre privé avec HA

  1. Téléchargez le graphique Registre privé Helm.

      $ helm pull oci://registry.suse.com/private-registry/private-registry-helm --untar
  2. Update the deployment parameters to match your requirements. Refer to Appendix B, Exemple d’un graphique Registre privé de configuration HA Helm for an example Helm chart for Registre privé HA setup. Refer to Appendix A, Surcharge du graphique SUSE Private Registry Helm for a complete list of values to specify or override.

  3. Install the Registre privé Helm chart. Replace <RELEASE_NAME> with your custom release name for the Helm chart deployment.

      $ helm install <RELEASE_NAME> private-registry-helm/

6 Configurez Rancher en tant que fournisseur d’identité OIDC

Ce guide explique comment configurer Rancher pour agir en tant que fournisseur d’identité OIDC, permettant aux utilisateurs de s’authentifier dans des applications externes telles que SUSE Private Registry en utilisant leurs identifiants Rancher.

6.1 Étape 1 : Activez le drapeau de fonctionnalité oidc-provider

  1. Connectez-vous à l’interface utilisateur de Rancher en tant qu’administrateur.

  2. Cliquez sur le menu trois lignes (☰) en haut à gauche et allez à Paramètres globaux › Drapeaux de fonctionnalités.

  3. Trouvez le drapeau oidc-provider, cliquez sur l’icône Plus d’actions (⋮), puis cliquez sur Activer.

Configurer Rancher en tant que fournisseur d’identité OIDC

6.2 Étape 2 : Créez une ressource OIDCClient

Rancher utilise une ressource personnalisée OIDCClient pour enregistrer les applications en aval.

  1. Créez un fichier nommé rancher-oidc-client.yaml avec le contenu suivant:

    apiVersion: management.cattle.io/v3
    kind: OIDCClient
    metadata:
      name: spr-client
    spec:
      tokenExpirationSeconds: 600
      refreshTokenExpirationSeconds: 3600
      redirectURIs:
        # Replace this with the actual callback URL of your SUSE private registry instance
        - "https://<SUSE_PRIVATE_REGISTR_URL>/c/oidc/callback"
  2. Appliquez le fichier au cluster où Rancher est en cours d’exécution:

    >kubectl apply -f rancher-oidc-client.yaml

6.3 Étape 3: Récupérez l’ID client et le secret

Une fois la ressource créée, Rancher remplit automatiquement le clientID et provisionne un secret Kubernetes contenant le clientSecret.

  1. Obtenez l’ID client généré:

    >kubectl get oidcclient spr-client -o jsonpath="{.status.clientID}"
  2. Récupérez le secret client. N’oubliez pas de remplacer <YOUR_CLIENT_ID> par l’ID récupéré à l’étape précédente:

    >kubectl get secret <YOUR_CLIENT_ID>
      -n cattle-oidc-client-secrets
      -o jsonpath="{.data.client-secret-1}" | base64 -d

6.4 Étape 4: Configurez SUSE Private Registry

Vous pouvez configurer SUSE Private Registry pour utiliser Rancher comme fournisseur OIDC en passant les valeurs via Helm. Utilisez le bloc core.configureUserSettings dans votre configuration values-oidc.yaml.

L’exemple suivant est un bloc utilisant votre Rancher point de terminaison et les identifiants récupérés ci-dessus. Remplacez les valeurs de <YOUR_CLIENT_ID> et <YOUR_CLIENT_SECRET>.

core:
  configureUserSettings: |
    {
      "auth_mode": "oidc_auth",
      "oidc_name": "Rancher",
      "oidc_endpoint": "<RANCHER_URL>/oidc",
      "oidc_client_id": "<YOUR_CLIENT_ID>",
      "oidc_client_secret": "<YOUR_CLIENT_SECRET>",
      "oidc_scope": "openid,profile,offline_access",
      "oidc_verify_cert": false,
      "oidc_auto_onboard": true,
      "oidc_user_claim": "preferred_username",
      "oidc_groups_claim": "groups",
      "oidc_admin_group": "spr-admins"
    }
Note
Note

Assurez-vous que oidc_verify_cert est défini sur false si votre instance Rancher utilise des certificats auto-signés. En spécifiant oidc_admin_group, tout utilisateur Rancher appartenant au groupe spr-admins se verra automatiquement octroyer des privilèges d’administrateur système dans SUSE Private Registry.

7 Questions fréquemment posées

7.1 Aperçu du produit et différenciateurs

Quel type d’abonnement les clients ont-ils besoin pour SUSE Private Registry ?

Il est inclus dans Rancher la suite et proposé en tant que produit complémentaire pour Rancher Prime.

Le prix du produit complémentaire est le même que celui des autres produits complémentaires.

Quels sont les différenciateurs avec Harbor (de la Collection d’Applications ou en amont) ?

Utilisez SUSE Private Registry si vous avez besoin:

  • Support de niveau 3 (L3) pour les problèmes de produit.

  • Un cycle de publication prévisible.

  • Images corrigées pour les vulnérabilités connues. Les images Harbor en amont de Docker Hub contiennent souvent de nombreuses vulnérabilités non corrigées.

    Au fil du temps, SUSE ajoutera également des intégrations prêtes à l’emploi avec Rancher et priorisera les demandes de fonctionnalités des clients.

Les clients doivent-ils acheter le même nombre d’abonnements au produit complémentaire SUSE Private Registry que d’abonnements Rancher Prime ?

Oui, tout comme d’autres produits complémentaires tels que SUSE Sécurité. Un avantage supplémentaire du modèle d’abonnement SUSE Private Registry est qu’il permet aux clients d’exécuter autant de déploiements qu’ils le souhaitent.

7.2 Relation avec Harbor en amont

Comment le cycle de publication s’aligne-t-il avec Harbor en amont ?

Le cycle de publication de SUSE Private Registry est indépendant du cycle de publication de Harbor en amont.

Lors de la publication de nouvelles versions de SUSE Private Registry, SUSE vise à inclure la dernière version du projet Harbor en amont qui répond aux exigences d’assurance qualité et de maintenance de SUSE.

Allez-vous publier des considérations de migration pour les clients exécutant Harbor à partir d’autres sources ?

Pas pour le moment.

7.3 Déploiement et installation

Supportez-vous l’installation de SUSE Private Registry via docker-compose ?

Non. Vous devez installer et configurer SUSE Private Registry en utilisant son tableau Helm. Ce tableau est également utilisé pour la gestion continue (opérations du jour 2) et peut être intégré aux flux de travail GitOps.

Recommandez-vous des déploiements sur le cluster local (Rancher Manager) ?

Non. SUSE recommande de déployer SUSE Private Registry sur un cluster en aval. Cela rend le registre accessible à d’autres clusters en aval qui ont besoin de consommer des images.

Quelles sont les meilleures pratiques de déploiement pour un environnement à haute disponibilité (HA) ?

Pour HA, ne déployez pas SUSE Private Registry sur Rancher le cluster de gestion pour éviter la contention des ressources.

Vous pouvez déployer SUSE Private Registry sur un cluster dédié, ou sur un ou plusieurs de vos clusters d’application.

Pour obtenir des instructions, reportez-vous à Chapter 5, Haute disponibilité configuration. Notez que vous devez fournir vos propres composants HA pour la base de données Postgres, le serveur Valkey ou Redis, et le contrôleur Ingress. Ces composants ne sont pas déployés par le tableau SUSE Private Registry Helm et ne sont pas supportés par SUSE.

Le tableau SUSE Private Registry Helm sera-t-il ajouté à la Collection d’Applications à l’avenir ?

Oui, SUSE prévoit de publier le tableau là-bas à l’avenir.

Expédiez-vous un opérateur Kubernetes ?

SUSE Private Registry n’est pas livré avec un opérateur dédié. Il est installé et géré en utilisant son tableau Helm, qui peut être intégré avec GitOps. SUSE continue d’évaluer la gestion basée sur des opérateurs pour les futures versions.

7.4 Sécurité, analyse et signature

Intégrez-vous un outil de signature dans SUSE Private Registry ?

SUSE Private Registry ne signe pas les images lui-même, mais il peut stocker, distribuer et vérifier les signatures compatibles avec l’Open Container Initiative (OCI).

Un outil largement utilisé est cosign, qui peut signer des images et stocker les signatures dans SUSE Private Registry.

Les signatures de cosign attachées aux images sont consultables et téléchargeables depuis le portail SUSE Private Registry.

Est-il possible de signer des images avec Notary ou Cosign pour approbation lors du processus de déploiement ?

SUSE Private Registry peut stocker, distribuer et vérifier les signatures cosign.

SUSE Private Registry lui-même ne signe pas les images. Vous devez signer les images pendant leur processus de construction, puis télécharger la signature dans le registre avec l’image.

Notary n’est pas inclus ni supporté avec SUSE Private Registry.

Les images sont-elles scannées pour les vulnérabilités et les expositions communes (CVE) uniquement avec Trivy, ou peut-on également utiliser SUSE Security (NeuVector) ?

Les images sont scannées avec Trivy, qui est prêt à l’emploi. SUSE Security peut être ajouté en plus ou en remplacement de Trivy.

Est-il possible d’exécuter ClamAV ou des analyses de logiciels malveillants similaires ?

Par défaut, SUSE Private Registry scanne les images en utilisant Trivy. Vous pouvez également configurer SUSE Security (NeuVector) comme scanner.

Dans le scénario de cache de pull-through, les critères de vulnérabilité seront-ils appliqués ?

Oui, mais avec une limitation connue. En raison des Harbor problèmes en amont, les critères de vulnérabilité ne sont pas appliqués lors du premier pull d’une image car le scan n’est pas encore terminé.

Pour une couverture complète, associez SUSE Private Registry avec SUSE Security contrôles d’admission.

Les images de SUSE Private Registry sont-elles durcies ?

Oui. Les images de conteneur pour SUSE Private Registry sont durcies. Elles sont basées sur SUSE Linux Enterprise Base Container Images (SLE BCI) et construites avec le même SUSE Build Service de niveau entreprise utilisé pour SUSE Linux Enterprise. Cela garantit une chaîne d’approvisionnement sécurisée. Les images sont également signées, et SUSE publie leurs attestations de niveaux de chaîne d’approvisionnement pour les artefacts logiciels (SLSA).

Les images de SUSE Private Registry sont-elles signées? Comment ?

Les images sont signées avec cosign. Vous pouvez les vérifier en sauvegardant la clé de signature au format PEM publiée à KB 000021411.

Ensuite, exécutez, par exemple:

cosign verify --key container-key.pem registry.suse.com/private-registry/harbor-portal:latest

7.5 Réplication et synchronisation

Y a-t-il un plan pour un plug-in pour synchroniser avec SUSE Registre et SUSE Collection d’applications ?

Oui, une telle fonctionnalité est prévue.

SUSE Private Registry propose-t-il une réplication multi-sites ?

Oui. SUSE Private Registry prend en charge la réplication d’images multi-sites basée sur des stratégies (pull et push). Vous pouvez synchroniser des images à travers plusieurs déploiements de SUSE Private Registry tout en gardant chaque registre indépendant.

7.6 Fonctionnalités et intégration avec Rancher

Y a-t-il un plan pour intégrer le Registre au sein de Rancher en utilisant une Extension ?

Oui. SUSE prévoit une intégration plus approfondie avec Rancher Prime et d’autres offres. Les améliorations futures envisagées incluent l’intégration de l’authentification unique (SSO), une configuration simplifiée pour les scanners SUSE Sécurité et le miroir de la Collection d’Applications, la surveillance avec SUSE Observabilité, et une extension de l’interface utilisateur Rancher.

SUSE ajoutera-t-il le Registre au Catalogue de Formation ?

Cela n’est pas encore prévu. Si vous êtes intéressé par le matériel de formation, contactez SUSE pour discuter des possibilités avec l’équipe de formation.

7.7 Support et documentation

Y a-t-il une stratégie de support pour SUSE Private Registry ?

Oui. La stratégie de support de SUSE Private Registry est la même que celle de tout autre produit complémentaire Rancher Prime.

Si la documentation de SUSE Private Registry manque d’informations, puis-je me référer à la documentation officielle de Harbor ?

Oui. Puisque SUSE Private Registry est basé sur Harbor, la documentation officielle de Harbor est une ressource utile. Pour les fonctionnalités spécifiques à la version SUSE, référez-vous à la documentation de SUSE Private Registry.

Le Release notes précise quelle version Harbor en amont correspond à votre version SUSE Private Registry.

8 Dépannage

Cette section fournit des solutions aux problèmes que vous pourriez rencontrer lors du déploiement ou de l’utilisation de SUSE Private Registry.

Je rencontre l’erreur 401 unauthorized lorsque j’essaie d’installer SUSE Private Registry.

La version complète du message d’erreur est la suivante:

Error: INSTALLATION FAILED:
GET "https://registry.suse.com/v2/private-registry/private-registry-helm/tags/list":
response status code 401: unauthorized:
authentication required:
[map[Action:pull Class: Name:private-registry/private-registry-helm Type:repository]]

Pour installer et utiliser SUSE Private Registry, vous avez besoin des éléments suivants:

  • Un abonnement éligible qui inclut ce produit, tel qu’un abonnement Rancher Suite ou un abonnement produit complémentaire SUSE Private Registry. Si vous n’avez pas d’abonnement éligible, contactez votre SUSE représentant.

  • Connectez-vous à SUSE Registre avec Helm en utilisant les identifiants de mise en miroir SCC de l’organisation SCC qui détient l’abonnement. Pour plus d’informations, reportez-vous à Section 4.1, “Obtention des secrets Kubernetes depuis le SUSE Centre Client”.

A Surcharge du graphique SUSE Private Registry Helm

Le graphique SUSE Private Registry (Registre privé) Helm est livré avec des valeurs par défaut. Vous pouvez ajuster Helm l’installation du graphique de l’une des manières suivantes:

  • Ajoutez des paramètres spécifiques aux indicateurs --set sur la ligne de commande helm install, par exemple:

    $ helm install <RELEASE_NAME> \
    oci://registry.suse.com/private-registry/private-registry-helm \
    --namespace <PRIVATE_REGISTRY_NAMESPACE> \
    --set harborAdminPassword=<MY_PASSWORD> \
    --set externalURL=https://<PRIVATE_REGISTRY_FQDN> \
    --set expose.ingress.hosts.core=<PRIVATE_REGISTRY_FQDN>
  • Create a SUSE custom suse_registry_override.yaml file and pass it to the --f flag, for example:

      $ helm install <RELEASE_NAME> \
      oci://registry.suse.com/private-registry/private-registry-helm \
      --namespace <PRIVATE_REGISTRY_NAMESPACE>
      -f suse_registry_override.yaml

A1 Exemples de fichiers de surcharge SUSE Registre Helm

Example A1: Déploiement minimal avec Ingress
expose :
  type : ingress 1
  ingress :
    hosts :
      core : <PRIVATE_REGISTRY_FQDN> 2

externalURL : https://<PRIVATE_REGISTRY_FQDN> 3

harborAdminPassword : "<MY_PASSWORD>" 4

database :
  internal :
    password : "<MY_PASSWORD_POSTGRESQL>"

redis :
  internal :
   password : "<MY_PASSWORD_REDIS>"

1

Comment SUSE Registre est exposé. Peut être ingress, loadBalancer, nodePort ou clusterIPhis. La valeur par défaut est ingress.

2

Nom d’hôte pour la configuration réseau interne Kubernetes.

3

URL où l’application SUSE Registre s’exécute. Il est utilisé pour générer des liens dans l’interface utilisateur, des redirections et également pour les réponses API.

4

Le mot de passe administrateur de l’application.

Example A2: Déploiement typique avec loadBalancer
expose:
  type: loadBalancer 1
  tls:
    enabled: true
    certSource: secret 2
    secret:
      secretName: <SECRET_NAME>

    auto:
      commonName: <PRIVATE_REGISTRY_FQDN> 3

externalURL : https://<PRIVATE_REGISTRY_FQDN> 4

harborAdminPassword : "<MY_PASSWORD>" 5

database :
  internal :
    password : "<MY_PASSWORD_POSTGRESQL>"

redis :
  internal :
   password : "<MY_PASSWORD_REDIS>"

1

Comment SUSE Registre est exposé. Peut être ingress, loadBalancer, nodePort ou clusterIP. La valeur par défaut est ingress.

2

Peut être auto, secret ou none. Selon l’option, vous devrez peut-être inclure des valeurs supplémentaires.

3

Lors de l’utilisation du chiffrement TLS, ce champ doit correspondre à la valeur externalURL.

4

URL où l’application SUSE Registre s’exécute. Il est utilisé pour générer des liens dans l’interface utilisateur, des redirections et également pour les réponses API.

5

Le mot de passe administrateur de l’application.

A2 Surcharge Helm des paramètres et valeurs du graphique.

Les tableaux suivants énumèrent tous les paramètres avec des descriptions que vous pouvez utiliser pour surcharger les valeurs d’installation par défaut.

Paramètres globaux
global.imageRegistry

Définit une surcharge globale pour le registre d’images de conteneurs utilisé pour toutes les images.

global.imagePullSecrets

Définit des secrets de tirage globaux pour accéder au registre d’images de conteneurs.

Paramètres communs
harborAdminPassword

Définit le mot de passe initial pour l’administrateur Harbor. Modifiez-le depuis le portail après le déploiement. La valeur par défaut est Harbor12345.

externalURL

Spécifie l’URL externe pour le service harbor-core. La valeur par défaut est https://core.harbor.domain.

existingSecretAdminPasswordKey

Définit le nom de clé dans le secret contenant le mot de passe de l’administrateur Harbor. La valeur par défaut est HARBOR_ADMIN_PASSWORD.

imagePullSecrets

Définit les noms imagePullSecrets pour tous les déploiements.

updateStrategy.type

Définit la stratégie de mise à jour pour les déploiements avec des volumes persistants. Accepte RollingUpdate ou Recreate. Utilisez Recreate lorsque RWM pour les volumes n’est pas pris en charge. La valeur par défaut est RollingUpdate.

logLevel

Définit le niveau de journalisation pour les services Harbor. Accepte fatal, error, warn, info, debug ou trace. La valeur par défaut est debug.

enableMigratehelmHook

Exécute la tâche de migration de base de données via le hook Helm. Lorsque true, sépare la tâche de migration de harbor-core. La valeur par défaut est false.

caSecretName

Spécifie le nom du secret contenant la clé ca.crt.

Paramètres de proxy
proxy.httpProxy

Spécifie l’URL du serveur proxy HTTP. La valeur par défaut est "".

proxy.httpsProxy

Spécifie l’URL du serveur proxy HTTPS. La valeur par défaut est "".

proxy.noProxy

Définit les URL qui contournent la configuration du proxy. La valeur par défaut est 127.0.0.1,localhost,.local,.internal.

proxy.components

Définit les composants qui utilisent la configuration du proxy. La valeur par défaut est ["core","jobservice","trivy"].

Paramètres d’exposition
expose.type

Spécifie le type d’exposition du service: ingress, clusterIP, nodePort ou loadBalancer. La valeur par défaut est ingress.

expose.tls.enabled

Active TLS. La valeur par défaut est true.

expose.tls.certSource

Définit la source du certificat TLS comme auto, secret ou none. La valeur par défaut est auto.

expose.tls.auto.commonName

Définit le nom commun du certificat lorsque le type n’est pas ingress.

expose.tls.secret.secretName

Spécifie le nom du secret contenant tls.crt (certificat) et tls.key (clé privée).

expose.ingress.hosts.core

Définit l’hôte du service noyau Harbor dans la règle Ingress. La valeur par défaut est core.harbor.domain.

expose.ingress.controller

Définit le type de contrôleur Ingress. Prend en charge default, gce, alb, f5-bigip et ncp. La valeur par défaut est default.

expose.ingress.kubeVersionOverride

Surcharge la version Kubernetes pour le templating Ingress.

expose.ingress.annotations

Définit les annotations Ingress.

expose.ingress.labels

Définit des étiquettes spécifiques à Ingress. La valeur par défaut est {}.

expose.clusterIP.name

Définit le nom du service ClusterIP. La valeur par défaut est harbor.

expose.clusterIP.annotations

Définit les annotations du service ClusterIP. La valeur par défaut est {}.

expose.clusterIP.ports.httpPort

Définit le port du service HTTP. La valeur par défaut est 80.

expose.clusterIP.ports.httpsPort

Définit le port du service HTTPS. La valeur par défaut est 443.

expose.clusterIP.labels

Définit des étiquettes spécifiques au ClusterIP. La valeur par défaut est {}.

expose.nodePort.name

Définit le nom du service NodePort. La valeur par défaut est harbor.

expose.nodePort.ports.http.port

Définit le port du service HTTP. La valeur par défaut est 80.

expose.nodePort.ports.http.nodePort

Définit le port du nœud HTTP. La valeur par défaut est 30002.

expose.nodePort.ports.https.port

Définit le port du service HTTPS. La valeur par défaut est 443.

expose.nodePort.ports.https.nodePort

Définit le port du nœud HTTPS. La valeur par défaut est 30003.

expose.nodePort.annotations

Définit les annotations NodePort.

expose.nodePort.labels

Définit des étiquettes spécifiques au NodePort. La valeur par défaut est {}.

expose.loadBalancer.name

Définit le nom du service. La valeur par défaut est harbor.

expose.loadBalancer.IP

Définit l’IP du loadBalancer lorsque l’attribution d’IP est prise en charge. La valeur par défaut est "".

expose.loadBalancer.ports.httpPort

Définit le port du service HTTP. La valeur par défaut est 80.

expose.loadBalancer.ports.httpsPort

Définit le port du service HTTPS. La valeur par défaut est 30002.

expose.loadBalancer.annotations

Définit les annotations du service loadBalancer. La valeur par défaut est {}.

expose.loadBalancer.labels

Définit des étiquettes spécifiques au loadBalancer. La valeur par défaut est {}.

expose.loadBalancer.sourceRanges

Spécifie les plages d’adresses IP pour loadBalancerSourceRanges. La valeur par défaut est [].

Paramètres de persistance
persistence.enabled

Active ou désactive la persistance des données. La valeur par défaut est true.

persistence.resourcePolicy

keep empêche la suppression des PVC lors d’une opération de suppression Helm. Une valeur vide supprime les PVC après la suppression du graphique. La valeur par défaut est keep.

persistence.persistentVolumeClaim.registry.existingClaim

Le PVC existant qui doit être créé manuellement avant d’être lié. Nécessite une spécification de subPath si le PVC est partagé avec d’autres composants.

persistence.persistentVolumeClaim.registry.storageClass

Le storageClass qui provisionne le volume.

persistence.persistentVolumeClaim.registry.subPath

Le sous-chemin dans le volume.

persistence.persistentVolumeClaim.registry.accessMode

Le mode d’accès du volume. La valeur par défaut est ReadWriteOnce.

persistence.persistentVolumeClaim.registry.size

La taille du volume. La valeur par défaut est 5Gi.

persistence.persistentVolumeClaim.registry.annotations

Les annotations du volume.

persistence.persistentVolumeClaim.jobservice.jobLog.existingClaim

Le PVC existant qui doit être créé manuellement avant d’être lié. Nécessite une spécification de subPath si le PVC est partagé avec d’autres composants.

persistence.persistentVolumeClaim.jobservice.jobLog.storageClass

Le storageClass qui provisionne le volume.

persistence.persistentVolumeClaim.jobservice.jobLog.subPath

Le sous-chemin dans le volume.

persistence.persistentVolumeClaim.jobservice.jobLog.accessMode

Le mode d’accès du volume. La valeur par défaut est ReadWriteOnce.

persistence.persistentVolumeClaim.jobservice.jobLog.size

La taille du volume. La valeur par défaut est 1Gi.

persistence.persistentVolumeClaim.jobservice.jobLog.annotations

Les annotations du volume.

persistence.persistentVolumeClaim.database.existingClaim

Le PVC existant qui doit être créé manuellement avant d’être lié. Nécessite une spécification de subPath si le PVC est partagé avec d’autres composants.

persistence.persistentVolumeClaim.database.storageClass

Le storageClass qui provisionne le volume.

persistence.persistentVolumeClaim.database.subPath

Le sous-chemin dans le volume. Ignoré lorsqu’une base de données externe est utilisée.

persistence.persistentVolumeClaim.database.accessMode

Le mode d’accès du volume. Ignoré lorsqu’une base de données externe est utilisée. La valeur par défaut est ReadWriteOnce.

persistence.persistentVolumeClaim.database.size

La taille du volume. Ignoré lorsqu’une base de données externe est utilisée. La valeur par défaut est 1Gi.

persistence.persistentVolumeClaim.database.annotations

Les annotations du volume.

persistence.persistentVolumeClaim.redis.existingClaim

Le PVC existant qui doit être créé manuellement avant d’être lié. Nécessite une spécification de subPath si le PVC est partagé avec d’autres composants.

persistence.persistentVolumeClaim.redis.storageClass

Le storageClass qui provisionne le volume. Utilise la StorageClass par défaut si non spécifiée.

persistence.persistentVolumeClaim.redis.subPath

Le sous-chemin dans le volume. Ignoré lorsqu’un Valkey externe est utilisé.

persistence.persistentVolumeClaim.redis.accessMode

Le mode d’accès du volume. Ignoré lorsqu’un Valkey externe est utilisé. La valeur par défaut est ReadWriteOnce.

persistence.persistentVolumeClaim.redis.size

La taille du volume. Ignoré lorsqu’un Valkey externe est utilisé. La valeur par défaut est 1Gi.

persistence.persistentVolumeClaim.redis.annotations

Les annotations du volume.

persistence.persistentVolumeClaim.trivy.existingClaim

Le PVC existant qui doit être créé manuellement avant d’être lié. Nécessite une spécification de subPath si le PVC est partagé avec d’autres composants.

persistence.persistentVolumeClaim.trivy.storageClass

Le storageClass qui provisionne le volume. Utilise la StorageClass par défaut si non spécifiée.

persistence.persistentVolumeClaim.trivy.subPath

Le sous-chemin dans le volume.

persistence.persistentVolumeClaim.trivy.accessMode

Le mode d’accès du volume. La valeur par défaut est ReadWriteOnce.

persistence.persistentVolumeClaim.trivy.size

La taille du volume. La valeur par défaut est 1Gi.

persistence.persistentVolumeClaim.trivy.annotations

Les annotations du volume.

persistence.imageChartStorage.disableredirect

Contrôle la gestion des redirections depuis les back-ends de contenu. Définir sur vrai pour désactiver les redirections pour les back-ends non pris en charge. La valeur par défaut est false.

persistence.imageChartStorage.caBundleSecretName

Le nom du secret contenant le bundle CA pour les certificats de service de stockage auto-signés.

persistence.imageChartStorage.type

Le type de stockage pour les images et les graphiques: filesystem, azure, gcs, s3, swift ou oss. La valeur par défaut est filesystem.

persistence.imageChartStorage.gcs.existingSecret

Le nom du secret existant contenant la clé JSON du compte de service GCS. La clé doit être gcs-key.json. La valeur par défaut est "".

persistence.imageChartStorage.gcs.useWorkloadIdentity

Active l’utilisation de l’identité de charge de travail dans un cluster GKE. La valeur par défaut est false.

nginxParamètres de
nginx.image.repository

Le dépôt d’images pour nginx. La valeur par défaut est private-registry/harbor-nginx.

nginx.image.tag

La balise d’image pour nginx.

nginx.replicas

Le nombre de répliques à exécuter. La valeur par défaut est 1.

nginx.revisionHistoryLimit

Le nombre maximum de révisions anciennes de ReplicaSet à conserver. La valeur par défaut est 10.

nginx.resources

Les ressources de calcul allouées au conteneur. La valeur par défaut est undefined.

nginx.automountServiceAccountToken

Contrôle le montage automatique du jeton de compte de service. La valeur par défaut est false.

nginx.nodeSelector

Les étiquettes de nœud utilisées pour l’attribution des pods. La valeur par défaut est {}.

nginx.tolerations

Les tolérances d’attribution des pods. La valeur par défaut est [].

nginx.affinity

Les règles d’affinité pour les nœuds ou les pods. La valeur par défaut est {}.

nginx.topologySpreadConstraints

Les règles pour répartir les pods sur des domaines de défaillance tels que les régions ou les zones de disponibilité. La valeur par défaut est [].

nginx.podAnnotations

Les annotations ajoutées au nginx pod. La valeur par défaut est {}.

Paramètres du portail
portal.image.repository

Emplacement du dépôt pour l’image du portail. La valeur par défaut est private-registry/harbor-portal.

portal.image.tag

Balise pour l’image du portail. La valeur par défaut est 3.11.

portal.replicas

Nombre de répliques à créer. La valeur par défaut est 1.

portal.revisionHistoryLimit

Nombre maximum de révisions anciennes de ReplicaSet à conserver. La valeur par défaut est 10.

portal.resources

Ressources allouées au conteneur. La valeur par défaut est undefined.

portal.automountServiceAccountToken

Contrôle le montage automatique du jeton de compte de service. La valeur par défaut est false.

portal.nodeSelector

Étiquettes de nœud utilisées pour l’attribution des pods. La valeur par défaut est {}.

portal.tolerations

Tolérances utilisées pour l’attribution des pods. La valeur par défaut est [].

portal.affinity

Paramètres d’affinité pour les nœuds et les pods. La valeur par défaut est {}.

portal.topologySpreadConstraints

Définit la distribution des pods à travers les domaines de défaillance tels que les régions ou les zones de disponibilité. La valeur par défaut est [].

portal.podAnnotations

Annotations ajoutées au pod du portail. La valeur par défaut est {}.

portal.serviceAnnotations

Annotations ajoutées au service du portail. La valeur par défaut est {}.

portal.priorityClassName

Nom de la classe de priorité pour l’exécution des pods.

portal.initContainers

Les conteneurs d’initialisation à exécuter avant le démarrage du conteneur du contrôleur. La valeur par défaut est [].

Paramètres du noyau
core.image.repository

Le dépôt pour l’image Harbor du noyau. La valeur par défaut est private-registry/harbor-core.

core.image.tag

La balise pour l’image Harbor du noyau. La valeur par défaut est 2.11.

core.replicas

Le nombre de répliques. La valeur par défaut est 1.

core.revisionHistoryLimit

La limite de l’historique des révisions. La valeur par défaut est 10.

core.startupProbe.initialDelaySeconds

Le délai initial en secondes pour la sonde de démarrage. La valeur par défaut est 10.

core.resources

Les ressources à allouer pour le conteneur. La valeur par défaut est undefined.

core.automountServiceAccountToken

Monte le jeton du compte de service. La valeur par défaut est false.

core.nodeSelector

Les étiquettes de nœud pour l’attribution des pods. La valeur par défaut est {}.

core.tolerations

Les tolérances pour l’attribution des pods. La valeur par défaut est [].

core.affinity

Les affinités des nœuds ou des pods. La valeur par défaut est {}.

core.topologySpreadConstraints

Les contraintes qui définissent comment les pods sont répartis à travers les domaines de défaillance tels que les régions ou les zones de disponibilité. La valeur par défaut est [].

core.podAnnotations

Les annotations à ajouter au pod du noyau. La valeur par défaut est {}.

core.serviceAnnotations

Les annotations à ajouter au service du noyau. La valeur par défaut est {}.

core.configureUserSettings

Une chaîne JSON dans la variable d’environnement CONFIG_OVERWRITE_JSON pour configurer les paramètres utilisateur.

core.quotaUpdateProvider

Le fournisseur pour mettre à jour l’utilisation du quota de projet, les options sont redis ou db. La valeur par défaut est db.

core.secret

Utilisé lorsque le serveur du noyau communique avec d’autres composants.

core.secretName

Le nom d’un Kubernetes secret pour utiliser votre propre certificat TLS et clé privée pour le chiffrement ou le déchiffrement des jetons.

core.tokenKey

La clé privée RSA au format PEM utilisée pour signer les jetons de service.

core.tokenCert

Le certificat au format PEM signé par core.tokenKey utilisé pour valider les jetons de service.

core.xsrfKey

La clé XSRF, générée automatiquement si elle n’est pas spécifiée.

core.priorityClassName

La classe de priorité pour exécuter le pod.

core.artifactPullAsyncFlushDuration

La durée pour mettre à jour de manière asynchrone le temps de tirage des artefacts et le nombre de tirages de dépôt.

core.gdpr.deleteUser

Active la suppression des utilisateurs conforme au RGPD. La valeur par défaut est false.

core.gdpr.auditLogsCompliant

Active la conformité au RGPD pour les journaux d’audit en changeant le nom d’utilisateur en sa valeur CRC32 si cet utilisateur a été supprimé du système. La valeur par défaut est false.

core.initContainers

Les conteneurs d’initialisation à exécuter avant le démarrage du conteneur du contrôleur. La valeur par défaut est [].

Paramètres du service de travail.
jobservice.image.repository

Le dépôt pour l’image du jobservice. La valeur par défaut est private-registry/harbor-jobservice.

jobservice.image.tag

La balise pour l’image du jobservice. La valeur par défaut est 2.11.

jobservice.replicas

Le nombre de répliques. La valeur par défaut est 1.

jobservice.revisionHistoryLimit

La limite de l’historique des révisions. La valeur par défaut est 10.

jobservice.maxJobWorkers

Le nombre maximum de workers. La valeur par défaut est 10.

jobservice.jobLoggers

Les enregistreurs pour les tâches: file, database ou stdout. La valeur par défaut est [file].

jobservice.loggerSweeperDuration

La durée en jours pour conserver les journaux de travail (ignorée si jobLoggers est défini sur stdout). La valeur par défaut est 14.

jobservice.notification.webhook_job_max_retry

Le nombre maximum de tentatives pour l’envoi de notifications webhook. La valeur par défaut est 3.

jobservice.notification.webhook_job_http_client_timeout

Le délai d’attente du client HTTP en secondes pour l’envoi de notifications webhook. La valeur par défaut est 3.

jobservice.reaper.max_update_hours

Le temps maximum en heures à attendre qu’une tâche se termine. Si la tâche n’est pas terminée après le nombre d’heures spécifié, elle est marquée comme une erreur mais continue de s’exécuter. La valeur par défaut est 24.

jobservice.reaper.max_dangling_hours

Le temps maximum en heures pour l’exécution dans un état d’exécution sans qu’une nouvelle tâche soit créée. La valeur par défaut est 168.

jobservice.resources

Les [ressources] à allouer pour le conteneur. La valeur par défaut est undefined.

jobservice.automountServiceAccountToken

Monte le jeton du compte de service. La valeur par défaut est false.

jobservice.nodeSelector

Les étiquettes de nœud pour l’attribution des pods. La valeur par défaut est {}.

jobservice.tolerations

Les tolérances pour l’attribution des pods. La valeur par défaut est [].

jobservice.affinity

Les affinités des nœuds ou des pods. La valeur par défaut est {}.

jobservice.topologySpreadConstraints

Les contraintes qui définissent comment les pods sont répartis à travers les domaines de défaillance tels que les régions ou les zones de disponibilité. La valeur par défaut est [].

jobservice.podAnnotations

Les annotations à ajouter au pod du jobservice. La valeur par défaut est {}.

jobservice.priorityClassName

La classe de priorité pour exécuter le pod.

jobservice.secret

Le secret utilisé lorsque le jobservice communique avec d’autres composants. Si une clé secrète n’est pas spécifiée, Helm la génère. Doit être une chaîne de 16 caractères.

jobservice.initContainers

Les conteneurs d’initialisation à exécuter avant le démarrage du conteneur du contrôleur. La valeur par défaut est [].

Paramètres du registre
registry.registry.image.repository

L’emplacement du dépôt pour l’image du registre. La valeur par défaut est private-registry/harbor-registry.

registry.registry.image.tag

La balise pour l’image du registre. La valeur par défaut est 2.11.

registry.registry.resources

Les [ressources] à allouer pour le conteneur. La valeur par défaut est undefined.

registry.controller.image.repository

L’emplacement du dépôt pour l’image du contrôleur de registre. La valeur par défaut est private-registry/harbor-registryctl.

registry.controller.image.tag

La balise pour l’image du contrôleur de registre. La valeur par défaut est 2.11.

registry.controller.resources

Les [ressources] à allouer pour le conteneur. La valeur par défaut est undefined.

registry.replicas

Le nombre d’instances répliquées. La valeur par défaut est 1.

registry.revisionHistoryLimit

Le nombre maximum de révisions à maintenir dans l’historique. La valeur par défaut est 10.

registry.nodeSelector

Les étiquettes de nœud pour l’attribution des pods. La valeur par défaut est {}.

registry.automountServiceAccountToken

Contrôle si le jeton de compte de service doit être monté. La valeur par défaut est false.

registry.tolerations

Les tolérances pour l’attribution des pods. La valeur par défaut est [].

registry.affinity

Les affinités des nœuds ou des pods. La valeur par défaut est {}.

registry.topologySpreadConstraints

Les contraintes qui définissent la distribution des pods à travers les domaines d’échec tels que les régions ou les zones de disponibilité. La valeur par défaut est [].

registry.middleware

Support intermédiaire pour un CDN entre le stockage back-end et Docker le destinataire de tirage.

registry.podAnnotations

Les annotations à ajouter au pod du registre. La valeur par défaut est {}.

registry.priorityClassName

La classe de priorité pour l’exécution du pod.

registry.secret

Le secret qui sécurise l’état de téléchargement entre le client et le stockage back-end du registre.

registry.credentials.username

Le nom d’utilisateur pour l’accès au Harbor registre interne du noyau. La valeur par défaut est harbor_registry_user.

registry.credentials.password

Le mot de passe pour l’accès au Harbor registre interne du noyau. La valeur par défaut est harbor_registry_password.

registry.credentials.existingSecret

Un secret existant contenant le mot de passe pour l’accès à l’instance du registre en mode d’authentification htpasswd. La valeur par défaut est "".

registry.credentials.htpasswdString

Le login et le mot de passe au format de chaîne htpasswd. Exclut registry.credentials.username et registry.credentials.password. La valeur par défaut est undefined.

registry.relativeurls

Renvoie des URL relatives dans les en-têtes de localisation lorsque c’est vrai. Requis si Harbor est derrière un proxy inverse. La valeur par défaut est false.

registry.upload_purging.enabled

Active la purge des répertoires de téléchargement. La valeur par défaut est true.

registry.upload_purging.age

La période après laquelle les fichiers dans les répertoires de téléchargement sont supprimés, par défaut une semaine. La valeur par défaut est 168h.

registry.upload_purging.interval

L’intervalle de temps entre les opérations de purge. La valeur par défaut est 24h.

registry.upload_purging.dryrun

Active le mode dryrun pour la purge des téléchargements. La valeur par défaut est false.

registry.initContainers

Les conteneurs d’initialisation qui s’exécutent avant le démarrage du conteneur du contrôleur. La valeur par défaut est [].

Trivy Paramètres de
trivy.enabled

Active ou désactive le Trivy scanner. La valeur par défaut est true.

trivy.image.repository

Le dépôt pour l’image de l’Trivy adaptateur. La valeur par défaut est private-registry/harbor-trivy-adapter.

trivy.image.tag

L’étiquette pour l’image de l’Trivy adaptateur. La valeur par défaut est 2.11.

trivy.resources

Les ressources à allouer pour le conteneur de l’Trivy adaptateur. La valeur par défaut est undefined.

trivy.automountServiceAccountToken

Indique si le token du compte de service doit être monté. La valeur par défaut est false.

trivy.replicas

Le nombre de répliques de Pod. La valeur par défaut est 1.

trivy.debugMode

Active le Trivy mode de débogage pour le dépannage. La valeur par défaut est false.

trivy.vulnType

Liste des types de vulnérabilités séparés par des virgules (os et library). La valeur par défaut est os,library.

trivy.severity

Liste des sévérités de vulnérabilités à vérifier, séparée par des virgules. La valeur par défaut est UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL.

trivy.ignoreUnfixed

Affiche uniquement les vulnérabilités corrigées. La valeur par défaut est false.

trivy.insecure

Ignore la vérification du certificat du registre. La valeur par défaut est false.

trivy.skipUpdate

Désactive les Trivy téléchargements de bases de données depuis GitHub. La valeur par défaut est false.

trivy.skipJavaDBUpdate

Nécessite le téléchargement manuel du trivy-java.db fichier lorsqu’il est activé. La valeur par défaut est false.

trivy.offlineScan

Empêche Trivy d’envoyer des requêtes API pour identifier les dépendances. La valeur par défaut est false.

trivy.securityCheck

Liste des problèmes de sécurité à détecter, séparée par des virgules. La valeur par défaut est vuln.

trivy.timeout

La durée d’attente pour l’achèvement du scan. La valeur par défaut est 5m0s.

trivy.gitHubToken

Le jeton d’accès GitHub requis pour les téléchargements de bases de données. La valeur par défaut est undefined.

trivy.priorityClassName

La classe de priorité pour l’exécution du pod. La valeur par défaut est undefined.

trivy.topologySpreadConstraints

Définit les contraintes de distribution des pods à travers les domaines d’échec. La valeur par défaut est undefined.

trivy.initContainers

Liste des conteneurs d’initialisation à exécuter avant le démarrage du conteneur principal. La valeur par défaut est [].

Paramètres de la base de données
database.type

Le type de base de données. Définir sur external lors de l’utilisation d’une base de données externe. La valeur par défaut est internal.

database.internal.image.repository

Le dépôt pour l’image de la base de données. La valeur par défaut est private-registry/harbor-db.

database.internal.image.tag

L’étiquette pour l’image de la base de données. La valeur par défaut est 2.11.

database.internal.password

Le mot de passe pour la base de données interne. La valeur par défaut est changeit.

database.internal.shmSizeLimit

La limite de taille de la mémoire partagée pour PostgreSQL (typiquement 50 % de la limite de mémoire du conteneur). La valeur par défaut est 512Mi.

database.internal.resources

Les ressources allouées pour le conteneur de base de données. La valeur par défaut est undefined.

database.internal.automountServiceAccountToken

Contrôle si le token du compte de service est monté. La valeur par défaut est false.

database.internal.initContainer.migrator.resources

Les ressources allouées pour le conteneur d’initialisation du migrateur de base de données. La valeur par défaut est undefined.

database.internal.initContainer.permissions.resources

Les ressources allouées pour le conteneur d’initialisation des permissions de la base de données. La valeur par défaut est undefined.

database.internal.nodeSelector

Les étiquettes de nœud pour l’attribution des pods. La valeur par défaut est {}.

database.internal.tolerations

Les tolérances pour l’attribution des pods. La valeur par défaut est [].

database.internal.affinity

Les paramètres d’affinité du nœud ou du pod. La valeur par défaut est {}.

database.internal.priorityClassName

La classe de priorité pour l’exécution du pod. La valeur par défaut est undefined.

database.internal.livenessProbe.timeoutSeconds

Le délai d’attente en secondes pour le probe de vivacité (plage: 1-5s). La valeur par défaut est 1.

database.internal.readinessProbe.timeoutSeconds

Le délai d’attente en secondes pour le probe de disponibilité (plage: 1-5s). La valeur par défaut est 1.

database.internal.extrInitContainers

Des conteneurs d’initialisation supplémentaires qui s’exécutent avant le démarrage du conteneur de base de données. La valeur par défaut est [].

database.external.host

Le nom d’hôte de la base de données externe. La valeur par défaut est 192.168.0.1.

database.external.port

Le numéro de port de la base de données externe. La valeur par défaut est 5432.

database.external.username

Le nom d’utilisateur pour la base de données externe. La valeur par défaut est user.

database.external.password

Le mot de passe pour la base de données externe. La valeur par défaut est password.

database.external.coreDatabase

Le nom de la base de données utilisée par le noyau. La valeur par défaut est registry.

database.external.existingSecret

Le secret existant contenant le mot de passe de la base de données. La clé doit être password. La valeur par défaut est "".

database.external.sslmode

La méthode de connexion pour la base de données externe. Options: require, verify-full, verify-ca, disable. La valeur par défaut est disable.

database.maxIdleConns

Le nombre maximum de connexions inactives dans le pool (0 ou moins signifie qu’aucune connexion inactive n’est conservée). La valeur par défaut est 50.

database.maxOpenConns

Le nombre maximum de connexions ouvertes à la base de données (0 ou moins signifie illimité). La valeur par défaut est 100.

database.podAnnotations

Les annotations à ajouter au pod de la base de données. La valeur par défaut est {}.

Paramètres Valkey / Redis
redis.type

Le type de Redis déploiement. Définir sur external pour Redis externe. La valeur par défaut est internal.

redis.internal.image.repository

Le dépôt pour l’image Redis. La valeur par défaut est private-registry/harbor-redis.

redis.internal.image.tag

L’étiquette pour l’image Redis. La valeur par défaut est 7.2.

redis.internal.resources

Les ressources allouées pour le Redis conteneur. La valeur par défaut est undefined.

redis.internal.automountServiceAccountToken

Contrôle si le token du compte de service est monté. La valeur par défaut est false.

redis.internal.nodeSelector

Les étiquettes de nœud pour l’attribution des pods. La valeur par défaut est {}.

redis.internal.tolerations

Les tolérances pour l’attribution des pods. La valeur par défaut est [].

redis.internal.affinity

Les paramètres d’affinité du nœud ou du pod. La valeur par défaut est {}.

redis.internal.priorityClassName

La classe de priorité pour exécuter Redis le pod. La valeur par défaut est undefined.

redis.internal.jobserviceDatabaseIndex

L’index de la base de données pour jobservice. La valeur par défaut est 1.

redis.internal.registryDatabaseIndex

L’index de la base de données pour le registre. La valeur par défaut est 2.

redis.internal.trivyAdapterIndex

L’index de la base de données pour Trivy l’adaptateur. La valeur par défaut est 5.

redis.internal.harborDatabaseIndex

L’index de la base de données pour la logique métier Harbor diverse. La valeur par défaut est 0.

redis.internal.cacheLayerDatabaseIndex

L’index de la base de données pour la couche de cache de Harbor. La valeur par défaut est 0.

redis.internal.initContainers

Les conteneurs d’initialisation qui s’exécutent avant le démarrage du Redis conteneur. La valeur par défaut est [].

redis.external.addr

L’adresse de l’Redis instance externe. La valeur par défaut est 192.168.0.2:6379.

redis.external.sentinelMasterSet

Le nom de l’ensemble maître Redis Sentinel (le cas échéant). La valeur par défaut est undefined.

redis.external.coreDatabaseIndex

L’index de la base de données pour le noyau. La valeur par défaut est 0.

redis.external.jobserviceDatabaseIndex

L’index de la base de données pour jobservice. La valeur par défaut est 1.

redis.external.registryDatabaseIndex

L’index de la base de données pour le registre. La valeur par défaut est 2.

redis.external.trivyAdapterIndex

L’index de la base de données pour Trivy l’adaptateur. La valeur par défaut est 5.

redis.external.harborDatabaseIndex

L’index de la base de données pour la logique métier Harbor diverse. La valeur par défaut est 0.

redis.external.cacheLayerDatabaseIndex

L’index de la base de données pour la couche de cache de Harbor. La valeur par défaut est 0.

redis.external.username

Le nom d’utilisateur pour Redis l’authentification externe. La valeur par défaut est undefined.

redis.external.password

Le mot de passe pour Redis l’authentification externe. La valeur par défaut est undefined.

redis.external.existingSecret

Le secret existant contenant le Redis mot de passe. La clé doit être REDIS_PASSWORD. La valeur par défaut est "".

redis.podAnnotations

Les annotations à ajouter au Redis pod. La valeur par défaut est {}.

Paramètres de l’exportateur
exporter.replicas

Le nombre de répliques à exécuter. La valeur par défaut est 1.

exporter.revisionHistoryLimit

La limite de l’historique des révisions. La valeur par défaut est 10.

exporter.podAnnotations

Annotations à ajouter au pod de l’exportateur. La valeur par défaut est {}.

exporter.image.repository

Le dépôt pour l’image de l’exportateur. La valeur par défaut est private-registry/harbor-exporter.

exporter.image.tag

L’étiquette pour l’image de l’exportateur. La valeur par défaut est 2.11.

exporter.nodeSelector

Étiquettes de nœud pour l’attribution de pod. La valeur par défaut est {}.

exporter.tolerations

Tolérances pour l’attribution de pod. La valeur par défaut est [].

exporter.affinity

Affinités de nœud ou de pod. La valeur par défaut est {}.

exporter.topologySpreadConstraints

Contraintes qui définissent comment les pods se répartissent sur des domaines de défaillance tels que les régions ou les zones de disponibilité. La valeur par défaut est [].

exporter.automountServiceAccountToken

Contrôle si le serviceAccountToken doit être monté. La valeur par défaut est false.

exporter.cacheDuration

La durée de mise en cache pour les informations collectées par l’exportateur. La valeur par défaut est 30.

exporter.cacheCleanInterval

L’intervalle de nettoyage du cache pour les informations collectées par l’exportateur. La valeur par défaut est 14400.

exporter.priorityClassName

La classe de priorité pour exécuter le pod. La valeur par défaut est undefined.

Paramètres des métriques
metrics.enabled

Active Harbor les métriques. La valeur par défaut est false.

metrics.core.path

Le chemin URL pour les métriques du noyau. La valeur par défaut est /metrics.

metrics.core.port

Le port pour les métriques du noyau. La valeur par défaut est 8001.

metrics.registry.path

Le chemin URL pour les métriques de registre. La valeur par défaut est /metrics.

metrics.registry.port

Le port pour les métriques de registre. La valeur par défaut est 8001.

metrics.exporter.path

Le chemin URL pour les métriques de l’exportateur. La valeur par défaut est /metrics.

metrics.exporter.port

Le port pour les métriques de l’exportateur. La valeur par défaut est 8001.

metrics.serviceMonitor.enabled

Permet la création d’un Prometheus ServiceMonitor (requiert Prometheus CRD). La valeur par défaut est false.

metrics.serviceMonitor.additionalLabels

Étiquettes supplémentaires à appliquer au manifeste ServiceMonitor. La valeur par défaut est "".

metrics.serviceMonitor.interval

L’intervalle de collecte pour Harbor les métriques. La valeur par défaut est "".

metrics.serviceMonitor.metricRelabelings

Les règles de re-étiquetage pour les métriques avant ingestion. La valeur par défaut est [].

metrics.serviceMonitor.relabelings

Les règles de re-étiquetage pour les métriques avant collecte. La valeur par défaut est [].

Paramètres de trace
trace.enabled

Active la fonctionnalité de traçage. La valeur par défaut est false.

trace.provider

Le fournisseur de traçage (jaeger ou otel). La version de Jaeger doit être 1.26 ou supérieure. La valeur par défaut est jaeger.

trace.sample_rate

Le taux d’échantillonnage pour les données de trace. 1 échantillonne 100 %, 0.5 échantillonne 50 %. La valeur par défaut est 1.

trace.namespace

L’espace de noms pour différencier les différents Harbor services.

trace.attributes

Un dictionnaire clé-valeur pour les attributs définis par l’utilisateur lors de l’initialisation du fournisseur de trace.

trace.jaeger.endpoint

Le point de terminaison pour le traçage Jaeger. La valeur par défaut est http://hostname:14268/api/traces.

trace.jaeger.username

Le nom d’utilisateur pour l’authentification Jaeger.

trace.jaeger.password

Le mot de passe pour l’authentification Jaeger.

trace.jaeger.agent_host

L’hôte de l’agent pour Jaeger.

trace.jaeger.agent_port

Le port de l’agent pour Jaeger. La valeur par défaut est 6831.

trace.otel.endpoint

Le point de terminaison pour le OpenTelemetry traçage. La valeur par défaut est hostname:4318.

trace.otel.url_path

Le chemin URL pour OpenTelemetry. La valeur par défaut est /v1/traces.

trace.otel.compression

Active la compression pour OpenTelemetry. La valeur par défaut est false.

trace.otel.insecure

Établit une connexion non sécurisée pour OpenTelemetry. La valeur par défaut est true.

trace.otel.timeout

Le délai d’attente en secondes pour OpenTelemetry. La valeur par défaut est 10.

Paramètres de cache
cache.enabled

Active la couche de cache. La valeur par défaut est false.

cache.expireHours

Le temps d’expiration en heures pour la couche de cache. La valeur par défaut est 24.

B Exemple d’un graphique Registre privé de configuration HA Helm

Le fichier d’exemple des valeurs suivantes illustre les paramètres requis pour la configuration HA Registre privé minimale.

expose:
  ingress:
    hosts:
      core: core.harbor.domain 1

externalURL: https://core.harbor.domain 2

portal:
  replicas: 2 3

core:
  replicas: 2 4

jobservice:
  replicas: 2 5

registry:
  replicas: 2 6

database:
  type: external
  external: 7
    host: "192.168.0.1"
    port: "5432"
    username: "user"
    password: "password"
    coreDatabase: "registry"
    existingSecret: "" 8
    sslmode: "disable" 9

redis:
  type: external
  external: 10
    addr: "192.168.0.2:6379" 11
    sentinelMasterSet: "" 12
    coreDatabaseIndex: "0" 13
    jobserviceDatabaseIndex: "1"
    registryDatabaseIndex: "2"
    trivyAdapterIndex: "5"
    harborDatabaseIndex: "6" 14
    cacheLayerDatabaseIndex: "7"15
    username: "" 16
    password: ""
    existingSecret: "" 17

persistence:
  enabled: true 18

1

Nom d’hôte du service noyau dans la règle Ingress.

2

L’URL externe pour le service harbor-core.

3 4 5 6

Nombre de réplicas à créer. Spécifiez deux ou plusieurs.

7

Remplissez les détails de connexion à la base de données dans la section external.

8

Si vous utilisez un secret existant, la valeur doit être password.

9

Accepte l’une des valeurs suivantes:

disable

N’utilisez pas SSL.

require

Utilisez toujours SSL et ignorez la vérification.

verify-ca

Utilisez toujours SSL. Vérifiez que le certificat présenté par le serveur a été signé par une CA de confiance.

verify-full

Utilisez toujours SSL. Vérifiez que le certificat présenté par le serveur a été signé par une CA de confiance et que le nom d’hôte du serveur correspond à celui du certificat.

10

Remplissez les informations de connexion dans la section external.

11

Prend en charge redis et redis+sentinel.
L’adresse pour redis est <redis_host>:<redis_port>.
L’adresse pour redis+sentinel est <sentinel1_host>:<sentinel1_port>,<sentinel2_host>:<sentinel2_port>…​

12

Le nom de l’ensemble des Valkey instances à surveiller. Il doit être configuré pour prendre en charge redis+sentinel.

13

Doit être 0 car la bibliothèque utilisée par Harbor ne prend pas en charge les configurations.

14

Facultatif. Par défaut, il est 0 mais peut être configuré sur 6.

15

Facultatif. Par défaut, il est 0 mais peut être configuré sur 7.

16

S’il est vide, il sera authentifié avec l’utilisateur par défaut.

17

S’il est utilisé, la clé doit être <REDIS_PASSWORD>.

18

Pour stocker toutes les images, les métadonnées et les analyses, assurez-vous que les paramètres relatifs à la persistance (Paramètres de persistance) sont correctement configurés.

C Licence de Documentation Libre GNU

Mention de copyright © 2000, 2001, 2002 Free Software Foundation, Inc. 51 Franklin St, Cinquième étage, Boston, MA 02110-1301 USA. Toute personne est autorisée à copier et à distribuer des copies exactes de ce document de licence, mais toute modification est interdite.

C1 0. PRÉAMBULE

La présente Licence a pour but de rendre un manuel, un livre scolaire ou tout autre document fonctionnel et utile « libre » au sens de la liberté: garantir à chacun la liberté effective de le copier et de le redistribuer, avec ou sans modification, à des fins commerciales ou non commerciales. En second lieu, cette Licence préserve pour l’auteur et l’éditeur un moyen d’obtenir le crédit pour leur travail, tout en n’étant pas considérés comme responsables des modifications apportées par d’autres.

Cette Licence est une sorte de « copyleft », ce qui signifie que les œuvres dérivées du document doivent elles-mêmes être libres dans le même sens. Elle complète la Licence publique générale GNU, qui est une licence copyleft conçue pour les logiciels libres.

Nous avons conçu cette Licence afin qu’elle soit utilisée pour les manuels de logiciels libres, car les logiciels libres ont besoin d’une documentation libre: un programme libre doit être accompagné de manuels offrant les mêmes libertés que le logiciel. Mais cette Licence ne se limite pas aux manuels de logiciels; elle peut être utilisée pour tout travail textuel, quel qu’en soit le sujet et qu’il soit ou non publié sous forme de livre imprimé. Nous recommandons cette Licence principalement pour les travaux dont l’objectif est l’instruction ou la référence.

C2 1. DOMAINE D’APPLICATION ET DÉFINITIONS

Cette Licence s’applique à tout manuel ou à tout autre travail, sur tout support, contenant une notification placée par le propriétaire du droit d’auteur indiquant qu’il peut être distribué conformément aux termes de cette Licence. Une telle notification accorde une licence mondiale, libre de droits et de durée illimitée, pour utiliser ce travail conformément aux conditions énoncées ici. Le « Document », ci-dessous, fait référence à tout manuel ou travail de ce type. Tout membre du public est un détenteur de licence, et est désigné par l’appellation « Vous ». Vous acceptez la licence si vous copiez, modifiez ou distribuez le travail d’une manière nécessitant une autorisation selon la loi sur le droit d’auteur.

Une « Version Modifiée » du Document désigne tout travail contenant le Document ou une partie de celui-ci, soit copié mot pour mot, soit avec des modifications et/ou traduit dans une autre langue.

Une « Section Secondaire » est une annexe nommée ou une section liminaire du Document qui traite exclusivement de la relation des éditeurs ou des auteurs du Document au sujet global du Document (ou à des sujets connexes) et ne contient rien qui pourrait relever directement de ce sujet global. (Ainsi, si le Document est en partie un manuel de mathématiques, une Section Secondaire ne peut contenir aucune explication mathématique.) La relation pourrait être une question de connexion historique avec le sujet ou avec des questions connexes, ou de position légale, commerciale, philosophique, éthique ou politique les concernant.

Les « Sections Invariantes » sont certaines Sections Secondaires dont les titres sont désignés, comme étant ceux de Sections Invariantes, dans la notification indiquant que le Document est publié sous cette Licence. Si une section ne correspond pas à la définition ci-dessus de Secondaire, elle ne peut pas être désignée en tant qu’Invariante. Le Document peut ne contenir aucune Section Invariante. Si le Document n’identifie aucune Section Invariante, il n’y en a aucune.

Les « Textes de Couverture » sont certains courts passages de texte qui sont listés, en tant que Textes de la Première de Couverture ou Textes de la Dernière de Couverture, dans la notification indiquant que le Document est publié sous cette Licence. Un Texte de la Première de Couverture peut comporter au maximum 5 mots, et un Texte de la Dernière de Couverture peut comporter au maximum 25 mots.

Une copie « Transparente » du Document signifie une copie lisible par machine, représentée dans un format dont la spécification est disponible pour le grand public, qui est adaptée à la révision directe du document avec des éditeurs de texte génériques ou (pour les images composées de pixels) des programmes de peinture génériques ou (pour les dessins) certains éditeurs de dessin largement disponibles, et qui est adaptée à l’entrée dans des formateurs de texte ou pour la traduction automatique dans une variété de formats adaptés à l’entrée dans des formateurs de texte. Une copie réalisée dans un format de fichier autrement Transparent dont le balisage, ou l’absence de balisage, a été organisé pour déjouer ou décourager la modification ultérieure par les lecteurs n’est pas Transparente. Un format d’image n’est pas Transparent s’il est utilisé pour une quantité substantielle de texte. Une copie qui n’est pas « Transparente » est appelée « Opaque ».

Les exemples de formats adaptés aux copies Transparentes incluent l’ASCII standard sans balisage, le format de saisie Texinfo, le format de saisie LaTeX, le SGML ou XML utilisant un DTD publiquement disponible, et le HTML simple conforme à la norme, le PostScript ou le PDF conçus pour la modification par l’homme. Les exemples de formats d’image transparents incluent PNG, XCF et JPG. Les formats Opaques incluent les formats propriétaires qui ne peuvent être lus et modifiés que par des traitements de texte propriétaires, le SGML ou XML pour lesquels les outils de DTD et/ou de traitement ne sont généralement pas disponibles, et le HTML, PostScript ou PDF généré par machine produit par certains traitements de texte uniquement à des fins de sortie.

La « Page de titre » signifie, pour un livre imprimé, la page de titre elle-même, plus les pages suivantes nécessaires pour contenir, lisiblement, les informations que cette Licence exige de faire apparaître dans la page de titre. Pour les œuvres dans des formats qui n’ont pas de page de titre en tant que telle, la « Page de titre » signifie le texte près de l’apparence la plus proéminente du titre de l’œuvre, précédant le début du corps du texte.

Une section « Intitulée XYZ » signifie une sous-unité nommée du Document dont le titre est soit précisément XYZ, soit contient XYZ entre parenthèses à la suite du texte qui traduit XYZ dans une autre langue. (Ici, XYZ représente un nom de section spécifique mentionné ci-dessous, tel que « Remerciements », « Dédicaces », « Recommandations » ou « Historique ».) Pour « Conserver le Titre » d’une telle section lorsque vous modifiez le Document, cela signifie qu’il reste une section « Intitulée XYZ » conformément à cette définition.

Le Document peut inclure des Limitations de Garantie à côté de la notification indiquant que cette Licence s’applique au Document. Ces Limitations de Garantie sont considérées comme étant incluses par référence dans cette Licence, mais uniquement en ce qui concerne le refus de garanties: toute autre implication que ces Limitations de Garantie pourraient avoir est nulle et n’a aucun effet sur la signification de cette Licence.

C3 2. COPIE MOT POUR MOT

Vous pouvez copier et distribuer le Document sur n’importe quel support, commercialement ou non, à condition que cette Licence, les mentions de copyright, et la mention de copyright indiquant que cette Licence s’applique au Document soient reproduites dans toutes les copies, et que vous n’ajoutiez aucune autre condition à celles de cette Licence. Vous ne pouvez pas utiliser de mesures techniques pour empêcher ou contrôler la lecture ou la copie ultérieure des copies que vous effectuez ou distribuez. Toutefois, vous pouvez accepter une compensation en échange des copies. Si vous distribuez un nombre suffisant de copies, vous devez également respecter les conditions énoncées à la section 3.

Vous pouvez également prêter des copies, sous les mêmes conditions indiquées ci-dessus, et vous pouvez afficher des copies publiquement.

C4 3. COPIE EN QUANTITÉ

Si vous publiez des copies imprimées (ou des copies sur un support ayant des couvertures imprimées) du Document, avec une numérotation supérieure à 100, et que la mention de licence du Document exige des Textes de Couverture, vous devez inclure les copies dans des couvertures portant, clairement et de façon lisible, tous ces Textes de Couverture: Textes de la Première de Couverture sur la première de couverture, et Textes de la Dernière de Couverture sur la dernière de couverture. Les deux couvertures doivent également vous identifier clairement et de façon lisible comme l’éditeur de ces copies. La première de couverture doit présenter le titre complet, tous les mots de ce titre étant également lisibles et visibles. Vous pouvez également ajouter des informations aux couvertures. La copie avec des modifications limitées aux couvertures, tant qu’elles préservent le titre du Document et respectent ces conditions, peut être considérée comme une copie mot pour mot dans ses autres aspects.

Si les textes requis pour l’une ou l’autre des couvertures sont trop volumineux pour tenir de façon lisible, vous devez placer les premiers (autant qu’il en tient raisonnablement) sur la couverture réelle, et continuer le reste sur les pages adjacentes.

Si vous publiez ou distribuez des copies Opaques du Document avec une numérotation supérieure à 100, vous devez inclure une copie Transparente lisible en machine avec chaque copie Opaque, ou indiquer dans ou avec chaque copie Opaque un emplacement de réseau informatique auquel le public utilisant le réseau peut accéder pour télécharger, en utilisant des protocoles réseau publics standard, une copie Transparente complète du Document, sans informations supplémentaires. Si vous choisissez cette dernière option, vous devez prendre des mesures raisonnablement prudentes, dès le début de la distribution en grande quantité de copies Opaques, afin de garantir que cette copie Transparente restera accessible à l’emplacement indiqué pendant au moins un an après la dernière distribution d’une copie Opaque (directement ou par l’intermédiaire de vos agents ou distributeurs) de cette édition au public.

Il est demandé, mais pas obligatoire, de contacter les auteurs du Document bien avant de redistribuer un grand nombre de copies, pour leur permettre de vous en fournir une version actualisée.

C5 4. MODIFICATIONS

Vous pouvez copier et distribuer une Version Modifiée du Document conformément aux conditions des sections 2 et 3 ci-dessus, pourvu que vous diffusiez la Version Modifiée en respectant précisément cette Licence, la Version Modifiée jouant le rôle du Document, accordant ainsi la licence de distribution et de modification de la Version Modifiée à quiconque en possède une copie. En outre, vous devez procéder de la façon suivante dans la Version Modifiée:

  1. Utiliser dans la Page de Titre (et sur les couvertures le cas échéant) un titre distinct de celui du Document et de ceux des versions précédentes (qui devraient être répertoriés dans la section Historique du Document). Vous pouvez utiliser le même titre qu’une version précédente si l’éditeur d’origine de cette version vous en donne l’autorisation.

  2. Indiquer sur la Page de Titre, en tant qu’auteurs, une ou plusieurs personnes ou entités responsables de la paternité des modifications de la Version Modifiée, ainsi qu’au moins cinq des principaux auteurs du Document (tous ses principaux auteurs, s’ils sont moins de cinq), sauf s’ils vous dispensent de cette obligation.

  3. Indiquer sur la Page de Titre le nom de l’éditeur de la Version Modifiée, en tant qu’éditeur.

  4. Conserver toutes les mentions de copyright du Document.

  5. Ajouter une mention de copyright appropriée pour vos modifications à côté des autres mentions de copyright.

  6. Inclure, immédiatement après les mentions de copyright, une mention de licence donnant au public l’autorisation d’utiliser la Version Modifiée conformément aux termes de cette Licence, sous la forme indiquée dans l’Addendum ci-dessous.

  7. Conserver dans cette mention de licence la liste complète des Sections Invariantes et des Textes de Couverture fournie dans la mention de licence du Document.

  8. Inclure une copie non modifiée de cette Licence.

  9. Conserver la section intitulée « Historique », conserver son Titre, et lui ajouter un élément indiquant au moins le titre, l’année, les nouveaux auteurs et l’éditeur de la Version Modifiée comme indiqué dans la Page de Titre. S’il n’existe pas de section intitulée « Historique » dans le Document, créez-en une qui mentionne le titre, l’année, les auteurs et l’éditeur du Document comme indiqué dans sa Page de Titre, puis ajoutez un élément décrivant la Version Modifiée comme indiqué dans la phrase précédente.

  10. Conserver l’emplacement réseau, le cas échéant, fourni dans le Document pour l’accès public à une copie Transparente du Document, ainsi que les emplacements réseau fournis dans le Document pour les versions précédentes sur lesquelles il était basé. Ils peuvent être placés dans la section Historique. Vous pouvez omettre un emplacement réseau pour un travail qui a été publié au moins quatre ans avant le Document lui-même, ou si l’éditeur d’origine de la version à laquelle il fait référence donne son autorisation.

  11. Pour toute section intitulée « Remerciements » ou « Dédicaces », conserver le Titre de la section, et conserver dans la section toute la substance et le ton de chacun des remerciements et/ou dédicaces des contributeurs mentionnés.

  12. Conserver toutes les Sections Invariantes du Document, sans modifications de leurs textes ni de leurs titres. Les numéros de section ou leur équivalent ne sont pas considérés comme faisant partie des titres de section.

  13. Supprimer toute section intitulée « Recommandations ». Une telle section ne peut être incluse dans la Version Modifiée.

  14. Ne pas modifier le titre d’une section existante pour qu’elle soit intitulée « Endorsements » ou pour créer un conflit de titre avec une Section Invariante.

  15. Conserver les Limitations de Garantie.

Si la Version Modifiée comprend de nouvelles sections liminaires ou des annexes qui en font des Sections Secondaires et ne contiennent aucun matériel copié à partir du Document, vous pouvez, si vous le souhaitez, désigner certaines ou toutes ces sections comme invariantes. Pour ce faire, ajoutez leurs titres à la liste des Sections Invariantes dans la mention de licence de la Version Modifiée. Ces titres doivent être distincts de tout autre titre de section.

Vous pouvez ajouter une section intitulée « Endorsements », pourvu qu’elle ne contienne rien d’autre que des endorsements de votre Version Modifiée par différentes parties--, par exemple, des déclarations d’évaluation par des pairs ou indiquant que le texte a été approuvé par une organisation comme définition experte d’une norme.

Vous pouvez ajouter un passage pouvant atteindre cinq mots comme Texte de la Première de Couverture, et un passage pouvant atteindre vingt-cinq mots comme Texte de Dernière de Couverture, à la fin de la liste des Textes de Couverture de la Version Modifiée. Un seul passage de Texte de la Première de Couverture et de Texte de Dernière de Couverture peut être ajouté par (ou par l’intermédiaire d’accords effectués par) une entité quelconque. Si le Document inclut déjà un texte de couverture pour la même couverture, précédemment ajouté par vous ou par un accord effectué par l’entité pour le compte de laquelle vous agissez, vous ne pouvez pas en ajouter d’autre; mais vous pouvez remplacer l’ancien, avec l’autorisation explicite de l’éditeur qui avait ajouté l’ancien.

Le(s) auteur(s) et éditeur(s) du Document n’accordent pas par cette Licence l’autorisation d’utiliser leurs noms à des fins publicitaires ou pour revendiquer ou laisser entendre une approbation de toute Version Modifiée.

C6 5. COMBINAISON DE DOCUMENTS

Vous pouvez combiner le Document avec d’autres documents diffusés dans le cadre de cette Licence, conformément aux termes définis dans la section 4 ci-dessus pour les versions modifiées, pourvu que vous incluiez à la combinaison toutes les Sections Invariantes de tous les documents d’origine, non modifiés, et que vous les répertoriiez tous comme Sections Invariantes de votre travail combiné dans sa mention de licence, et que vous conserviez toutes ses Limitations de Garantie.

Le travail combiné ne doit contenir qu’une copie de cette Licence, et plusieurs Sections Invariantes identiques peuvent être remplacées par une seule copie. S’il existe plusieurs Sections Invariantes portant le même nom mais avec un contenu différent, rendez le titre de chacune de ces sections unique en ajoutant à la fin de celui-ci, entre parenthèses, le nom de l’auteur ou de l’éditeur d’origine de cette section s’il est connu, ou sinon un numéro unique. Effectuez le même ajustement aux titres des sections dans la liste des Sections Invariantes de la mention de licence du travail combiné.

Dans la combinaison, vous devez combiner les sections intitulées "Historique" des différents documents originaux, formant une section intitulée "Historique"; de même, combinez les sections intitulées "Remerciements" et les sections intitulées "Dédicaces". Vous devez supprimer toutes les sections intitulées « Recommandations ».

C7 6. ENSEMBLES DE DOCUMENTS

Vous pouvez réaliser un ensemble constitué du Document et d’autres documents diffusés sous cette Licence, et remplacer les copies individuelles de cette Licence dans les différents documents par une copie unique incluse dans l’ensemble, à condition de respecter les règles de cette Licence concernant la copie mot pour mot de chacun des documents dans tous leurs autres aspects.

Vous pouvez extraire un document unique d’un tel ensemble et le distribuer individuellement sous cette Licence, à condition d’insérer une copie de cette Licence dans le document extrait et de respecter cette Licence dans tous ses autres aspects concernant la copie mot pour mot de ce document.

C8 7. AGRÉGATION AVEC DES TRAVAUX INDÉPENDANTS

Une compilation du Document ou de ses dérivés avec d’autres documents ou travaux séparés et indépendants, dans ou sur un volume de stockage ou un support de distribution, est appelée une "agrégation" si le copyright résultant de la compilation n’est pas utilisé pour limiter les droits légaux des utilisateurs de la compilation au-delà de ce qu’autorisent les travaux individuels. Lorsque le Document est inclus dans une agrégation, cette Licence ne s’applique pas aux autres travaux de l’agrégation qui ne sont pas eux-mêmes des travaux dérivés du Document.

Si l’obligation relative au Texte de Couverture de la section 3 est applicable à ces copies du Document, alors si le Document est inférieur à la moitié de l’agrégation dans son ensemble, les Textes de Couverture du Document peuvent être placés sur les couvertures qui regroupent le Document au sein de l’agrégation, ou l’équivalent électronique des couvertures si le Document est sous forme électronique. Sinon, ils doivent apparaître sur les couvertures imprimées qui regroupent l’agrégation complète.

C9 8. TRADUCTION

La traduction étant considérée comme une sorte de modification, vous êtes autorisé à distribuer des traductions du Document conformément aux dispositions de la section 4. Le remplacement des Sections Invariantes par des traductions nécessite une autorisation spéciale de leurs détenteurs de droits d’auteur, mais vous pouvez inclure des traductions de certaines ou de toutes les Sections Invariantes en plus des versions originales de ces Sections Invariantes. Vous pouvez inclure une traduction de cette Licence, ainsi que toutes les mentions de licence dans le Document et toutes les Limitations de Garantie, à condition d’inclure également la version anglaise d’origine de cette Licence et les versions d’origine de ces mentions et limitations. En cas de désaccord entre la traduction et la version originale de cette Licence ou d’une mention ou d’une limitation, la version d’origine prévaudra.

Si une section du Document est intitulée "Remerciements", "Dédicaces" ou "Historique", l’obligation (section 4) de conserver son Titre (section 1) nécessitera généralement de changer le titre réel.

C10 9. RÉSILIATION

Vous ne pouvez copier, modifier, accorder une sous-licence ou distribuer le Document, sauf dans les cas expressément prévus par cette Licence. Toute autre tentative de copier, modifier, accorder une sous-licence ou distribuer le Document est nulle et met automatiquement fin à vos droits en vertu de cette Licence. Cependant, les parties qui ont reçu des copies ou des droits de votre part en vertu de cette Licence ne verront pas leurs licences résiliées tant qu’elles restent en pleine conformité.

C11 1. FUTURE RÉVISIONS DE CETTE LICENCE

La Free Software Foundation peut publier de temps à autre de nouvelles versions révisées de la Licence de Documentation Libre GNU. Ces nouvelles versions seront semblables en esprit à la version actuelle, mais peuvent différer dans les détails pour répondre à de nouveaux problèmes ou préoccupations. Reportez-vous à la https://www.gnu.org/copyleft/.

Chaque version de la Licence reçoit un numéro distinctif. Si le Document spécifie qu’une version numérotée particulière de cette Licence "ou toute version ultérieure" s’applique, vous avez la possibilité de suivre les termes et conditions de cette version spécifiée ou de toute version ultérieure qui a été publiée (non sous forme de brouillon) par la Free Software Foundation. Si le Document ne spécifie pas de numéro de version de cette Licence, vous pouvez choisir n’importe quelle version publiée (non sous forme de brouillon) par la Free Software Foundation.

C12 ADDENDUM : comment utiliser cette Licence pour vos documents

  Copyright (c) YEAR YOUR NAME.
  Permission is granted to copy, distribute and/or modify this document
  under the terms of the GNU Free Documentation License, Version 1.2
  or any later version published by the Free Software Foundation;
  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
  A copy of the license is included in the section entitled "GNU
  Free Documentation License".

Si vous avez des Sections Invariantes, des Textes de Première de Couverture et des Textes de Dernière de Couverture, remplacez la ligne « avec…​Textes. » par ceci:

  with the Invariant Sections being LIST THEIR TITLES, with the
  Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

Si vous avez des Sections Invariantes sans Textes de Couverture, ou une autre combinaison des trois, fusionnez ces deux alternatives pour vous adapter à la situation.

Si votre document contient des exemples non triviaux de code, nous vous recommandons de publier ces exemples en parallèle sous la licence de logiciel libre de votre choix, telle que la licence publique générale GNU, afin de permettre leur utilisation dans un logiciel libre.