|Index|Primeros pasos con SUSE Private Registry
SUSE Private Registry

Primeros pasos con 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 Colección de Aplicaciones

  • Supports SUSESeguridad 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 Introducción

1.1 ¿Qué es SUSE Private Registry?

SUSE Private Registry (Registro Privado) es un registro de contenedores in situ. Registro Privado está diseñado para clientes SUSE que necesitan un registro de contenedores que funcione bien con otros servicios y productos SUSE.

1.2 ¿Cuáles son los beneficios de SUSE Private Registry?

Registro Privado se basa en el proyecto Harbor e incluye todas sus características principales, así como beneficios adicionales. Por ejemplo:

  • Registro de contenedores in situ. Registro Privado es un registro de contenedores alojado localmente con acceso a servicios de registro SUSE en línea.

  • Seguridad. Registro Privado ofrece consideraciones de seguridad para entornos en contenedores. Incluye autenticación, autorización y escaneo de vulnerabilidades.

  • Flexibilidad en el despliegue. Puedes instalar Registro Privado en un entorno Kubernetes como SUSE Rancher Prime: RKE2. También puedes desplegar Registro Privado con una configuración de alta disponibilidad.

  • Gestión de usuarios. Registro Privado proporciona un mecanismo de autenticación y autorización con control de acceso basado en funciones (RBAC).

  • Interfaz de usuario. Además de una interfaz de línea de comandos, puedes administrar Registro Privado a través de la interfaz de usuario web.

1.3 ¿Cómo funciona SUSE Private Registry?

Registro Privado se entrega como contenedores Iniciativa de Contenedor Abierto (OCI) y se espera que se despliegue en un clúster Kubernetes. Registro Privado consiste en los siguientes contenedores:

  • harbor-core: el componente principal del registro Harbor, responsable de manejar funcionalidades centrales como la gestión de proyectos, repositorios e interacciones de usuarios.

  • harbor-db: el contenedor de base de datos que almacena todos los metadatos relacionados con imágenes, usuarios y configuraciones para el registro Harbor.

  • harbor-jobservice: un servicio que gestiona trabajos en segundo plano, como la replicación de imágenes y tareas programadas, asegurando un procesamiento eficiente de las operaciones dentro del registro.

  • harbor-nginx: el proxy inverso y equilibrador de carga que dirige las solicitudes entrantes a los servicios Harbor apropiados, proporcionando un único punto de entrada para los usuarios.

  • harbor-portal: la interfaz de usuario basada en web que permite a los usuarios interactuar con el registro Harbor, gestionar imágenes y configurar ajustes a través de una interfaz gráfica.

  • harbor-registry: el contenedor que sirve como el sistema secundario de almacenamiento de imágenes, manejando el almacenamiento y la recuperación de imágenes de contenedores.

  • harbor-registryctl: una herramienta de línea de comandos para gestionar el registro Harbor, permitiendo a los usuarios realizar tareas administrativas y configuraciones directamente desde la terminal.

  • harbor-trivy-adapter: un contenedor que integra el escáner de vulnerabilidades Trivy con Harbor, permitiendo el escaneo de seguridad automatizado de imágenes de contenedores en busca de vulnerabilidades.

  • harbor-exporter: el contenedor que exporta métricas Harbor en un formato que puede ser recogido por Prometheus para monitoreo y observabilidad.

  • harbor-valkey: un almacén de clave-valor en memoria.

Después del despliegue, puedes iniciar sesión a través de la interfaz de usuario web. Tras una autenticación y autorización exitosas, puedes configurar múltiples aspectos del producto, por ejemplo:

  • Configura configuración global, como establecer el registro en modo de solo lectura o restringir quién puede crear proyectos.

  • Selecciona un método de autenticación.

  • Añade usuarios cuando estés en modo de autenticación de base de datos y asigna el rol de administrador del sistema a otros usuarios.

  • Aplica cuotas de recursos a los proyectos.

  • Configura la replicación de imágenes entre instancias Registro Privado.

1.4 Información adicional

Consulta las siguientes fuentes para obtener más detalles:

2 Requisitos

Esta sección describe los requisitos mínimos de la plataforma y el tamaño de producción recomendado para SUSE Private Registry.

2.1 Requisitos previos

  • Un clúster Kubernetes versión 1.20 o superior

  • Helm Versión 3.2.0 o superior

  • Soporte para el aprovisionador de Volumen Persistente (PV) en su infraestructura

  • Una suscripción activa para SUSE Private Registry

2.2 Recomendaciones de hardware y tamaño

Utiliza estos valores como punto de partida para la producción. Ajusta según la política de retención, la rotación de imágenes, la concurrencia de escaneo y el tráfico de replicación. ==== Línea base del clúster

ÁmbitoPunto de partida recomendado

Nodos de trabajo

Mínimo 3 nodos de trabajo

Forma del nodo

Mínimo 4 vCPU y 16 GiB de RAM por nodo

Forma de nodo preferida

8 vCPU y 32 GiB de RAM por nodo para una mayor concurrencia en el escaneo y en el push

Estas recomendaciones se alinean con la guía de Rancher para RKE2 Kubernetes. Para más detalles, consulta Requisitos de instalación de RKE2 Kubernetes.

2.2.1 Línea base de almacenamiento persistente

ComponenteTamaño de gráfico predeterminadoTamaño inicial recomendado

Datos del registro

5 Gi

500 Gi a 1 Ti

Caché y base de datos de Trivy

5 Gi

20 Gi a 50 Gi

Registros de Jobservice

1 Gi

10 Gi

PostgreSQL interno (si se utiliza)

1 Gi

20 Gi como mínimo

Valkey interno (si se utiliza)

1 Gi

20 Gi como mínimo

Los valores predeterminados del gráfico están orientados a la instalación y no deben utilizarse como valores de capacidad de producción a largo plazo.

3 Instalación utilizando la interfaz Rancher

Para instalar SUSE Private Registry utilizando la interfaz Rancher, debes cumplir con los siguientes requisitos y seguir los pasos a continuación.

3.1 ¿Qué requisitos necesito cumplir?

  • Un entorno con un cluster Kubernetes soportado en funcionamiento y Rancher desplegado. Consulta los requisitos de instalación de Rancher para más detalles.

  • Credenciales de SUSE Registro para una cuenta con una suscripción a SUSE Private Registry (un nombre de usuario y una contraseña/token). Consulta Obteniendo secretos de Kubernetes desde SCC para más detalles.

3.2 ¿Cuáles son los pasos para instalar SUSE Private Registry utilizando la interfaz Rancher?

PASO 1: Indica a Rancher dónde se encuentra el repositorio SUSE Private Registry para buscar el chart de instalación.
  1. Inicia sesión en Rancher.

  2. Haz clic en el menú de tres líneas (☰) en la esquina superior izquierda, selecciona Gestión de Clústeres, y haz clic en el nombre de tu clúster, que suele ser local.

  3. Desde el menú de la izquierda, selecciona Apps › Repositorios.

  4. Haz clic en el botón Crear en la parte superior derecha y completa el formulario que se abre:

    1. Destino: Selecciona Repositorio OCI.

    2. Nombre: Introduce un nombre para el repositorio, como SUSE Private Registry.

    3. Descripción: Opcionalmente, añade una descripción del repositorio.

    4. URL del Host del Repositorio OCI: Enter `oci://registry.suse.com/private-registry/private-registry-helm`.

    5. Autenticación: Cambia a Create an HTTP Basic Auth Secret e introduce el nombre de usuario y la contraseña de las credenciales del registro.

  5. Confirma con Crear.

Una captura de pantalla que muestra cómo añadir un SUSE Private Registry repositorio a Rancher
Figure 3.1: Añadiendo un SUSE Private Registry repositorio
PASO 2: Crea un secreto para acceder a las imágenes en el `registry.suse.com`.
  1. Haz clic en el menú de tres líneas (☰) en la esquina superior izquierda y selecciona Gestión de Clústeres.

  2. Cambia al clúster al que deseas añadir el secreto y haz clic en Explorar.

  3. Para navegar a la gestión de secretos, selecciona Almacenamiento › Secretos y haz clic en Crear en la parte superior derecha.

  4. Selecciona el secreto HTTP Basic Auth y luego el espacio de nombres private-registry.

  5. Introduce suse-registry como el nombre del secreto.

  6. Rellena los campos username y password con las credenciales SUSE obtenidas en Section 3.1, “¿Qué requisitos necesito cumplir?”.

Una captura de pantalla que muestra cómo añadir SUSE Private Registry secretos a Rancher
Figure 3.2: Añadiendo SUSE Private Registry secretos
PASO 3: Instala el Helm chart.
  1. Desde el menú principal de la izquierda, selecciona Apps › Charts.

  2. Introduce el nombre del SUSE Private Registry repositorio asignado en el cuadro de búsqueda. Por ejemplo, SUSE Private Registry. Si no aparece en la lista, haz clic en Actualizar todos los repositorios.

  3. Haz clic en el chart y visualiza el README.md.

  4. Opcionalmente, puedes personalizar los valores de instalación. Puedes hacer clic en las secciones del lado izquierdo del panel Edit Options para ver todos los valores que puedes configurar, o editar los valores directamente en el archivo YAML del chart.

  5. En la esquina superior derecha, haz clic en Instalar esta versión.

Una captura de pantalla que muestra la pantalla de instalación de SUSE Private Registry en Rancher
Figure 3.3: Instalación SUSE Private Registry

4 Instalación utilizando la línea de comando

Los siguientes procedimientos describen cómo desplegar SUSE Private Registry (Registro Privado) en un clúster Kubernetes.

4.1 Obtención de secretos de Kubernetes desde el SUSE Centro de servicios al cliente

Para descargar e instalar las imágenes de Registro Privado desde SUSE Registro, necesitas un secreto Kubernetes con las credenciales de espejo SUSE Centro de servicios al cliente (SCC). Para obtener las credenciales de SCC, sigue estos pasos:

  1. Visita SUSE Centro de servicios al cliente en https://scc.suse.com e inicia sesión.

  2. Selecciona la organización con una suscripción Registro Privado activa en la barra lateral izquierda.

  3. Selecciona Proxies en el menú superior. Las credenciales se muestran en la esquina superior derecha.

  4. Para ver la contraseña, haz clic en el icono de 'ojo'.

  5. Crea un archivo password.txt que contenga la contraseña obtenida.

    >head -1 ./password.txt | helm registry login registry.suse.com \
      --username <PRIVATE_REGISTRY_USERNAME> --password-stdin
  6. Crea un espacio de nombres para SUSE Registro.

    >kubectl create namespace <PRIVATE_REGISTRY_NAMESPACE>
  7. Almacena las credenciales de espejo recuperadas de SCC como secretos Kubernetes ejecutando el siguiente comando:

    >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. Opcionalmente, para utilizar comunicación cifrada TLS, crea un secreto TLS a partir de tus archivos de clave privada y certificado.

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

4.2 Instalando y ejecutando Registro Privado utilizando Helm

El siguiente procedimiento describe cómo instalar Registro Privado utilizando Helm. Reemplaza <RELEASE_NAME> con tu nombre de lanzamiento personalizado para la ampliación del gráfico Helm.

  1. Inicia sesión en SUSE Registro utilizando las credenciales de espejo SCC obtenidas.

    >head -1 ./password.txt | helm registry login registry.suse.com \
      --username <SUSE_REGISTRY_USERNAME> --password-stdin
  2. Instala la última versión del gráfico Registro Privado Helm.

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

    Cuando instales el gráfico Registro Privado Helm, mostrará la siguiente salida:

    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)

    Con la versión 4 de Helm, puedes usar un digest para especificar el gráfico a instalar:

    >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
  • Para obtener la contraseña del usuario administrador, también puedes ejecutar el siguiente comando:

    >kubectl get secret \
      --namespace <PRIVATE_REGISTRY_NAMESPACE> \
      --harbor-core <RELEASE_NAME> \
      -o jsonpath="{.data.HARBOR_ADMIN_PASSWORD}" | base64 -d; echo
  • Es posible usar el watcher de kstatus con la bandera '--wait=watcher' para asegurarte de que todos los objetos estén listos para finalizar la instalación. Usar el watcher puede hacer que el comando tarde más.

Para anular la instalación predeterminada con valores personalizados del archivo suse_registry_override.yaml, consulta Appendix A, Sobrescribiendo el gráfico SUSE Private Registry Helm.

El comando comienza a desplegar varios contenedores relacionados y puede tardar varios minutos en completarse. También imprime un mensaje con la URL del portal web Registro Privado y comandos para obtener las credenciales del administrador.

4.3 Actualizando Registro Privado

Para actualizar la versión del gráfico Helm a una versión más reciente específica, ejecuta el siguiente comando:

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

El digest solo es posible con la versión 4 de Helm.

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

5 Alta disponibilidad configuración

Puedes usar Helm para desplegar el Registro Privado altamente disponible (HA) en un clúster Kubernetes. El Configuración de alta disponibilidad garantiza que los usuarios no experimenten interrupciones del servicio si uno de los nodos en los que se ejecuta Registro Privado se vuelve inaccesible.

5.1 Arquitectura del Configuración de alta disponibilidad

La mayoría de los componentes del Registro Privado son ahora sin estado. Por lo tanto, podemos escalarlos aumentando las réplicas de pod, asegurando que se ejecuten en múltiples nodos de trabajo. Los servicios Kubernetes aseguran la conectividad entre pods.

Para el almacenamiento, los usuarios deben proporcionar un PostgreSQL HA y un clúster Valkey o Redis para los datos de la aplicación, junto con PVCs o almacenamiento de objetos para almacenar imágenes y gráficos.

image::private-registry-ha.png[Registro Privado Configuración de alta disponibilidad, width=100%]. Registro Privado Configuración de alta disponibilidad Kubernetes clúster con Ingress en Configuración de alta disponibilidad usando HA PostgreSQL y HA Valkey.

5.2 Requisitos previos

  • Un clúster Kubernetes versión 1.20 o superior

  • Helm versión 3.2.0 o superior

  • Controlador HA Ingress (Registro Privado no gestiona el punto final externo)

  • HA PostgreSQL 9.6+ (Registro Privado no gestiona la ampliación de la base de datos HA)

  • HA Valkey o Redis (Registro Privado no gestiona la ampliación de HA Valkey o Redis)

  • Reclamación de Volumen Persistente (PVC) que puede ser compartida entre nodos o almacenamiento de objetos externo

  • Una suscripción activa para SUSE Private Registry

5.3 Desplegando Registro Privado con HA

  1. Descargar el gráfico Registro Privado 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, Ejemplo de un gráfico de Registro Privado configuración de HA Helm for an example Helm chart for Registro Privado HA setup. Refer to Appendix A, Sobrescribiendo el gráfico SUSE Private Registry Helm for a complete list of values to specify or override.

  3. Install the Registro Privado Helm chart. Replace <RELEASE_NAME> with your custom release name for the Helm chart deployment.

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

6 Configurar Rancher como un Proveedor de Identidad OIDC

Esta guía explica cómo configurar Rancher para actuar como un Proveedor de Identidad OIDC, permitiendo a los usuarios autenticarse en aplicaciones externas como SUSE Private Registry utilizando sus credenciales de Rancher.

6.1 Paso 1: Habilitar la bandera de característica oidc-provider

  1. Inicia sesión en la interfaz de usuario de Rancher como administrador.

  2. Haz clic en el menú de tres líneas (☰) en la parte superior izquierda y ve a Configuración Global › Banderas de características.

  3. Encuentra la bandera oidc-provider, haz clic en el icono de Más Acciones (⋮) y haz clic en Activar.

Configurar Rancher como un Proveedor de Identidad OIDC

6.2 Paso 2: Crear un recurso OIDCClient

Rancher utiliza un recurso personalizado OIDCClient para registrar aplicaciones en sentido descendente.

  1. Crea un archivo llamado rancher-oidc-client.yaml con el siguiente contenido:

    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. Aplica el archivo al clúster donde se está ejecutando Rancher:

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

6.3 Paso 3: Recupera el ID de Cliente y el Secreto

Una vez que se crea el recurso, Rancher completa automáticamente el clientID y provisiona un Secreto Kubernetes que contiene el clientSecret.

  1. Obtén el ID de Cliente generado:

    >kubectl get oidcclient spr-client -o jsonpath="{.status.clientID}"
  2. Obtén el Secreto de Cliente. Recuerda reemplazar <YOUR_CLIENT_ID> con el ID recuperado en el paso anterior:

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

6.4 Paso 4: Configurar SUSE Private Registry

Puedes configurar SUSE Private Registry para usar Rancher como su proveedor OIDC pasando los valores a través de Helm. Usa el bloque core.configureUserSettings en tu configuración de values-oidc.yaml.

Lo siguiente es un bloque de ejemplo utilizando tu endpoint de Rancher y las credenciales recuperadas arriba. Reemplaza los valores de <YOUR_CLIENT_ID> y <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

Asegúrate de que oidc_verify_cert esté configurado en false si tu instancia de Rancher está utilizando certificados autofirmados. Al especificar oidc_admin_group, cualquier usuario Rancher que pertenezca al grupo spr-admins recibirá automáticamente privilegios de administrador del sistema en SUSE Private Registry.

7 Preguntas frecuentes

7.1 Descripción del producto y diferenciadores

¿Qué tipo de suscripción necesitan los clientes para SUSE Private Registry?

Está incluido en Rancher Suite y se ofrece como complemento para Rancher Prime.

El precio del complemento es el mismo que el de otros complementos.

¿Cuáles son los diferenciadores con Harbor (de la Colección de Aplicaciones o de upstream)?

Usa SUSE Private Registry si necesitas:

  • Soporte de nivel 3 (L3) para problemas de producto.

  • Un ciclo de lanzamiento predecible.

  • Imágenes parcheadas para vulnerabilidades conocidas. Las imágenes de Harbor de upstream Docker Hub a menudo contienen numerosas vulnerabilidades no parcheadas.

    Con el tiempo, SUSE también añadirá integraciones listas para usar con Rancher y priorizará las solicitudes de características de los clientes.

¿Tienen que comprar los clientes el mismo número de suscripciones de complemento SUSE Private Registry que suscripciones de Rancher Prime?

Sí, al igual que otros complementos como SUSE Security. Una ventaja adicional del modelo de suscripción de SUSE Private Registry es que permite a los clientes ejecutar tantos despliegues como necesiten.

7.2 Relación con upstream Harbor

¿Cómo se alinea el ciclo de lanzamiento con upstream Harbor?

El ciclo de lanzamiento de SUSE Private Registry es independiente del ciclo de lanzamiento de upstream Harbor.

Al lanzar nuevas versiones de SUSE Private Registry, SUSE tiene como objetivo incluir la última versión del proyecto upstream Harbor que cumpla con los requisitos de aseguramiento de calidad y mantenimiento de SUSE.

¿Publicaréis consideraciones de migración para los clientes que ejecutan Harbor de otras fuentes?

No en este momento.

7.3 Despliegue e instalación

¿Sois compatibles con la instalación de SUSE Private Registry a través de docker-compose?

No. Debéis instalar y configurar SUSE Private Registry utilizando su gráfico Helm. Este gráfico también se utiliza para la gestión continua (operaciones del Día 2) y puede integrarse con flujos de trabajo de GitOps.

¿Recomendáis despliegues en el clúster local (Rancher Manager)?

No. SUSE recomienda desplegar SUSE Private Registry en un clúster descendente. Esto hace que el registro sea accesible para otros clústeres descendentes que necesiten consumir imágenes.

¿Cuáles son las mejores prácticas de despliegue para un entorno de alta disponibilidad (HA)?

Para HA, no despleguéis SUSE Private Registry en el clúster de gestión Rancher para evitar la contención de recursos.

Podéis desplegar SUSE Private Registry en un clúster dedicado, o en uno o más de vuestros clústeres de aplicación.

Para obtener instrucciones, consultad Chapter 5, Alta disponibilidad configuración. Ten en cuenta que debéis proporcionar vuestros propios componentes de HA para la base de datos Postgres, el servidor Valkey o Redis, y el controlador Ingress. Estos componentes no son desplegados por el gráfico SUSE Private Registry Helm y no son soportados por SUSE.

¿Se añadirá eventualmente el gráfico SUSE Private Registry Helm a la Colección de Aplicaciones?

Sí, SUSE planea publicar el gráfico allí en el futuro.

¿Proporcionáis un operador de Kubernetes?

SUSE Private Registry no se entrega con un operador dedicado. Se instala y gestiona utilizando su gráfico Helm, que puede integrarse con GitOps. SUSE sigue evaluando la gestión basada en operadores para futuras versiones.

7.4 Seguridad, escaneo y firma

¿Integráis alguna herramienta de firma dentro de SUSE Private Registry?

SUSE Private Registry no firma imágenes por sí mismo, pero puede almacenar, distribuir y verificar firmas compatibles con la Open Container Initiative (OCI).

Una herramienta ampliamente utilizada es cosign, que puede firmar imágenes y almacenar las firmas en SUSE Private Registry.

Las firmas de cosign adjuntas a las imágenes son visibles y descargables desde el portal SUSE Private Registry.

¿Es posible firmar imágenes con Notary o Cosign para su aprobación durante el proceso de despliegue?

SUSE Private Registry puede almacenar, distribuir y verificar firmas de cosign.

SUSE Private Registry no firma imágenes por sí mismo. Debéis firmar las imágenes durante su proceso de construcción y luego subir la firma al registro junto con la imagen.

Notary no está incluido ni es compatible con SUSE Private Registry.

¿Se escanean las imágenes en busca de Vulnerabilidades y Exposiciones Comunes (CVEs) solo con Trivy, o también puede utilizar SUSE Security (NeuVector)?

Las imágenes se escanean con Trivy, que viene de serie. SUSE Security se puede añadir además de o como reemplazo de Trivy.

¿Es posible ejecutar ClamAV o escaneos de malware similares?

Por defecto, SUSE Private Registry escanea imágenes utilizando Trivy. También podéis configurar SUSE Security (NeuVector) como un escáner.

En el escenario de caché de pull-through, ¿se aplicarán los criterios de vulnerabilidad?

Sí, pero con una limitación conocida. Debido a Harbor problemas en upstream, los criterios de vulnerabilidad no se aplican en el primer pull de una imagen porque el escaneo aún no se ha completado.

Para una cobertura completa, emparejad SUSE Private Registry con SUSE Security controles de admisión.

¿Están endurecidas las imágenes de SUSE Private Registry?}}

Sí. Las imágenes de contenedor para SUSE Private Registry están endurecidas. Se basan en las Imágenes de Contenedor Base de SUSE Linux Enterprise (SLE BCI) y se construyen en el mismo Servicio de Construcción de SUSE de nivel empresarial utilizado para SUSE Linux Enterprise. Esto asegura un sistema de suministro seguro. Las imágenes también están firmadas, y SUSE publica sus atestaciones de Niveles de Sistema de Suministro para Artefactos de Software (SLSA).

¿Están firmadas las imágenes de SUSE Private Registry? ¿Cómo?

Las imágenes están firmadas con cosign. Puedes verificarlas guardando la clave de firma en formato PEM publicada en KB 000021411.

Luego ejecuta, por ejemplo:

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

7.5 Replicación y sincronización

¿Hay un plan para un complemento que sincronice con SUSE Registro y SUSE Colección de Aplicaciones?

Sí, se planea tal función.

¿Ofrece SUSE Private Registry replicación multi-sitio?

Sí. SUSE Private Registry soporta replicación de imágenes multi-sitio basada en directivas (pull y push). Puedes sincronizar imágenes a través de múltiples despliegues de SUSE Private Registry mientras mantienes cada registro independiente.

7.6 Características e integración con Rancher

¿Hay un plan para integrar el Registro dentro de Rancher utilizando una Extensión?

Sí. SUSE planea una integración más profunda con Rancher Prime y otras ofertas. Las mejoras futuras que se están considerando incluyen la integración de inicio de sesión único (SSO), configuración simplificada para escáneres de SUSESeguridad y espejado de Colección de Aplicaciones, monitoreo con SUSE Observabilidad, y una extensión de interfaz de usuario Rancher.

¿Añadirá SUSE el Registro al Catálogo de Formación?

Esto aún no está planeado. Si estás interesado en material de formación, contacta con SUSE para discutir posibilidades con el equipo de Formación.

7.7 Soporte y documentación

¿Hay una directiva de soporte para SUSE Private Registry?

Sí. La directiva de soporte de SUSE Private Registry es la misma que la de cualquier otro complemento de Rancher Prime.

Si la documentación de SUSE Private Registry carece de información, ¿puedo referirme a la documentación oficial de Harbor?

Sí. Dado que SUSE Private Registry se basa en Harbor, la documentación oficial de Harbor es un recurso útil. Para características específicas de la versión de SUSE, consulta la documentación de SUSE Private Registry.

El Release notes especifica qué versión de upstream Harbor corresponde a tu versión de SUSE Private Registry.

8 Solución de problemas

Esta sección proporciona soluciones a problemas que puedes encontrar al desplegar o utilizar SUSE Private Registry.

Estoy encontrando el error 401 unauthorized al intentar instalar SUSE Private Registry.

La versión completa del mensaje de error es la siguiente:

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]]

Para instalar y utilizar SUSE Private Registry, necesitas lo siguiente:

  • Una suscripción cualificada que incluya este producto, como una suscripción a Rancher Suite o una suscripción a SUSE Private Registry complemento. Si no tienes una suscripción cualificada, contacta a tu representante de SUSE.

  • Inicia sesión en SUSE Registro con Helm utilizando las credenciales de espejo de SCC de la organización SCC que posee la suscripción. Consulta Section 4.1, “Obtención de secretos de Kubernetes desde el SUSE Centro de servicios al cliente” para obtener más información.

A Sobrescribiendo el gráfico SUSE Private Registry Helm

El gráfico SUSE Private Registry (Registro Privado) Helm se entrega con valores por defecto. Puedes ajustar la instalación del gráfico Helm de una de las siguientes maneras:

  • Añade parámetros específicos a las banderas --set en la línea de comandos helm install, por ejemplo:

    $ 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 Ejemplos de archivos de sobrescritura SUSE Registro Helm

Example A1: Ampliación mínima con 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

Cómo se expone SUSE Registro. Puede ser ingress, loadBalancer, nodePort o clusterIPhis. El valor por defecto es ingress.

2

Nombre de host para la configuración de red interna del Kubernetes.

3

URL donde se ejecuta la aplicación SUSE Registro. Se utiliza para generar enlaces en la interfaz de usuario, redirecciones y también para respuestas de API.

4

La contraseña del administrador para la aplicación.

Example A2: Ampliación típica con loadBalancer.
exponer:
  tipo: equilibradorDeCarga 1
  tls:
    habilitado: verdadero
    fuenteCertificado: secreto 2
    secreto:
      nombreSecreto: <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

Cómo se expone SUSE Registro. Puede ser ingress, loadBalancer, nodePort o clusterIP. El valor por defecto es ingress.

2

Puede ser auto, secret o none. Dependiendo de la opción, puede que tengas que incluir valores adicionales.

3

Al utilizar cifrado TLS, este campo debe coincidir con el valor externalURL.

4

URL donde se ejecuta la aplicación SUSE Registro. Se utiliza para generar enlaces en la interfaz de usuario, redirecciones y también para respuestas de API.

5

La contraseña del administrador para la aplicación.

A2 Sobrescribiendo los parámetros y valores del gráfico Helm

Las siguientes tablas enumeran todos los parámetros con descripciones que puedes usar para sobrescribir los valores de instalación por defecto.

Parámetros globales
global.imageRegistry

Establece una sobrescritura global para el registro de imágenes del contenedor utilizado para todas las imágenes.

global.imagePullSecrets

Establece secretos de acceso globales para acceder al registro de imágenes del contenedor.

Parámetros comunes
harborAdminPassword

Establece la contraseña inicial para el administrador de Harbor. Cámbiala desde el portal después de la ampliación. El valor por defecto es Harbor12345.

externalURL

Especifica la URL externa para el servicio harbor-core. El valor por defecto es https://core.harbor.domain.

existingSecretAdminPasswordKey

Establece el nombre de la clave en el secreto que contiene la contraseña del administrador de Harbor. El valor por defecto es HARBOR_ADMIN_PASSWORD.

imagePullSecrets

Establece los nombres de imagePullSecrets para todas las ampliaciones.

updateStrategy.type

Establece la estrategia de actualización para las ampliaciones con volúmenes persistentes. Acepta RollingUpdate o Recreate. Usa Recreate cuando RWM para volúmenes no esté soportado. El valor por defecto es RollingUpdate.

logLevel

Establece el nivel de registro para los servicios Harbor. Acepta fatal, error, warn, info, debug o trace. El valor por defecto es debug.

enableMigratehelmHook

Ejecuta la tarea de migración de base de datos a través del gancho Helm. Cuando true, separa la tarea de migración de harbor-core. El valor por defecto es false.

caSecretName

Especifica el nombre del secreto que contiene la clave ca.crt.

Parámetros de proxy
proxy.httpProxy

Especifica la URL del servidor proxy HTTP. El valor por defecto es "".

proxy.httpsProxy

Especifica la URL del servidor proxy HTTPS. El valor por defecto es "".

proxy.noProxy

Establece las URLs que omiten la configuración del proxy. El valor por defecto es 127.0.0.1,localhost,.local,.internal.

proxy.components

Establece los componentes que utilizan la configuración del proxy. El valor por defecto es ["core","jobservice","trivy"].

Parámetros de exposición
expose.type

Especifica el tipo de exposición del servicio: ingress, clusterIP, nodePort o loadBalancer. El valor por defecto es ingress.

expose.tls.enabled

Habilita TLS. El valor por defecto es true.

expose.tls.certSource

Establece la fuente del certificado TLS como auto, secret o none. El valor por defecto es auto.

expose.tls.auto.commonName

Establece el nombre común del certificado cuando el tipo no es ingress.

expose.tls.secret.secretName

Especifica el nombre del secreto que contiene tls.crt (certificado) y tls.key (clave privada).

expose.ingress.hosts.core

Establece el host del servicio kernel Harbor en la regla Ingress. El valor por defecto es core.harbor.domain.

expose.ingress.controller

Establece el tipo de controlador Ingress. Admite default, gce, alb, f5-bigip y ncp. El valor por defecto es default.

expose.ingress.kubeVersionOverride

Sobrescribe la versión Kubernetes para la plantilla Ingress.

expose.ingress.annotations

Establece las anotaciones Ingress.

expose.ingress.labels

Establece etiquetas específicas de Ingress. El valor por defecto es {}.

expose.clusterIP.name

Establece el nombre del servicio ClusterIP. El valor por defecto es harbor.

expose.clusterIP.annotations

Establece las anotaciones del servicio ClusterIP. El valor por defecto es {}.

expose.clusterIP.ports.httpPort

Establece el puerto del servicio HTTP. El valor por defecto es 80.

expose.clusterIP.ports.httpsPort

Establece el puerto del servicio HTTPS. El valor por defecto es 443.

expose.clusterIP.labels

Establece etiquetas específicas de ClusterIP. El valor por defecto es {}.

expose.nodePort.name

Establece el nombre del servicio NodePort. El valor por defecto es harbor.

expose.nodePort.ports.http.port

Establece el puerto del servicio HTTP. El valor por defecto es 80.

expose.nodePort.ports.http.nodePort

Establece el puerto del nodo HTTP. El valor por defecto es 30002.

expose.nodePort.ports.https.port

Establece el puerto del servicio HTTPS. El valor por defecto es 443.

expose.nodePort.ports.https.nodePort

Establece el puerto del nodo HTTPS. El valor por defecto es 30003.

expose.nodePort.annotations

Establece las anotaciones de NodePort.

expose.nodePort.labels

Establece etiquetas específicas de NodePort. El valor por defecto es {}.

expose.loadBalancer.name

Establece el nombre del servicio. El valor por defecto es harbor.

expose.loadBalancer.IP

Establece la IP del loadBalancer cuando se admite la asignación de IP. El valor por defecto es "".

expose.loadBalancer.ports.httpPort

Establece el puerto del servicio HTTP. El valor por defecto es 80.

expose.loadBalancer.ports.httpsPort

Establece el puerto del servicio HTTPS. El valor por defecto es 30002.

expose.loadBalancer.annotations

Establece las anotaciones del servicio loadBalancer. El valor por defecto es {}.

expose.loadBalancer.labels

Establece etiquetas específicas del balanceador de carga. El valor por defecto es {}.

expose.loadBalancer.sourceRanges

Especifica rangos de direcciones IP para loadBalancerSourceRanges. El valor por defecto es [].

Parámetros de persistencia
persistence.enabled

Habilita o deshabilita la persistencia de datos. El valor por defecto es true.

persistence.resourcePolicy

keep impide la eliminación de PVCs durante una operación de eliminación Helm. Un valor vacío elimina los PVCs después de la eliminación del gráfico. El valor por defecto es keep.

persistence.persistentVolumeClaim.registry.existingClaim

El PVC existente que debe ser creado manualmente antes de la vinculación. Requiere una especificación de subPath si el PVC se comparte con otros componentes.

persistence.persistentVolumeClaim.registry.storageClass

El storageClass que aprovisiona el volumen.

persistence.persistentVolumeClaim.registry.subPath

El subpath en el volumen.

persistence.persistentVolumeClaim.registry.accessMode

El modo de acceso del volumen. El valor por defecto es ReadWriteOnce.

persistence.persistentVolumeClaim.registry.size

El tamaño del volumen. El valor por defecto es 5Gi.

persistence.persistentVolumeClaim.registry.annotations

Las anotaciones del volumen.

persistence.persistentVolumeClaim.jobservice.jobLog.existingClaim

El PVC existente que debe ser creado manualmente antes de la vinculación. Requiere una especificación de subPath si el PVC se comparte con otros componentes.

persistence.persistentVolumeClaim.jobservice.jobLog.storageClass

El storageClass que aprovisiona el volumen.

persistence.persistentVolumeClaim.jobservice.jobLog.subPath

El subpath en el volumen.

persistence.persistentVolumeClaim.jobservice.jobLog.accessMode

El modo de acceso del volumen. El valor por defecto es ReadWriteOnce.

persistence.persistentVolumeClaim.jobservice.jobLog.size

El tamaño del volumen. El valor por defecto es 1Gi.

persistence.persistentVolumeClaim.jobservice.jobLog.annotations

Las anotaciones del volumen.

persistence.persistentVolumeClaim.database.existingClaim

El PVC existente que debe ser creado manualmente antes de la vinculación. Requiere una especificación de subPath si el PVC se comparte con otros componentes.

persistence.persistentVolumeClaim.database.storageClass

El storageClass que aprovisiona el volumen.

persistence.persistentVolumeClaim.database.subPath

El subpath en el volumen. Ignorado cuando se utiliza una base de datos externa.

persistence.persistentVolumeClaim.database.accessMode

El modo de acceso del volumen. Ignorado cuando se utiliza una base de datos externa. El valor por defecto es ReadWriteOnce.

persistence.persistentVolumeClaim.database.size

El tamaño del volumen. Ignorado cuando se utiliza una base de datos externa. El valor por defecto es 1Gi.

persistence.persistentVolumeClaim.database.annotations

Las anotaciones del volumen.

persistence.persistentVolumeClaim.redis.existingClaim

El PVC existente que debe ser creado manualmente antes de la vinculación. Requiere una especificación de subPath si el PVC se comparte con otros componentes.

persistence.persistentVolumeClaim.redis.storageClass

El storageClass que aprovisiona el volumen. Utiliza la StorageClass predeterminada si no se especifica.

persistence.persistentVolumeClaim.redis.subPath

El subpath en el volumen. Ignorado cuando se utiliza un Valkey externo.

persistence.persistentVolumeClaim.redis.accessMode

El modo de acceso del volumen. Ignorado cuando se utiliza un Valkey externo. El valor por defecto es ReadWriteOnce.

persistence.persistentVolumeClaim.redis.size

El tamaño del volumen. Ignorado cuando se utiliza un Valkey externo. El valor por defecto es 1Gi.

persistence.persistentVolumeClaim.redis.annotations

Las anotaciones del volumen.

persistence.persistentVolumeClaim.trivy.existingClaim

El PVC existente que debe ser creado manualmente antes de la vinculación. Requiere una especificación de subPath si el PVC se comparte con otros componentes.

persistence.persistentVolumeClaim.trivy.storageClass

El storageClass que aprovisiona el volumen. Utiliza la StorageClass predeterminada si no se especifica.

persistence.persistentVolumeClaim.trivy.subPath

El subpath en el volumen.

persistence.persistentVolumeClaim.trivy.accessMode

El modo de acceso del volumen. El valor por defecto es ReadWriteOnce.

persistence.persistentVolumeClaim.trivy.size

El tamaño del volumen. El valor por defecto es 1Gi.

persistence.persistentVolumeClaim.trivy.annotations

Las anotaciones del volumen.

persistence.imageChartStorage.disableredirect

Controla la gestión de redirecciones desde los sistemas secundarios de contenido. Establecer en verdadero para deshabilitar redirecciones para sistemas secundarios no soportados. El valor por defecto es false.

persistence.imageChartStorage.caBundleSecretName

El nombre del secreto que contiene el paquete CA para certificados de servicio de almacenamiento autofirmados.

persistence.imageChartStorage.type

El tipo de almacenamiento para imágenes y gráficos: filesystem, azure, gcs, s3, swift o oss. El valor por defecto es filesystem.

persistence.imageChartStorage.gcs.existingSecret

El nombre del secreto existente que contiene la clave JSON de la cuenta de servicio GCS. La clave debe ser gcs-key.json. El valor por defecto es "".

persistence.imageChartStorage.gcs.useWorkloadIdentity

Habilita el uso de identidad de carga de trabajo en un clúster GKE. El valor por defecto es false.

nginxParámetros de
nginx.image.repository

El repositorio de imágenes para nginx. El valor por defecto es private-registry/harbor-nginx.

nginx.image.tag

La etiqueta de imagen para nginx.

nginx.replicas

El número de réplicas a ejecutar. El valor por defecto es 1.

nginx.revisionHistoryLimit

El número máximo de revisiones antiguas de ReplicaSet a retener. El valor por defecto es 10.

nginx.resources

Los recursos de computación asignados al contenedor. El valor por defecto es undefined.

nginx.automountServiceAccountToken

Controla el montaje automático del token de la cuenta de servicio. El valor por defecto es false.

nginx.nodeSelector

Las etiquetas de nodo utilizadas para la asignación de pods. El valor por defecto es {}.

nginx.tolerations

Las tolerancias de asignación de pods. El valor por defecto es [].

nginx.affinity

Las reglas de afinidad de nodo o pod. El valor por defecto es {}.

nginx.topologySpreadConstraints

Las reglas para distribuir pods a través de dominios de fallo como regiones o zonas de disponibilidad. El valor por defecto es [].

nginx.podAnnotations

Las anotaciones añadidas al pod de nginx. El valor por defecto es {}.

Parámetros del portal
portal.image.repository

Ubicación del repositorio para la imagen del portal. El valor por defecto es private-registry/harbor-portal.

portal.image.tag

Etiqueta para la imagen del portal. El valor por defecto es 3.11.

portal.replicas

Número de réplicas a crear. El valor por defecto es 1.

portal.revisionHistoryLimit

Número máximo de revisiones antiguas de ReplicaSet a retener. El valor por defecto es 10.

portal.resources

Recursos asignados al contenedor. El valor por defecto es undefined.

portal.automountServiceAccountToken

Controla el montaje automático del token de la cuenta de servicio. El valor por defecto es false.

portal.nodeSelector

Etiquetas de nodo utilizadas para la asignación de pods. El valor por defecto es {}.

portal.tolerations

Tolerancias utilizadas para la asignación de pods. El valor por defecto es [].

portal.affinity

Configuraciones de afinidad de nodo y pod. El valor por defecto es {}.

portal.topologySpreadConstraints

Define la distribución de pods a través de dominios de fallo como regiones o zonas de disponibilidad. El valor por defecto es [].

portal.podAnnotations

Anotaciones añadidas al pod del portal. El valor por defecto es {}.

portal.serviceAnnotations

Anotaciones añadidas al servicio del portal. El valor por defecto es {}.

portal.priorityClassName

Nombre de la clase de prioridad para la ejecución del pod.

portal.initContainers

Contenedores de inicialización que se ejecutarán antes de que comience el contenedor del controlador. El valor por defecto es [].

Parámetros del kernel
core.image.repository

El repositorio para la imagen kernel Harbor. El valor por defecto es private-registry/harbor-core.

core.image.tag

La etiqueta para la imagen kernel Harbor. El valor por defecto es 2.11.

core.replicas

El número de réplicas. El valor por defecto es 1.

core.revisionHistoryLimit

El límite de historial de revisiones. El valor por defecto es 10.

core.startupProbe.initialDelaySeconds

El retraso inicial en segundos para la prueba de inicio. El valor por defecto es 10.

core.resources

Los recursos a asignar para el contenedor. El valor por defecto es undefined.

core.automountServiceAccountToken

Monta el token de cuenta de servicio. El valor por defecto es false.

core.nodeSelector

Las etiquetas de nodo para la asignación de pods. El valor por defecto es {}.

core.tolerations

Las tolerancias para la asignación de pods. El valor por defecto es [].

core.affinity

Las afinidades de nodo o pod. El valor por defecto es {}.

core.topologySpreadConstraints

Las restricciones que definen cómo se distribuyen los pods a través de dominios de fallo como regiones o zonas de disponibilidad. El valor por defecto es [].

core.podAnnotations

Las anotaciones que se deben añadir al pod del kernel. El valor por defecto es {}.

core.serviceAnnotations

Las anotaciones que se deben añadir al servicio del kernel. El valor por defecto es {}.

core.configureUserSettings

Una cadena JSON en la variable de entorno CONFIG_OVERWRITE_JSON para configurar los ajustes del usuario.

core.quotaUpdateProvider

El proveedor para actualizar el uso de cuota del proyecto, las opciones son redis o db. El valor por defecto es db.

core.secret

Se utiliza cuando el servidor kernel se comunica con otros componentes.

core.secretName

El nombre de un secreto Kubernetes para utilizar su propio certificado TLS y clave privada para la encriptación o desencriptación de tokens.

core.tokenKey

La clave privada RSA en formato PEM utilizada para firmar tokens de servicio.

core.tokenCert

El certificado en formato PEM firmado por core.tokenKey utilizado para validar tokens de servicio.

core.xsrfKey

La clave XSRF, generada automáticamente si no se especifica.

core.priorityClassName

La clase de prioridad para ejecutar el pod.

core.artifactPullAsyncFlushDuration

La duración para actualizar de forma asíncrona el tiempo de extracción de artefactos y el recuento de extracciones del repositorio.

core.gdpr.deleteUser

Habilita la eliminación de usuarios conforme al RGPD. El valor por defecto es false.

core.gdpr.auditLogsCompliant

Habilita el cumplimiento del RGPD para los registros de auditoría cambiando el nombre de usuario a su valor CRC32 si dicho usuario fue eliminado del sistema. El valor por defecto es false.

core.initContainers

Los contenedores de inicialización que se deben ejecutar antes de que comience el contenedor del controlador. El valor por defecto es [].

Parámetros del servicio de trabajos.
jobservice.image.repository

El repositorio para la imagen del servicio de trabajos. El valor por defecto es private-registry/harbor-jobservice.

jobservice.image.tag

La etiqueta para la imagen del servicio de trabajos. El valor por defecto es 2.11.

jobservice.replicas

El número de réplicas. El valor por defecto es 1.

jobservice.revisionHistoryLimit

El límite de historial de revisiones. El valor por defecto es 10.

jobservice.maxJobWorkers

El número máximo de trabajadores de trabajos. El valor por defecto es 10.

jobservice.jobLoggers

Los registradores para trabajos: file, database o stdout. El valor por defecto es [file].

jobservice.loggerSweeperDuration

La duración en días para mantener los registros de trabajo (ignorada si jobLoggers está configurado en stdout). El valor por defecto es 14.

jobservice.notification.webhook_job_max_retry

El número máximo de reintentos para el envío de notificaciones de webhook. El valor por defecto es 3.

jobservice.notification.webhook_job_http_client_timeout

El tiempo de espera del cliente HTTP en segundos para el envío de notificaciones de webhook. El valor por defecto es 3.

jobservice.reaper.max_update_hours

El tiempo máximo en horas para esperar a que una tarea finalice. Si la tarea no se ha terminado después de las horas especificadas, se marca como un error pero continúa ejecutándose. El valor por defecto es 24.

jobservice.reaper.max_dangling_hours

El tiempo máximo en horas durante el cual una tarea permanece en ejecución sin que se cree una nueva. El valor por defecto es 168.

jobservice.resources

Los [recursos] a asignar para el contenedor. El valor por defecto es undefined.

jobservice.automountServiceAccountToken

Monta el token de cuenta de servicio. El valor por defecto es false.

jobservice.nodeSelector

Las etiquetas de nodo para la asignación de pods. El valor por defecto es {}.

jobservice.tolerations

Las tolerancias para la asignación de pods. El valor por defecto es [].

jobservice.affinity

Las afinidades de nodo o pod. El valor por defecto es {}.

jobservice.topologySpreadConstraints

Las restricciones que definen cómo se distribuyen los pods a través de dominios de fallo como regiones o zonas de disponibilidad. El valor por defecto es [].

jobservice.podAnnotations

Las anotaciones a añadir al pod del servicio de trabajos. El valor por defecto es {}.

jobservice.priorityClassName

La clase de prioridad para ejecutar el pod.

jobservice.secret

El secreto utilizado cuando el servicio de trabajos se comunica con otros componentes. Si no se especifica una clave secreta, Helm la genera. Debe ser una cadena de 16 caracteres.

jobservice.initContainers

Los contenedores de inicialización que se deben ejecutar antes de que comience el contenedor del controlador. El valor predeterminado es [].

Parámetros del registro
registry.registry.image.repository

La ubicación del repositorio para la imagen del registro. El valor predeterminado es private-registry/harbor-registry.

registry.registry.image.tag

La etiqueta para la imagen del registro. El valor predeterminado es 2.11.

registry.registry.resources

Los [recursos] a asignar para el contenedor. El valor predeterminado es undefined.

registry.controller.image.repository

La ubicación del repositorio para la imagen del controlador del registro. El valor predeterminado es private-registry/harbor-registryctl.

registry.controller.image.tag

La etiqueta para la imagen del controlador del registro. El valor predeterminado es 2.11.

registry.controller.resources

Los [recursos] a asignar para el contenedor. El valor predeterminado es undefined.

registry.replicas

El número de réplicas. El valor predeterminado es 1.

registry.revisionHistoryLimit

El número máximo de revisiones a mantener en el historial. El valor predeterminado es 10.

registry.nodeSelector

Las etiquetas de nodo para la asignación de pods. El valor predeterminado es {}.

registry.automountServiceAccountToken

Controla si se debe montar el token de la cuenta de servicio. El valor predeterminado es false.

registry.tolerations

Las tolerancias para la asignación de pods. El valor predeterminado es [].

registry.affinity

Las afinidades de nodo o pod. El valor predeterminado es {}.

registry.topologySpreadConstraints

Las restricciones que definen la distribución de pods a través de dominios de fallo como regiones o zonas de disponibilidad. El valor predeterminado es [].

registry.middleware

Soporte de middleware para un CDN entre el almacenamiento de sistema secundario y Docker destinatario de extracción.

registry.podAnnotations

Las anotaciones que se deben añadir al pod del registro. El valor predeterminado es {}.

registry.priorityClassName

La clase de prioridad para la ejecución del pod.

registry.secret

El secreto que asegura el estado de carga entre el cliente y el almacenamiento de sistema secundario del registro.

registry.credentials.username

El nombre de usuario para el acceso interno del registro del kernel de Harbor. El valor por defecto es harbor_registry_user.

registry.credentials.password

La contraseña para el acceso interno del registro del kernel de Harbor. El valor por defecto es harbor_registry_password.

registry.credentials.existingSecret

Un secreto existente que contiene la contraseña para el acceso a la instancia del registro en modo de autenticación htpasswd. El valor predeterminado es "".

registry.credentials.htpasswdString

El inicio de sesión y la contraseña en formato de cadena htpasswd. Excluye registry.credentials.username y registry.credentials.password. El valor por defecto es undefined.

registry.relativeurls

Devuelve URLs relativas en los encabezados de ubicación cuando es verdadero. Requerido si Harbor está detrás de un proxy inverso. El valor predeterminado es false.

registry.upload_purging.enabled

Habilita la purga de directorios de carga. El valor predeterminado es true.

registry.upload_purging.age

El período de tiempo después del cual se eliminan los archivos en los directorios de carga; el valor por defecto es una semana. El valor por defecto es 168h.

registry.upload_purging.interval

El intervalo de tiempo entre operaciones de purga. El valor por defecto es 24h.

registry.upload_purging.dryrun

Habilita el modo de prueba para la purga de cargas. El valor por defecto es false.

registry.initContainers

Los contenedores de inicialización que se deben ejecutar antes de que comience el contenedor del controlador. El valor por defecto es [].

Parámetros de Trivy
trivy.enabled

Habilita o deshabilita el escáner de Trivy. El valor por defecto es true.

trivy.image.repository

El repositorio para la imagen del adaptador Trivy. El valor por defecto es private-registry/harbor-trivy-adapter.

trivy.image.tag

La etiqueta para la imagen del adaptador Trivy. El valor por defecto es 2.11.

trivy.resources

Los recursos a asignar para el contenedor del adaptador Trivy. El valor por defecto es undefined.

trivy.automountServiceAccountToken

Si montar el token de la cuenta de servicio. El valor por defecto es false.

trivy.replicas

El número de réplicas de Pod. El valor por defecto es 1.

trivy.debugMode

Habilita el modo de depuración de Trivy para la resolución de problemas. El valor por defecto es false.

trivy.vulnType

Lista de tipos de vulnerabilidades separados por comas (os y library). El valor por defecto es os,library.

trivy.severity

Lista de severidades de vulnerabilidades a comprobar, separadas por comas. El valor por defecto es UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL.

trivy.ignoreUnfixed

Muestra solo vulnerabilidades corregidas. El valor por defecto es false.

trivy.insecure

Salta la verificación del certificado del registro. El valor por defecto es false.

trivy.skipUpdate

Desactiva las descargas de bases de datos Trivy desde GitHub. El valor por defecto es false.

trivy.skipJavaDBUpdate

Requiere la descarga manual del archivo trivy-java.db cuando está habilitado. El valor por defecto es false.

trivy.offlineScan

Previene que Trivy envíe solicitudes API para identificar dependencias. El valor por defecto es false.

trivy.securityCheck

Lista de problemas de seguridad a detectar, separados por comas. El valor por defecto es vuln.

trivy.timeout

La duración de espera para la finalización del escaneo. El valor por defecto es 5m0s.

trivy.gitHubToken

El token de acceso de GitHub requerido para las descargas de la base de datos. El valor por defecto es undefined.

trivy.priorityClassName

La clase de prioridad para ejecutar el pod. El valor por defecto es undefined.

trivy.topologySpreadConstraints

Define las restricciones de distribución del pod a través de dominios de fallo. El valor por defecto es undefined.

trivy.initContainers

Lista de contenedores de inicialización que se ejecutarán antes de que comience el contenedor principal. El valor por defecto es [].

Parámetros de la base de datos
database.type

El tipo de base de datos. Establecer en external al usar una base de datos externa. El valor por defecto es internal.

database.internal.image.repository

El repositorio para la imagen de la base de datos. El valor por defecto es private-registry/harbor-db.

database.internal.image.tag

La etiqueta para la imagen de la base de datos. El valor por defecto es 2.11.

database.internal.password

La contraseña para la base de datos interna. El valor por defecto es changeit.

database.internal.shmSizeLimit

El límite de tamaño de memoria compartida para PostgreSQL (típicamente el 50% del límite de memoria del contenedor). El valor por defecto es 512Mi.

database.internal.resources

Los recursos asignados para el contenedor de la base de datos. El valor por defecto es undefined.

database.internal.automountServiceAccountToken

Controla si el token de la cuenta de servicio está montado. El valor por defecto es false.

database.internal.initContainer.migrator.resources

Los recursos asignados para el contenedor de inicialización del migrador de la base de datos. El valor por defecto es undefined.

database.internal.initContainer.permissions.resources

Los recursos asignados para el contenedor de inicialización de permisos de la base de datos. El valor por defecto es undefined.

database.internal.nodeSelector

Las etiquetas de nodo para la asignación de pods. El valor por defecto es {}.

database.internal.tolerations

Las tolerancias para la asignación de pods. El valor por defecto es [].

database.internal.affinity

La configuración de afinidad de nodo o pod. El valor por defecto es {}.

database.internal.priorityClassName

La clase de prioridad para ejecutar el pod. El valor por defecto es undefined.

database.internal.livenessProbe.timeoutSeconds

El tiempo de espera en segundos para la prueba de vivacidad (rango: 1-5s). El valor por defecto es 1.

database.internal.readinessProbe.timeoutSeconds

El tiempo de espera en segundos para la prueba de disponibilidad (rango: 1-5s). El valor por defecto es 1.

database.internal.extrInitContainers

Contenedores de inicialización adicionales que se ejecutan antes de que comience el contenedor de la base de datos. El valor por defecto es [].

database.external.host

El nombre de host de la base de datos externa. El valor por defecto es 192.168.0.1.

database.external.port

El número de puerto de la base de datos externa. El valor por defecto es 5432.

database.external.username

El nombre de usuario para la base de datos externa. El valor por defecto es user.

database.external.password

La contraseña para la base de datos externa. El valor por defecto es password.

database.external.coreDatabase

El nombre de la base de datos utilizada por el servicio kernel. El valor por defecto es registry.

database.external.existingSecret

El secreto existente que contiene la contraseña de la base de datos. La clave debe ser password. El valor por defecto es "".

database.external.sslmode

El método de conexión para la base de datos externa. Opciones: require, verify-full, verify-ca, disable. El valor por defecto es disable.

database.maxIdleConns

El número máximo de conexiones inactivas en el grupo (0 o menos significa que no se retienen conexiones inactivas). El valor por defecto es 50.

database.maxOpenConns

El número máximo de conexiones abiertas a la base de datos (0 o menos significa ilimitado). El valor por defecto es 100.

database.podAnnotations

Las anotaciones que se añadirán al pod de la base de datos. El valor por defecto es {}.

Valkey / Redis parámetros
redis.type

El tipo de despliegue Redis. Establecer en external para Redis externo. El valor por defecto es internal.

redis.internal.image.repository

El repositorio para la imagen Redis. El valor por defecto es private-registry/harbor-redis.

redis.internal.image.tag

La etiqueta para la imagen Redis. El valor por defecto es 7.2.

redis.internal.resources

Los recursos asignados para el contenedor Redis. El valor por defecto es undefined.

redis.internal.automountServiceAccountToken

Controla si el token de la cuenta de servicio está montado. El valor por defecto es false.

redis.internal.nodeSelector

Las etiquetas de nodo para la asignación de pods. El valor por defecto es {}.

redis.internal.tolerations

Las tolerancias para la asignación de pods. El valor por defecto es [].

redis.internal.affinity

La configuración de afinidad de nodo o pod. El valor por defecto es {}.

redis.internal.priorityClassName

La clase de prioridad para ejecutar Redis el pod. El valor por defecto es undefined.

redis.internal.jobserviceDatabaseIndex

El índice de la base de datos para jobservice. El valor por defecto es 1.

redis.internal.registryDatabaseIndex

El índice de la base de datos para registry. El valor por defecto es 2.

redis.internal.trivyAdapterIndex

El índice de la base de datos para Trivy el adaptador. El valor por defecto es 5.

redis.internal.harborDatabaseIndex

El índice de la base de datos para Harbor la lógica de negocio miscelánea. El valor por defecto es 0.

redis.internal.cacheLayerDatabaseIndex

El índice de la base de datos para la capa de caché de Harbor. El valor por defecto es 0.

redis.internal.initContainers

Los contenedores de inicialización que se ejecutan antes de que comience el Redis contenedor. El valor por defecto es [].

redis.external.addr

La dirección de la instancia externa de Redis. El valor por defecto es 192.168.0.2:6379.

redis.external.sentinelMasterSet

El nombre del conjunto maestro Sentinel de Redis (si corresponde). El valor por defecto es undefined.

redis.external.coreDatabaseIndex

El índice de la base de datos para kernel. El valor por defecto es 0.

redis.external.jobserviceDatabaseIndex

El índice de la base de datos para jobservice. El valor por defecto es 1.

redis.external.registryDatabaseIndex

El índice de la base de datos para registry. El valor por defecto es 2.

redis.external.trivyAdapterIndex

El índice de la base de datos para Trivy el adaptador. El valor por defecto es 5.

redis.external.harborDatabaseIndex

El índice de la base de datos para Harbor la lógica de negocio miscelánea. El valor por defecto es 0.

redis.external.cacheLayerDatabaseIndex

El índice de la base de datos para la capa de caché de Harbor. El valor por defecto es 0.

redis.external.username

El nombre de usuario para la autenticación externa de Redis. El valor por defecto es undefined.

redis.external.password

La contraseña para la autenticación externa de Redis. El valor por defecto es undefined.

redis.external.existingSecret

El secreto existente que contiene la contraseña de Redis. La clave debe ser REDIS_PASSWORD. El valor por defecto es "".

redis.podAnnotations

Las anotaciones que se deben añadir al Redis pod. El valor por defecto es {}.

Parámetros del exportador
exporter.replicas

El número de réplicas a ejecutar. El valor por defecto es 1.

exporter.revisionHistoryLimit

El límite del historial de revisiones. El valor por defecto es 10.

exporter.podAnnotations

Anotaciones para añadir al pod del exportador. El valor por defecto es {}.

exporter.image.repository

El repositorio para la imagen del exportador. El valor por defecto es private-registry/harbor-exporter.

exporter.image.tag

La etiqueta para la imagen del exportador. El valor por defecto es 2.11.

exporter.nodeSelector

Etiquetas de nodo para la asignación de pods. El valor por defecto es {}.

exporter.tolerations

Tolerancias para la asignación de pods. El valor por defecto es [].

exporter.affinity

Afinidades de nodo o pod. El valor por defecto es {}.

exporter.topologySpreadConstraints

Restricciones que definen cómo se distribuyen los Pods a través de dominios de fallo como regiones o zonas de disponibilidad. El valor por defecto es [].

exporter.automountServiceAccountToken

Controla si se debe montar el serviceAccountToken. El valor por defecto es false.

exporter.cacheDuration

La duración de la caché para la información recopilada por el exportador. El valor por defecto es 30.

exporter.cacheCleanInterval

El intervalo de limpieza de la caché para la información recopilada por el exportador. El valor por defecto es 14400.

exporter.priorityClassName

La clase de prioridad para ejecutar el pod. El valor por defecto es undefined.

Parámetros de métricas
metrics.enabled

Habilita Harbor métricas. El valor por defecto es false.

metrics.core.path

La vía URL para métricas de kernel. El valor por defecto es /metrics.

metrics.core.port

El puerto para métricas de kernel. El valor por defecto es 8001.

metrics.registry.path

La vía URL para métricas de registro. El valor por defecto es /metrics.

metrics.registry.port

El puerto para métricas de registro. El valor por defecto es 8001.

metrics.exporter.path

La vía URL para métricas del exportador. El valor por defecto es /metrics.

metrics.exporter.port

El puerto para métricas del exportador. El valor por defecto es 8001.

metrics.serviceMonitor.enabled

Habilita la creación de un Prometheus ServiceMonitor (requiere Prometheus CRD). El valor por defecto es false.

metrics.serviceMonitor.additionalLabels

Etiquetas adicionales que se aplicarán al manifiesto del ServiceMonitor. El valor por defecto es "".

metrics.serviceMonitor.interval

El intervalo de recolección para las métricas de Harbor. El valor por defecto es "".

metrics.serviceMonitor.metricRelabelings

Las reglas de reetiquetado para las métricas antes de la ingestión. El valor por defecto es [].

metrics.serviceMonitor.relabelings

Las reglas de reetiquetado para las métricas antes de la recolección. El valor por defecto es [].

Parámetros de trazado
trace.enabled

Habilita la funcionalidad de trazado. El valor por defecto es false.

trace.provider

El proveedor de trazado (jaeger o otel). La versión de Jaeger debe ser 1.26 o superior. El valor por defecto es jaeger.

trace.sample_rate

La tasa de muestreo para los datos de trazado. 1 muestrea el 100%, 0.5 muestrea el 50%. El valor por defecto es 1.

trace.namespace

El espacio de nombres para diferenciar diferentes servicios de Harbor.

trace.attributes

Un diccionario de clave-valor para atributos definidos por el usuario en la inicialización del proveedor de trazado.

trace.jaeger.endpoint

El punto final para el trazado de Jaeger. El valor por defecto es http://hostname:14268/api/traces.

trace.jaeger.username

El nombre de usuario para la autenticación de Jaeger.

trace.jaeger.password

La contraseña para la autenticación de Jaeger.

trace.jaeger.agent_host

El host del agente para Jaeger.

trace.jaeger.agent_port

El puerto del agente para Jaeger. El valor por defecto es 6831.

trace.otel.endpoint

El punto final para el trazado de OpenTelemetry. El valor por defecto es hostname:4318.

trace.otel.url_path

La vía URL para OpenTelemetry. El valor por defecto es /v1/traces.

trace.otel.compression

Habilita la compresión para OpenTelemetry. El valor por defecto es false.

trace.otel.insecure

Establece una conexión insegura para OpenTelemetry. El valor por defecto es true.

trace.otel.timeout

El tiempo de espera en segundos para OpenTelemetry. El valor por defecto es 10.

Parámetros de caché
cache.enabled

Habilita la capa de caché. El valor por defecto es false.

cache.expireHours

El tiempo de expiración en horas para la capa de caché. El valor por defecto es 24.

B Ejemplo de un gráfico de Registro Privado configuración de HA Helm

El siguiente archivo de valores de ejemplo ilustra los parámetros que son necesarios para la configuración mínima de Registro Privado HA.

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

Nombre de host del servicio del kernel en la regla Ingress.

2

La URL externa para el servicio harbor-core.

3 4 5 6

Número de réplicas a crear. Especificar dos o más.

7

Rellene los detalles de conexión a la base de datos en la sección external.

8

Si se utiliza un secreto existente, el valor debe ser password.

9

Acepta uno de los siguientes valores:

inhabilitar

No use SSL.

requerir

Utilice siempre SSL y omita la verificación.

verify-ca

Utilice siempre SSL. Verifique que el certificado presentado por el servidor fue firmado por una CA de confianza.

verificar-completo

Utilice siempre SSL. Verifique que el certificado presentado por el servidor fue firmado por una CA de confianza y que el nombre de host del servidor coincide con el del certificado.

10

Rellene la información de conexión en la sección external.

11

Soporta redis y redis+sentinel.
La dirección para redis es <redis_host>:<redis_port>.
La dirección para redis+sentinel es <sentinel1_host>:<sentinel1_port>,<sentinel2_host>:<sentinel2_port>…​

12

El nombre del conjunto de Valkey instancias a monitorizar. Debe configurarse para soportar redis+sentinel.

13

Debe ser 0 ya que la biblioteca que utiliza Harbor no soporta configuraciones.

14

Opcional. Por defecto es 0 pero se puede configurar a 6.

15

Opcional. Por defecto es 0 pero se puede configurar a 7.

16

Si está vacío, se autentica contra el usuario por defecto.

17

Si se utiliza, la clave debe ser <REDIS_PASSWORD>.

18

Para almacenar todas las imágenes, metadatos y escaneos, asegúrese de que los ajustes relacionados con la persistencia (Parámetros de persistencia) estén correctamente configurados.

C Licencia de documentación gratuita de GNU

Copyright © 2000, 2001, 2002 Free Software Foundation, Inc. 51 Franklin St, Quinta planta, Boston, MA 02110-1301 EE. UU. Se permite copiar y distribuir copias literales de este documento de licencia, pero no se permite modificarlo.

C1 0. PREÁMBULO

El propósito de esta Licencia es hacer que un manual, libro de texto u otro documento funcional y útil sea "libre" en el sentido de libertad: para garantizar a todos la libertad efectiva de copiarlo y redistribuirlo, con o sin modificaciones, ya sea con fines comerciales o no comerciales. En segundo término, esta Licencia proporciona al autor y al editor una manera de obtener reconocimiento por su trabajo, sin que se les considere responsables de las modificaciones realizadas por otros.

Esta Licencia es de tipo "copyleft", lo que significa que los trabajos derivados del documento deben, a su vez, ser libres en el mismo sentido. Complementa la Licencia Pública General de GNU, que es una licencia copyleft diseñada para software libre.

Hemos diseñado esta Licencia para utilizarla en manuales de software libre, ya que el software libre necesita documentación libre: un programa libre debe incluir manuales que proporcionen las mismas libertades que el software. Pero esta Licencia no se limita a manuales de software; puede usarse para cualquier texto, sin tener en cuenta su temática o si se publica como libro impreso o no. Recomendamos esta Licencia principalmente para trabajos cuyo fin sea instructivo o de referencia.

C2 1. APLICACIÓN Y DEFINICIONES

Esta Licencia se aplica a cualquier manual u otro trabajo, en cualquier medio, que contenga un aviso del titular del copyright indicando que puede distribuirse bajo los términos de esta Licencia. Dicho aviso otorga una licencia mundial, libre de regalías y sin límite de duración, para usar ese trabajo bajo las condiciones aquí establecidas. En adelante, la palabra "Documento" se referirá a cualquiera de dichos manuales o trabajos. Cualquier persona es un licenciatario y se hará referencia a él como "Usted". Usted acepta la licencia si copia, modifica o distribuye el trabajo de cualquier modo que requiera permiso según las leyes de copyright.

Una "Versión modificada" del Documento es cualquier trabajo que contenga el Documento o una parte de él, ya sea copiado literalmente, modificado y/o traducido a otro idioma.

Una "Sección secundaria" es un apéndice con nombre o una sección preliminar del Documento que trata exclusivamente de la relación de los editores o autores del Documento con el tema general del mismo (o con temas relacionados) y que no contiene nada que pueda entrar directamente en ese tema general. Así, si el Documento es en parte un libro de texto de matemáticas, una Sección secundaria no puede explicar ninguna matemática. La relación puede ser una conexión histórica con el tema o temas relacionados, o una posición legal, comercial, filosófica, ética o política respecto a ellos.

Las "Secciones invariantes" son ciertas Secciones secundarias cuyos títulos se designan como tales en el aviso que indica que el Documento se publica bajo esta Licencia. Si una sección no se ajusta a la definición anterior de Secundaria, no puede designarse como Invariante. El documento puede no tener Secciones fijas. Si el Documento no identifica ninguna sección invariante, entonces no hay ninguna.

Los "Textos de cubierta" son ciertos pasajes cortos de texto que se enumeran, como Textos de cubierta delantera o Textos de cubierta trasera, en el aviso que indica que el documento está sujeto a esta licencia. Un Texto de cubierta delantera puede tener como máximo 5 palabras, y uno de cubierta trasera puede tener hasta 25 palabras.

Una copia "Transparente" del documento significa una copia legible por máquina, representada en un formato cuya especificación está disponible para el público en general, que sea apta para revisar el documento directamente con editores de texto genéricos o (para imágenes compuestas por píxeles) programas genéricos de edición de imágenes o (para dibujos) algún editor de dibujos ampliamente disponible, y que sea adecuada como entrada para formateadores de texto o para su traducción automática a una variedad de formatos adecuados para formateadores de texto. Una copia realizada en un formato por lo demás Transparente cuyo marcado, o ausencia de marcado, haya sido dispuesto para impedir o desalentar modificaciones posteriores por parte de los lectores no es Transparente. Un formato de imagen no es transparente si se usa para una cantidad de texto sustancial. Una copia que no sea 'Transparente' se denomina 'Opaca'.

Ejemplos de formatos adecuados para copias transparentes incluyen ASCII puro sin marcado, formato de entrada de Texinfo, formato de entrada de LaTeX, SGML o XML usando una DTD disponible públicamente, y HTML, PostScript o PDF simples que cumplan los estándares y estén diseñados para ser modificados por personas. Ejemplos de formatos de imagen transparentes incluyen PNG, XCF y JPG. Los formatos opacos incluyen formatos propietarios que pueden ser leídos y editados únicamente por procesadores de texto propietarios, SGML o XML para los cuales la DTD y/o las herramientas de procesamiento no estén generalmente disponibles, y HTML, PostScript o PDF generados por algunos procesadores de texto solo como salida.

La "portada" es, en un libro impreso, la página de título, más las páginas siguientes que sean necesarias para contener de forma legible el material que esta licencia requiere que aparezca en la portada. Para obras en formatos que no tengan página de portada como tal, "portada" significa el texto cercano a la aparición más destacada del título de la obra, que precede al comienzo del cuerpo del texto.

Una sección "Titulada XYZ" significa una subunidad nombrada del documento cuyo título es precisamente XYZ o contiene XYZ entre paréntesis después de un texto que traduce XYZ a otro idioma. (Aquí XYZ se refiere a nombres de sección específicos mencionados más abajo como por ejemplo "Agradecimientos", "Dedicatorias", "Aprobaciones" o "Historia".) "Conservar el título" de tal sección cuando se modifica el Documento significa que sigue siendo una sección 'Titulada XYZ' según esta definición.

El documento puede incluir exenciones de garantía junto al aviso que indica que esta licencia se aplica al documento. Se considera que estas exenciones de garantía se incluyen por referencia en esta licencia, pero solo en lo que respecta a la renuncia de garantías: cualquier otra implicación que estas exenciones de garantía pudieran tener es nula y no tiene efecto alguno en el significado de esta licencia.

C3 2. COPIA LITERAL

Usted puede copiar y distribuir el Documento en cualquier medio, ya sea con fines comerciales o no comerciales, siempre y cuando esta Licencia, la información de copyright y la nota que indica que esta Licencia se aplica al Documento se reproduzcan en todas las copias y que usted no añada ninguna otra condición que no sea la de esta Licencia. Usted no puede usar medidas técnicas para obstruir o controlar la lectura o copia posterior de las copias que usted haga o distribuya. Sin embargo, usted puede aceptar compensación a cambio de las copias. Si distribuye un número suficientemente grande de copias, también deberá seguir las condiciones de la sección 3.

También puede prestar copias, bajo las mismas condiciones establecidas anteriormente, y puede exhibir copias públicamente.

C4 3. GRANDES CANTIDADES DE COPIAS

Si publica copias impresas (o copias en medios que normalmente tienen cubiertas impresas) del Documento, que superen las 100 unidades, y el aviso de licencia del Documento exige Textos de cubierta, debe encerrar las copias en cubiertas que lleven, de forma clara y legible, todos estos Textos de cubierta: Textos de cubierta delantera en la cubierta delantera, y Textos de cubierta trasera en la cubierta trasera. Ambas cubiertas deben identificarlo a usted clara y legiblemente como el editor de estas copias. La cubierta delantera debe presentar el título completo con todas las palabras del título igualmente prominentes y visibles. Además puede añadir otro material en las cubiertas. Las copias con cambios limitados a las cubiertas, siempre que conserven el título del Documento y satisfagan estas condiciones, pueden considerarse como copias literales en otros aspectos.

Si los textos requeridos para cualquiera de las cubiertas son demasiado voluminosos para que encajen legiblemente, debe colocar los primeros que se enumeran (tantos como quepan razonablemente) en la cubierta real, y continuar el resto en páginas adyacentes.

Si publica o distribuye copias Opacas del Documento que superen las 100 unidades, debe incluir una copia Transparente, que pueda ser leída por una máquina, con cada copia Opaca, o bien indicar en cada copia Opaca una ubicación en la red desde la cual el público en general que utiliza la red tenga acceso para descargar, utilizando protocolos de red públicos y estándar, una copia Transparente completa del Documento, libre de material adicional. Si utiliza la última opción, debe tomar medidas razonablemente prudentes, cuando comience la distribución de copias Opacas en cantidad, para garantizar que esta copia Transparente permanezca accesible en la ubicación indicada hasta al menos un año después de la última vez que distribuya una copia Opaca (directamente o a través de sus agentes o minoristas) de esa edición al público.

Se solicita, aunque no es obligatorio, que se ponga en contacto con los autores del Documento bien antes de redistribuir un número grande de copias, para darles la oportunidad de proporcionarle una versión actualizada del Documento.

C5 4. MODIFICACIONES

Puede copiar y distribuir una Versión modificada del Documento bajo las condiciones de las secciones 2 y 3 anteriores, siempre que publique la Versión modificada bajo esta misma Licencia, con la Versión modificada desempeñando el papel del Documento, otorgando así licencia de distribución y modificación de la Versión modificada a quien posea una copia de ella. Además, debe hacer lo siguiente en la Versión modificada:

  1. Usar en la Portada (y en las cubiertas, si hay alguna) un título distinto al del Documento y al de las versiones anteriores (que deberían, si las hay, estar listadas en la sección de Historia del Documento). Puede usar el mismo título que una versión anterior si el editor original de esa versión le da permiso.

  2. Debe enumerar en la Portada, como autores, a una o más personas o entidades responsables de la autoría de las modificaciones en la Versión modificada, junto con al menos cinco de los autores principales del Documento (todos sus autores principales, si hay menos de cinco), a menos que le eximan de este requisito.

  3. Indicar en la Portada el nombre del editor de la Versión modificada, como el editor.

  4. Conservar todos la información de copyright del Documento.

  5. Añada la información de copyright apropiada para sus modificaciones junto a la otra información de copyright.

  6. Incluir, inmediatamente después de la información de copyright, un aviso de licencia que otorgue al público permiso para usar la Versión modificada bajo los términos de esta Licencia, en la forma mostrada en el Anexo a continuación.

  7. Conservar en ese aviso de licencia el listado completo de las Secciones fijas y de los Textos de cubierta que sean requeridos en el aviso de Licencia del Documento.

  8. Incluir una copia sin modificación de esta Licencia.

  9. Conservar la sección titulada "Historia", conservar su Título y añadirle un elemento que declare al menos el título, el año, los nuevos autores y el editor de la Versión modificada, tal como figuran en la Portada. Si no hay una sección titulada "Historia" en el Documento, deberá crear una estableciendo el título, el año, los autores y el editor del Documento, tal como figuran en su Portada, añadiendo además un elemento que describa la Versión modificada, como se estableció anteriormente.

  10. Conservar la dirección en red, si la hay, indicada en el Documento para el acceso público a una copia Transparente del mismo, así como las otras direcciones de red incluidas en el Documento para versiones anteriores en las que estuviese basado. Pueden ubicarse en la sección "Historia". Se puede omitir la dirección en red de un trabajo que haya sido publicado al menos cuatro años antes que el propio Documento, o si el editor original de dicha versión da permiso.

  11. En cualquier sección titulada "Agradecimientos" o "Dedicatorias", conserve el título de la sección y mantenga en ella toda la sustancia y el tono de los agradecimientos y/o dedicatorias proporcionados por cada colaborador.

  12. Conservar todas las Secciones fijas del Documento, sin alterar su texto ni sus títulos. Los números de sección o el equivalente no se consideran parte de los títulos de la sección.

  13. Borre cualquier sección titulada "Aprobaciones". Dicha sección no puede estar incluida en la Versión modificada.

  14. No cambie el título de ninguna sección existente a "Aprobaciones" ni a otro título que entre en conflicto con el de alguna Sección fija.

  15. Conserve todas las Limitaciones de garantía.

Si la Versión modificada incluye secciones o apéndices nuevos que se puedan considerar como Secciones secundarias y que no contengan material copiado del Documento, puede, opcionalmente, designar algunas o todas esas secciones como fijas. Para hacerlo, añada sus títulos a la lista de Secciones fijas en el aviso de licencia de la Versión modificada. Tales títulos deben ser distintos de cualquier otro título de sección.

Puede añadir una sección titulada "Aprobaciones", siempre que contenga únicamente aprobaciones de su Versión modificada otorgadas por otras fuentes--; por ejemplo, declaraciones de revisión por pares o que el texto haya sido aprobado por una organización como la definición oficial de un estándar.

Puede añadir un pasaje de hasta cinco palabras como Texto de cubierta delantera y un pasaje de hasta 25 palabras como Texto de cubierta trasera al final de la lista de textos de cubierta en la Versión modificada. Una entidad solo puede añadir (o hacer que se añada) un pasaje como Texto de cubierta delantera y uno como Texto de cubierta trasera. Si el Documento ya incluye un texto de cubierta para la misma cubierta, añadido previamente por usted o por la misma entidad a la que representa, no podrá añadir otro; pero podrá reemplazar el anterior, con el permiso explícito del editor que lo añadió.

Con esta Licencia, ni los autores ni los editores del Documento dan permiso para usar sus nombres para publicidad ni para asegurar o implicar aprobación de cualquier Versión modificada.

C6 5. COMBINACIÓN DE DOCUMENTOS

Usted puede combinar el Documento con otros documentos sujetos a esta Licencia, bajo los términos definidos en la sección 4 anterior para versiones modificadas, siempre que incluya en la combinación todas las Secciones fijas de todos los documentos originales, sin modificarlas, las liste todas como Secciones fijas de su trabajo combinado en su aviso de licencia, y que preserve todas sus renuncias de garantía.

El trabajo combinado necesita contener solamente una copia de esta Licencia, y puede reemplazar varias Secciones fijas idénticas por una sola copia. Si hay varias Secciones fijas con el mismo nombre pero con contenidos diferentes, haga que el título de cada una de estas secciones sea único añadiéndole al final del mismo, entre paréntesis, el nombre del autor o editor original de esa sección, si es conocido, o de lo contrario, un número único. Haga el mismo ajuste a los títulos de sección en la lista de Secciones fijas del aviso de licencia del trabajo combinado.

En la combinación, debe incluir cualquier sección titulada "Historia" de los documentos originales, formando una única sección con el mismo título; de la misma forma combine cualquier sección titulada "Agradecimientos" o "Dedicatorias". Debe borrar todas las secciones tituladas "Aprobaciones".

C7 6. COLECCIONES DE DOCUMENTOS

Puede hacer una colección que conste del Documento y de otros documentos sujetos a esta Licencia, y reemplazar las copias individuales de esta Licencia de cada uno de los documentos por una sola copia que esté incluida en la colección, siempre que siga las indicaciones de esta Licencia para la copia literal de los documentos en cualquiera de los demás aspectos.

Puede extraer un solo documento de una colección de este tipo y distribuirlo individualmente con esta Licencia, siempre que inserte una copia de esta Licencia en el documento extraído, y siga las estipulaciones de esta Licencia en todos los demás aspectos relativos a la copia literal del documento.

C8 7. AGREGACIÓN CON TRABAJOS INDEPENDIENTES

Una recopilación que conste del Documento o sus derivados y de otros documentos o trabajos separados e independientes, en cualquier medio de almacenamiento o distribución, se denomina un "agregado" si el copyright resultante de la compilación no se usa para limitar los derechos legales de los usuarios de la compilación más allá de lo que permiten los trabajos individuales. Cuando el Documento se incluye en un agregado, esta Licencia no se aplica a otros trabajos del agregado que no sean en sí mismos derivados del Documento.

Si el requisito de la sección 3 sobre el Texto de cubierta es aplicable a estas copias del Documento y el Documento es menor que la mitad del agregado entero, los Textos de cubierta del Documento pueden colocarse en cubiertas que enmarquen solamente el Documento dentro del agregado, o el equivalente electrónico de las cubiertas, si el documento está en formato electrónico. En caso contrario, deben aparecer en cubiertas impresas que enmarquen todo el agregado.

C9 8. TRADUCCIÓN

La traducción se considera un tipo de modificación, por lo que puede distribuir las traducciones del Documento según los términos de la sección 4. La sustitución de las secciones invariables por traducciones requiere un permiso especial de los titulares de los derechos de autor, pero puede incluir traducciones de algunas o todas las secciones invariables además de las versiones originales de estas secciones. Puede incluir una traducción de esta Licencia, de todas las notas de licencia del documento, así como de las Limitaciones de garantía, siempre que incluya también su versión en inglés y las versiones originales de los avisos de licencia y Limitaciones de garantía. En caso de que haya discrepancias entre la traducción y la versión original en inglés de esta Licencia, el aviso de licencia o la limitación de garantía, prevalecerá la versión original en inglés.

Si una sección del Documento está titulada "Agradecimientos", "Dedicatorias" o "Historia", el requisito (sección 4) de conservar su título (sección 1) requerirá, normalmente, que se cambie su título.

C10 9. TERMINACIÓN

No puede copiar, modificar, sublicenciar ni distribuir el Documento excepto según lo dispuesto expresamente en esta Licencia. Cualquier otro intento de copiar, modificar, sublicenciar o distribuir el Documento es nulo y terminará automáticamente sus derechos en virtud de esta Licencia. Sin embargo, las partes que hayan recibido copias o derechos de usted bajo esta Licencia no verán terminadas sus licencias mientras dichas partes continúen cumpliendo plenamente con esta Licencia.

C11 1. REVISIONES FUTURAS DE ESTA LICENCIA

La Free Software Foundation puede publicar versiones nuevas o revisadas de la Licencia de documentación gratuita de GNU de forma periódica. Estas nuevas versiones serán similares en espíritu a esta versión, pero pueden incluir detalles distintos para tratar problemas o preocupaciones nuevos. Consulte la https://www.gnu.org/copyleft/.

A cada versión de la Licencia se le asigna un número de versión distintivo. Si el Documento especifica que está sujeto a un número de versión concreto de esta Licencia "o cualquier versión posterior", tendrá la opción de seguir las cláusulas de dicha versión o de cualquier versión posterior que haya publicado la Free Software Foundation (que no sea un borrador). Si el Documento no especifica un número de versión de esta Licencia, puede elegir cualquier versión que haya publicado la Free Software Foundation (que no sea un borrador).

C12 ANEXO: cómo usar esta Licencia en sus documentos

  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 tenéis Secciones invariantes, Textos de cubierta delantera y Textos de cubierta trasera, reemplazad la línea "con…​Textos." por esto:

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

Si tenéis Secciones invariantes sin Textos de cubierta, o alguna otra combinación de los tres, fusionad esas dos alternativas para adaptarse a la situación.

Si su documento contiene ejemplos no triviales de código de programa, recomendamos liberar estos ejemplos en paralelo bajo la licencia de software libre que elija, como la Licencia Pública General de GNU, para permitir su uso en software libre.