- Release notes
- Copyright
- 1 Introducción
- 2 Requisitos
- 3 Instalación utilizando la interfaz Rancher
- 4 Instalación utilizando la línea de comando
- 5 Alta disponibilidad configuración
- 6 Configurar Rancher como un Proveedor de Identidad OIDC
- 7 Preguntas frecuentes
- 8 Solución de problemas
- A Sobrescribiendo el gráfico SUSE Private Registry Helm
- B Ejemplo de un gráfico de Registro Privado configuración de HA Helm
- C Licencia de documentación gratuita de GNU
- C1 0. PREÁMBULO
- C2 1. APLICACIÓN Y DEFINICIONES
- C3 2. COPIA LITERAL
- C4 3. GRANDES CANTIDADES DE COPIAS
- C5 4. MODIFICACIONES
- C6 5. COMBINACIÓN DE DOCUMENTOS
- C7 6. COLECCIONES DE DOCUMENTOS
- C8 7. AGREGACIÓN CON TRABAJOS INDEPENDIENTES
- C9 8. TRADUCCIÓN
- C10 9. TERMINACIÓN
- C11 1. REVISIONES FUTURAS DE ESTA LICENCIA
- C12 ANEXO: cómo usar esta Licencia en sus documentos
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:
Updates Harbor 2.14.3 to 2.15.1 (Release Notes v2.15.1).
Updates Trivy version 0.68.2 to 0.70.0 with adapter v0.36.0 general availability (GA) (Release Notes v0.70.0).
Component updates:
Updates
k8s.io/client-goto 0.34.1.Updates
aws-sdk-goto 1.55.8.Updates
go-ldapto 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.Builderandstrings.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-composev1 anddocker-composev2.Calls the
/v2/auth/tokenapplication 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
timeoutSecondsandfailureThresholdconfigurable via values.Fixes extra environment variables for the exporter.
Installs
PodDisruptionBudgetresources when the replica count is greater than one.
Upgrade notes:
No breaking changes in this release.
2 Release 1.1.3 #
Security updates:
Updates Harbor 2.14.2 to 2.14.4 (Release Notes v2.14.4).
Updates Trivy version 0.68.2 to 0.70.0 with adapter v0.36.0 (Release Notes v0.70.0).
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/tokenAPI 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:
Update Harbor 2.14.1 to 2.14.2 (Release Notes v2.14.2)
Trivy version update 0.67.2 to 0.68.2 (Release Notes v0.68.2)
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:
Updated Harbor 2.13.2 to 2.14.1 (Release Notes v2.14.1)
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
--internalnetworks remain protected).CVE-2025-29923: go-redis allows potential out of order responses when
CLIENT SETINFOtimes 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)
Copyright #
Copyright © 20XX–2026-07-09 SUSE LLC y colaboradores. Reservados todos los derechos.
Está permitido copiar, distribuir y modificar este documento según los términos de la licencia de documentación gratuita GNU, versión 1.2 o (según su criterio) versión 1.3; siendo la sección invariable esta información de copyright y licencia. En la sección titulada 'Licencia de Documentación Gratuita GNU' se incluye una copia de la versión 1.2 de la licencia.
Para SUSE marcas comerciales, ver https://www.suse.com/company/legal/. Todas las marcas comerciales de terceros son propiedad de sus respectivos propietarios. Los símbolos de marcas comerciales (®, ™, etc.) indican marcas comerciales de SUSE y sus filiales. Los asteriscos (*) indican marcas comerciales de otros fabricantes.
Toda la información recogida en esta publicación se ha compilado prestando toda la atención posible al más mínimo detalle. Sin embargo, esto no garantiza una precisión total. Ni SUSE LLC, ni sus filiales, ni los autores ni los traductores serán responsables de los posibles errores o de las consecuencias que de ellos pudieran derivarse.
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:
La página de inicio del proyecto Harbor está en https://goharbor.io/.
El uso de Harbor se detalla en https://goharbor.io/docs.
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
| Ámbito | Punto 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 #
| Componente | Tamaño de gráfico predeterminado | Tamañ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? #
Inicia sesión en Rancher.
Haz clic en el menú de tres líneas (☰) en la esquina superior izquierda, selecciona , y haz clic en el nombre de tu clúster, que suele ser
local.Desde el menú de la izquierda, selecciona › .
Haz clic en el botón en la parte superior derecha y completa el formulario que se abre:
Destino: Selecciona .
Nombre: Introduce un nombre para el repositorio, como
SUSE Private Registry.Descripción: Opcionalmente, añade una descripción del repositorio.
URL del Host del Repositorio OCI: Enter `oci://registry.suse.com/private-registry/private-registry-helm`.
Autenticación: Cambia a
Create an HTTP Basic Auth Secrete introduce el nombre de usuario y la contraseña de las credenciales del registro.
Confirma con .
Haz clic en el menú de tres líneas (☰) en la esquina superior izquierda y selecciona .
Cambia al clúster al que deseas añadir el secreto y haz clic en .
Para navegar a la gestión de secretos, selecciona › y haz clic en en la parte superior derecha.
Selecciona el secreto y luego el espacio de nombres
private-registry.Introduce
suse-registrycomo el nombre del secreto.Rellena los campos
usernameypasswordcon las credenciales SUSE obtenidas en Section 3.1, “¿Qué requisitos necesito cumplir?”.
Desde el menú principal de la izquierda, selecciona › .
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 .Haz clic en el chart y visualiza el
README.md.Opcionalmente, puedes personalizar los valores de instalación. Puedes hacer clic en las secciones del lado izquierdo del panel
Edit Optionspara ver todos los valores que puedes configurar, o editar los valores directamente en el archivo YAML del chart.En la esquina superior derecha, haz clic en .
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:
Visita SUSE Centro de servicios al cliente en https://scc.suse.com e inicia sesión.
Selecciona la organización con una suscripción Registro Privado activa en la barra lateral izquierda.
Selecciona
Proxiesen el menú superior. Las credenciales se muestran en la esquina superior derecha.Para ver la contraseña, haz clic en el icono de 'ojo'.
Crea un archivo
password.txtque contenga la contraseña obtenida.>head -1 ./password.txt | helm registry login registry.suse.com \ --username <PRIVATE_REGISTRY_USERNAME> --password-stdinCrea un espacio de nombres para SUSE Registro.
>kubectl create namespace <PRIVATE_REGISTRY_NAMESPACE>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)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.
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-stdinInstala 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>
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; echoEs 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 #
Descargar el gráfico Registro Privado Helm.
$ helm pull oci://registry.suse.com/private-registry/private-registry-helm --untar
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.
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 #
Inicia sesión en la interfaz de usuario de Rancher como administrador.
Haz clic en el menú de tres líneas (☰) en la parte superior izquierda y ve a › .
Encuentra la bandera
oidc-provider, haz clic en el icono de Más Acciones (⋮) y haz clic en Activar.
6.2 Paso 2: Crear un recurso OIDCClient #
Rancher utiliza un recurso personalizado OIDCClient para registrar aplicaciones en sentido descendente.
Crea un archivo llamado
rancher-oidc-client.yamlcon 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"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.
Obtén el ID de Cliente generado:
>kubectl get oidcclient spr-client -o jsonpath="{.status.clientID}"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"
}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
cosignadjuntas 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 unauthorizedal 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
--seten la línea de comandoshelm 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.yamlfile and pass it to the--fflag, 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 #
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>"
Cómo se expone SUSE Registro. Puede ser | |
Nombre de host para la configuración de red interna del Kubernetes. | |
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. | |
La contraseña del administrador para la aplicación. |
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>"
Cómo se expone SUSE Registro. Puede ser | |
Puede ser | |
Al utilizar cifrado TLS, este campo debe coincidir con el valor | |
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. | |
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.
global.imageRegistryEstablece una sobrescritura global para el registro de imágenes del contenedor utilizado para todas las imágenes.
global.imagePullSecretsEstablece secretos de acceso globales para acceder al registro de imágenes del contenedor.
harborAdminPasswordEstablece 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.externalURLEspecifica la URL externa para el servicio
harbor-core. El valor por defecto eshttps://core.harbor.domain.existingSecretAdminPasswordKeyEstablece 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.imagePullSecretsEstablece los nombres de
imagePullSecretspara todas las ampliaciones.updateStrategy.typeEstablece la estrategia de actualización para las ampliaciones con volúmenes persistentes. Acepta
RollingUpdateoRecreate. UsaRecreatecuando RWM para volúmenes no esté soportado. El valor por defecto esRollingUpdate.logLevelEstablece el nivel de registro para los servicios Harbor. Acepta
fatal,error,warn,info,debugotrace. El valor por defecto esdebug.enableMigratehelmHookEjecuta la tarea de migración de base de datos a través del gancho Helm. Cuando
true, separa la tarea de migración deharbor-core. El valor por defecto esfalse.caSecretNameEspecifica el nombre del secreto que contiene la clave
ca.crt.
proxy.httpProxyEspecifica la URL del servidor proxy HTTP. El valor por defecto es
"".proxy.httpsProxyEspecifica la URL del servidor proxy HTTPS. El valor por defecto es
"".proxy.noProxyEstablece las URLs que omiten la configuración del proxy. El valor por defecto es
127.0.0.1,localhost,.local,.internal.proxy.componentsEstablece los componentes que utilizan la configuración del proxy. El valor por defecto es
["core","jobservice","trivy"].
expose.typeEspecifica el tipo de exposición del servicio:
ingress,clusterIP,nodePortoloadBalancer. El valor por defecto esingress.expose.tls.enabledHabilita TLS. El valor por defecto es
true.expose.tls.certSourceEstablece la fuente del certificado TLS como
auto,secretonone. El valor por defecto esauto.expose.tls.auto.commonNameEstablece el nombre común del certificado cuando el tipo no es
ingress.expose.tls.secret.secretNameEspecifica el nombre del secreto que contiene
tls.crt(certificado) ytls.key(clave privada).expose.ingress.hosts.coreEstablece el host del servicio kernel Harbor en la regla Ingress. El valor por defecto es
core.harbor.domain.expose.ingress.controllerEstablece el tipo de controlador Ingress. Admite
default,gce,alb,f5-bigipyncp. El valor por defecto esdefault.expose.ingress.kubeVersionOverrideSobrescribe la versión Kubernetes para la plantilla Ingress.
expose.ingress.annotationsEstablece las anotaciones Ingress.
expose.ingress.labelsEstablece etiquetas específicas de Ingress. El valor por defecto es
{}.expose.clusterIP.nameEstablece el nombre del servicio ClusterIP. El valor por defecto es
harbor.expose.clusterIP.annotationsEstablece las anotaciones del servicio ClusterIP. El valor por defecto es
{}.expose.clusterIP.ports.httpPortEstablece el puerto del servicio HTTP. El valor por defecto es
80.expose.clusterIP.ports.httpsPortEstablece el puerto del servicio HTTPS. El valor por defecto es
443.expose.clusterIP.labelsEstablece etiquetas específicas de ClusterIP. El valor por defecto es
{}.expose.nodePort.nameEstablece el nombre del servicio NodePort. El valor por defecto es
harbor.expose.nodePort.ports.http.portEstablece el puerto del servicio HTTP. El valor por defecto es
80.expose.nodePort.ports.http.nodePortEstablece el puerto del nodo HTTP. El valor por defecto es
30002.expose.nodePort.ports.https.portEstablece el puerto del servicio HTTPS. El valor por defecto es
443.expose.nodePort.ports.https.nodePortEstablece el puerto del nodo HTTPS. El valor por defecto es
30003.expose.nodePort.annotationsEstablece las anotaciones de NodePort.
expose.nodePort.labelsEstablece etiquetas específicas de NodePort. El valor por defecto es
{}.expose.loadBalancer.nameEstablece el nombre del servicio. El valor por defecto es
harbor.expose.loadBalancer.IPEstablece la IP del loadBalancer cuando se admite la asignación de IP. El valor por defecto es
"".expose.loadBalancer.ports.httpPortEstablece el puerto del servicio HTTP. El valor por defecto es
80.expose.loadBalancer.ports.httpsPortEstablece el puerto del servicio HTTPS. El valor por defecto es
30002.expose.loadBalancer.annotationsEstablece las anotaciones del servicio loadBalancer. El valor por defecto es
{}.expose.loadBalancer.labelsEstablece etiquetas específicas del balanceador de carga. El valor por defecto es
{}.expose.loadBalancer.sourceRangesEspecifica rangos de direcciones IP para loadBalancerSourceRanges. El valor por defecto es
[].
persistence.enabledHabilita o deshabilita la persistencia de datos. El valor por defecto es
true.persistence.resourcePolicykeepimpide 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 eskeep.persistence.persistentVolumeClaim.registry.existingClaimEl 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.storageClassEl
storageClassque aprovisiona el volumen.persistence.persistentVolumeClaim.registry.subPathEl subpath en el volumen.
persistence.persistentVolumeClaim.registry.accessModeEl modo de acceso del volumen. El valor por defecto es
ReadWriteOnce.persistence.persistentVolumeClaim.registry.sizeEl tamaño del volumen. El valor por defecto es
5Gi.persistence.persistentVolumeClaim.registry.annotationsLas anotaciones del volumen.
persistence.persistentVolumeClaim.jobservice.jobLog.existingClaimEl 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.storageClassEl
storageClassque aprovisiona el volumen.persistence.persistentVolumeClaim.jobservice.jobLog.subPathEl subpath en el volumen.
persistence.persistentVolumeClaim.jobservice.jobLog.accessModeEl modo de acceso del volumen. El valor por defecto es
ReadWriteOnce.persistence.persistentVolumeClaim.jobservice.jobLog.sizeEl tamaño del volumen. El valor por defecto es
1Gi.persistence.persistentVolumeClaim.jobservice.jobLog.annotationsLas anotaciones del volumen.
persistence.persistentVolumeClaim.database.existingClaimEl 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.storageClassEl
storageClassque aprovisiona el volumen.persistence.persistentVolumeClaim.database.subPathEl subpath en el volumen. Ignorado cuando se utiliza una base de datos externa.
persistence.persistentVolumeClaim.database.accessModeEl modo de acceso del volumen. Ignorado cuando se utiliza una base de datos externa. El valor por defecto es
ReadWriteOnce.persistence.persistentVolumeClaim.database.sizeEl tamaño del volumen. Ignorado cuando se utiliza una base de datos externa. El valor por defecto es
1Gi.persistence.persistentVolumeClaim.database.annotationsLas anotaciones del volumen.
persistence.persistentVolumeClaim.redis.existingClaimEl 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.storageClassEl
storageClassque aprovisiona el volumen. Utiliza la StorageClass predeterminada si no se especifica.persistence.persistentVolumeClaim.redis.subPathEl subpath en el volumen. Ignorado cuando se utiliza un Valkey externo.
persistence.persistentVolumeClaim.redis.accessModeEl modo de acceso del volumen. Ignorado cuando se utiliza un Valkey externo. El valor por defecto es
ReadWriteOnce.persistence.persistentVolumeClaim.redis.sizeEl tamaño del volumen. Ignorado cuando se utiliza un Valkey externo. El valor por defecto es
1Gi.persistence.persistentVolumeClaim.redis.annotationsLas anotaciones del volumen.
persistence.persistentVolumeClaim.trivy.existingClaimEl 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.storageClassEl
storageClassque aprovisiona el volumen. Utiliza la StorageClass predeterminada si no se especifica.persistence.persistentVolumeClaim.trivy.subPathEl subpath en el volumen.
persistence.persistentVolumeClaim.trivy.accessModeEl modo de acceso del volumen. El valor por defecto es
ReadWriteOnce.persistence.persistentVolumeClaim.trivy.sizeEl tamaño del volumen. El valor por defecto es
1Gi.persistence.persistentVolumeClaim.trivy.annotationsLas anotaciones del volumen.
persistence.imageChartStorage.disableredirectControla 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.caBundleSecretNameEl nombre del secreto que contiene el paquete CA para certificados de servicio de almacenamiento autofirmados.
persistence.imageChartStorage.typeEl tipo de almacenamiento para imágenes y gráficos:
filesystem,azure,gcs,s3,swiftooss. El valor por defecto esfilesystem.persistence.imageChartStorage.gcs.existingSecretEl 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.useWorkloadIdentityHabilita el uso de identidad de carga de trabajo en un clúster GKE. El valor por defecto es
false.
nginx.image.repositoryEl repositorio de imágenes para nginx. El valor por defecto es
private-registry/harbor-nginx.nginx.image.tagLa etiqueta de imagen para nginx.
nginx.replicasEl número de réplicas a ejecutar. El valor por defecto es
1.nginx.revisionHistoryLimitEl número máximo de revisiones antiguas de
ReplicaSeta retener. El valor por defecto es10.nginx.resourcesLos recursos de computación asignados al contenedor. El valor por defecto es
undefined.nginx.automountServiceAccountTokenControla el montaje automático del token de la cuenta de servicio. El valor por defecto es
false.nginx.nodeSelectorLas etiquetas de nodo utilizadas para la asignación de pods. El valor por defecto es
{}.nginx.tolerationsLas tolerancias de asignación de pods. El valor por defecto es
[].nginx.affinityLas reglas de afinidad de nodo o pod. El valor por defecto es
{}.nginx.topologySpreadConstraintsLas reglas para distribuir pods a través de dominios de fallo como regiones o zonas de disponibilidad. El valor por defecto es
[].nginx.podAnnotationsLas anotaciones añadidas al pod de nginx. El valor por defecto es
{}.
portal.image.repositoryUbicación del repositorio para la imagen del portal. El valor por defecto es
private-registry/harbor-portal.portal.image.tagEtiqueta para la imagen del portal. El valor por defecto es
3.11.portal.replicasNúmero de réplicas a crear. El valor por defecto es
1.portal.revisionHistoryLimitNúmero máximo de revisiones antiguas de
ReplicaSeta retener. El valor por defecto es10.portal.resourcesRecursos asignados al contenedor. El valor por defecto es
undefined.portal.automountServiceAccountTokenControla el montaje automático del token de la cuenta de servicio. El valor por defecto es
false.portal.nodeSelectorEtiquetas de nodo utilizadas para la asignación de pods. El valor por defecto es
{}.portal.tolerationsTolerancias utilizadas para la asignación de pods. El valor por defecto es
[].portal.affinityConfiguraciones de afinidad de nodo y pod. El valor por defecto es
{}.portal.topologySpreadConstraintsDefine la distribución de pods a través de dominios de fallo como regiones o zonas de disponibilidad. El valor por defecto es
[].portal.podAnnotationsAnotaciones añadidas al pod del portal. El valor por defecto es
{}.portal.serviceAnnotationsAnotaciones añadidas al servicio del portal. El valor por defecto es
{}.portal.priorityClassNameNombre de la clase de prioridad para la ejecución del pod.
portal.initContainersContenedores de inicialización que se ejecutarán antes de que comience el contenedor del controlador. El valor por defecto es
[].
core.image.repositoryEl repositorio para la imagen kernel Harbor. El valor por defecto es
private-registry/harbor-core.core.image.tagLa etiqueta para la imagen kernel Harbor. El valor por defecto es
2.11.core.replicasEl número de réplicas. El valor por defecto es
1.core.revisionHistoryLimitEl límite de historial de revisiones. El valor por defecto es
10.core.startupProbe.initialDelaySecondsEl retraso inicial en segundos para la prueba de inicio. El valor por defecto es
10.core.resourcesLos recursos a asignar para el contenedor. El valor por defecto es
undefined.core.automountServiceAccountTokenMonta el token de cuenta de servicio. El valor por defecto es
false.core.nodeSelectorLas etiquetas de nodo para la asignación de pods. El valor por defecto es
{}.core.tolerationsLas tolerancias para la asignación de pods. El valor por defecto es
[].core.affinityLas afinidades de nodo o pod. El valor por defecto es
{}.core.topologySpreadConstraintsLas 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.podAnnotationsLas anotaciones que se deben añadir al pod del kernel. El valor por defecto es
{}.core.serviceAnnotationsLas anotaciones que se deben añadir al servicio del kernel. El valor por defecto es
{}.core.configureUserSettingsUna cadena JSON en la variable de entorno CONFIG_OVERWRITE_JSON para configurar los ajustes del usuario.
core.quotaUpdateProviderEl proveedor para actualizar el uso de cuota del proyecto, las opciones son
redisodb. El valor por defecto esdb.core.secretSe utiliza cuando el servidor kernel se comunica con otros componentes.
core.secretNameEl nombre de un secreto Kubernetes para utilizar su propio certificado TLS y clave privada para la encriptación o desencriptación de tokens.
core.tokenKeyLa clave privada RSA en formato PEM utilizada para firmar tokens de servicio.
core.tokenCertEl certificado en formato PEM firmado por
core.tokenKeyutilizado para validar tokens de servicio.core.xsrfKeyLa clave XSRF, generada automáticamente si no se especifica.
core.priorityClassNameLa clase de prioridad para ejecutar el pod.
core.artifactPullAsyncFlushDurationLa duración para actualizar de forma asíncrona el tiempo de extracción de artefactos y el recuento de extracciones del repositorio.
core.gdpr.deleteUserHabilita la eliminación de usuarios conforme al RGPD. El valor por defecto es
false.core.gdpr.auditLogsCompliantHabilita 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.initContainersLos contenedores de inicialización que se deben ejecutar antes de que comience el contenedor del controlador. El valor por defecto es
[].
jobservice.image.repositoryEl repositorio para la imagen del servicio de trabajos. El valor por defecto es
private-registry/harbor-jobservice.jobservice.image.tagLa etiqueta para la imagen del servicio de trabajos. El valor por defecto es
2.11.jobservice.replicasEl número de réplicas. El valor por defecto es
1.jobservice.revisionHistoryLimitEl límite de historial de revisiones. El valor por defecto es
10.jobservice.maxJobWorkersEl número máximo de trabajadores de trabajos. El valor por defecto es
10.jobservice.jobLoggersLos registradores para trabajos:
file,databaseostdout. El valor por defecto es[file].jobservice.loggerSweeperDurationLa duración en días para mantener los registros de trabajo (ignorada si
jobLoggersestá configurado enstdout). El valor por defecto es14.jobservice.notification.webhook_job_max_retryEl 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_timeoutEl 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_hoursEl 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_hoursEl 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.resourcesLos [recursos] a asignar para el contenedor. El valor por defecto es
undefined.jobservice.automountServiceAccountTokenMonta el token de cuenta de servicio. El valor por defecto es
false.jobservice.nodeSelectorLas etiquetas de nodo para la asignación de pods. El valor por defecto es
{}.jobservice.tolerationsLas tolerancias para la asignación de pods. El valor por defecto es
[].jobservice.affinityLas afinidades de nodo o pod. El valor por defecto es
{}.jobservice.topologySpreadConstraintsLas 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.podAnnotationsLas anotaciones a añadir al pod del servicio de trabajos. El valor por defecto es
{}.jobservice.priorityClassNameLa clase de prioridad para ejecutar el pod.
jobservice.secretEl 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.initContainersLos contenedores de inicialización que se deben ejecutar antes de que comience el contenedor del controlador. El valor predeterminado es
[].
registry.registry.image.repositoryLa ubicación del repositorio para la imagen del registro. El valor predeterminado es
private-registry/harbor-registry.registry.registry.image.tagLa etiqueta para la imagen del registro. El valor predeterminado es
2.11.registry.registry.resourcesLos [recursos] a asignar para el contenedor. El valor predeterminado es
undefined.registry.controller.image.repositoryLa ubicación del repositorio para la imagen del controlador del registro. El valor predeterminado es
private-registry/harbor-registryctl.registry.controller.image.tagLa etiqueta para la imagen del controlador del registro. El valor predeterminado es
2.11.registry.controller.resourcesLos [recursos] a asignar para el contenedor. El valor predeterminado es
undefined.registry.replicasEl número de réplicas. El valor predeterminado es
1.registry.revisionHistoryLimitEl número máximo de revisiones a mantener en el historial. El valor predeterminado es
10.registry.nodeSelectorLas etiquetas de nodo para la asignación de pods. El valor predeterminado es
{}.registry.automountServiceAccountTokenControla si se debe montar el token de la cuenta de servicio. El valor predeterminado es
false.registry.tolerationsLas tolerancias para la asignación de pods. El valor predeterminado es
[].registry.affinityLas afinidades de nodo o pod. El valor predeterminado es
{}.registry.topologySpreadConstraintsLas 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.middlewareSoporte de middleware para un CDN entre el almacenamiento de sistema secundario y Docker destinatario de extracción.
registry.podAnnotationsLas anotaciones que se deben añadir al pod del registro. El valor predeterminado es
{}.registry.priorityClassNameLa clase de prioridad para la ejecución del pod.
registry.secretEl secreto que asegura el estado de carga entre el cliente y el almacenamiento de sistema secundario del registro.
registry.credentials.usernameEl nombre de usuario para el acceso interno del registro del kernel de Harbor. El valor por defecto es
harbor_registry_user.registry.credentials.passwordLa contraseña para el acceso interno del registro del kernel de Harbor. El valor por defecto es
harbor_registry_password.registry.credentials.existingSecretUn 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.htpasswdStringEl inicio de sesión y la contraseña en formato de cadena htpasswd. Excluye
registry.credentials.usernameyregistry.credentials.password. El valor por defecto esundefined.registry.relativeurlsDevuelve 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.enabledHabilita la purga de directorios de carga. El valor predeterminado es
true.registry.upload_purging.ageEl 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.intervalEl intervalo de tiempo entre operaciones de purga. El valor por defecto es
24h.registry.upload_purging.dryrunHabilita el modo de prueba para la purga de cargas. El valor por defecto es
false.registry.initContainersLos contenedores de inicialización que se deben ejecutar antes de que comience el contenedor del controlador. El valor por defecto es
[].
trivy.enabledHabilita o deshabilita el escáner de Trivy. El valor por defecto es
true.trivy.image.repositoryEl repositorio para la imagen del adaptador Trivy. El valor por defecto es
private-registry/harbor-trivy-adapter.trivy.image.tagLa etiqueta para la imagen del adaptador Trivy. El valor por defecto es
2.11.trivy.resourcesLos recursos a asignar para el contenedor del adaptador Trivy. El valor por defecto es
undefined.trivy.automountServiceAccountTokenSi montar el token de la cuenta de servicio. El valor por defecto es
false.trivy.replicasEl número de réplicas de Pod. El valor por defecto es
1.trivy.debugModeHabilita el modo de depuración de Trivy para la resolución de problemas. El valor por defecto es
false.trivy.vulnTypeLista de tipos de vulnerabilidades separados por comas (
osylibrary). El valor por defecto esos,library.trivy.severityLista de severidades de vulnerabilidades a comprobar, separadas por comas. El valor por defecto es
UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL.trivy.ignoreUnfixedMuestra solo vulnerabilidades corregidas. El valor por defecto es
false.trivy.insecureSalta la verificación del certificado del registro. El valor por defecto es
false.trivy.skipUpdateDesactiva las descargas de bases de datos Trivy desde GitHub. El valor por defecto es
false.trivy.skipJavaDBUpdateRequiere la descarga manual del archivo
trivy-java.dbcuando está habilitado. El valor por defecto esfalse.trivy.offlineScanPreviene que Trivy envíe solicitudes API para identificar dependencias. El valor por defecto es
false.trivy.securityCheckLista de problemas de seguridad a detectar, separados por comas. El valor por defecto es
vuln.trivy.timeoutLa duración de espera para la finalización del escaneo. El valor por defecto es
5m0s.trivy.gitHubTokenEl token de acceso de GitHub requerido para las descargas de la base de datos. El valor por defecto es
undefined.trivy.priorityClassNameLa clase de prioridad para ejecutar el pod. El valor por defecto es
undefined.trivy.topologySpreadConstraintsDefine las restricciones de distribución del pod a través de dominios de fallo. El valor por defecto es
undefined.trivy.initContainersLista de contenedores de inicialización que se ejecutarán antes de que comience el contenedor principal. El valor por defecto es
[].
database.typeEl tipo de base de datos. Establecer en
externalal usar una base de datos externa. El valor por defecto esinternal.database.internal.image.repositoryEl repositorio para la imagen de la base de datos. El valor por defecto es
private-registry/harbor-db.database.internal.image.tagLa etiqueta para la imagen de la base de datos. El valor por defecto es
2.11.database.internal.passwordLa contraseña para la base de datos interna. El valor por defecto es
changeit.database.internal.shmSizeLimitEl 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.resourcesLos recursos asignados para el contenedor de la base de datos. El valor por defecto es
undefined.database.internal.automountServiceAccountTokenControla si el token de la cuenta de servicio está montado. El valor por defecto es
false.database.internal.initContainer.migrator.resourcesLos 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.resourcesLos recursos asignados para el contenedor de inicialización de permisos de la base de datos. El valor por defecto es
undefined.database.internal.nodeSelectorLas etiquetas de nodo para la asignación de pods. El valor por defecto es
{}.database.internal.tolerationsLas tolerancias para la asignación de pods. El valor por defecto es
[].database.internal.affinityLa configuración de afinidad de nodo o pod. El valor por defecto es
{}.database.internal.priorityClassNameLa clase de prioridad para ejecutar el pod. El valor por defecto es
undefined.database.internal.livenessProbe.timeoutSecondsEl tiempo de espera en segundos para la prueba de vivacidad (rango: 1-5s). El valor por defecto es
1.database.internal.readinessProbe.timeoutSecondsEl tiempo de espera en segundos para la prueba de disponibilidad (rango: 1-5s). El valor por defecto es
1.database.internal.extrInitContainersContenedores 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.hostEl nombre de host de la base de datos externa. El valor por defecto es
192.168.0.1.database.external.portEl número de puerto de la base de datos externa. El valor por defecto es
5432.database.external.usernameEl nombre de usuario para la base de datos externa. El valor por defecto es
user.database.external.passwordLa contraseña para la base de datos externa. El valor por defecto es
password.database.external.coreDatabaseEl nombre de la base de datos utilizada por el servicio kernel. El valor por defecto es
registry.database.external.existingSecretEl secreto existente que contiene la contraseña de la base de datos. La clave debe ser
password. El valor por defecto es"".database.external.sslmodeEl método de conexión para la base de datos externa. Opciones:
require,verify-full,verify-ca,disable. El valor por defecto esdisable.database.maxIdleConnsEl 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.maxOpenConnsEl número máximo de conexiones abiertas a la base de datos (0 o menos significa ilimitado). El valor por defecto es
100.database.podAnnotationsLas anotaciones que se añadirán al pod de la base de datos. El valor por defecto es
{}.
redis.typeEl tipo de despliegue Redis. Establecer en
externalpara Redis externo. El valor por defecto esinternal.redis.internal.image.repositoryEl repositorio para la imagen Redis. El valor por defecto es
private-registry/harbor-redis.redis.internal.image.tagLa etiqueta para la imagen Redis. El valor por defecto es
7.2.redis.internal.resourcesLos recursos asignados para el contenedor Redis. El valor por defecto es
undefined.redis.internal.automountServiceAccountTokenControla si el token de la cuenta de servicio está montado. El valor por defecto es
false.redis.internal.nodeSelectorLas etiquetas de nodo para la asignación de pods. El valor por defecto es
{}.redis.internal.tolerationsLas tolerancias para la asignación de pods. El valor por defecto es
[].redis.internal.affinityLa configuración de afinidad de nodo o pod. El valor por defecto es
{}.redis.internal.priorityClassNameLa clase de prioridad para ejecutar Redis el pod. El valor por defecto es
undefined.redis.internal.jobserviceDatabaseIndexEl índice de la base de datos para jobservice. El valor por defecto es
1.redis.internal.registryDatabaseIndexEl índice de la base de datos para registry. El valor por defecto es
2.redis.internal.trivyAdapterIndexEl índice de la base de datos para Trivy el adaptador. El valor por defecto es
5.redis.internal.harborDatabaseIndexEl índice de la base de datos para Harbor la lógica de negocio miscelánea. El valor por defecto es
0.redis.internal.cacheLayerDatabaseIndexEl índice de la base de datos para la capa de caché de Harbor. El valor por defecto es
0.redis.internal.initContainersLos contenedores de inicialización que se ejecutan antes de que comience el Redis contenedor. El valor por defecto es
[].redis.external.addrLa dirección de la instancia externa de Redis. El valor por defecto es
192.168.0.2:6379.redis.external.sentinelMasterSetEl nombre del conjunto maestro Sentinel de Redis (si corresponde). El valor por defecto es
undefined.redis.external.coreDatabaseIndexEl índice de la base de datos para kernel. El valor por defecto es
0.redis.external.jobserviceDatabaseIndexEl índice de la base de datos para jobservice. El valor por defecto es
1.redis.external.registryDatabaseIndexEl índice de la base de datos para registry. El valor por defecto es
2.redis.external.trivyAdapterIndexEl índice de la base de datos para Trivy el adaptador. El valor por defecto es
5.redis.external.harborDatabaseIndexEl índice de la base de datos para Harbor la lógica de negocio miscelánea. El valor por defecto es
0.redis.external.cacheLayerDatabaseIndexEl índice de la base de datos para la capa de caché de Harbor. El valor por defecto es
0.redis.external.usernameEl nombre de usuario para la autenticación externa de Redis. El valor por defecto es
undefined.redis.external.passwordLa contraseña para la autenticación externa de Redis. El valor por defecto es
undefined.redis.external.existingSecretEl secreto existente que contiene la contraseña de Redis. La clave debe ser
REDIS_PASSWORD. El valor por defecto es"".redis.podAnnotationsLas anotaciones que se deben añadir al Redis pod. El valor por defecto es
{}.
exporter.replicasEl número de réplicas a ejecutar. El valor por defecto es
1.exporter.revisionHistoryLimitEl límite del historial de revisiones. El valor por defecto es
10.exporter.podAnnotationsAnotaciones para añadir al pod del exportador. El valor por defecto es
{}.exporter.image.repositoryEl repositorio para la imagen del exportador. El valor por defecto es
private-registry/harbor-exporter.exporter.image.tagLa etiqueta para la imagen del exportador. El valor por defecto es
2.11.exporter.nodeSelectorEtiquetas de nodo para la asignación de pods. El valor por defecto es
{}.exporter.tolerationsTolerancias para la asignación de pods. El valor por defecto es
[].exporter.affinityAfinidades de nodo o pod. El valor por defecto es
{}.exporter.topologySpreadConstraintsRestricciones 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.automountServiceAccountTokenControla si se debe montar el serviceAccountToken. El valor por defecto es
false.exporter.cacheDurationLa duración de la caché para la información recopilada por el exportador. El valor por defecto es
30.exporter.cacheCleanIntervalEl intervalo de limpieza de la caché para la información recopilada por el exportador. El valor por defecto es
14400.exporter.priorityClassNameLa clase de prioridad para ejecutar el pod. El valor por defecto es
undefined.
metrics.enabledHabilita Harbor métricas. El valor por defecto es
false.metrics.core.pathLa vía URL para métricas de kernel. El valor por defecto es
/metrics.metrics.core.portEl puerto para métricas de kernel. El valor por defecto es
8001.metrics.registry.pathLa vía URL para métricas de registro. El valor por defecto es
/metrics.metrics.registry.portEl puerto para métricas de registro. El valor por defecto es
8001.metrics.exporter.pathLa vía URL para métricas del exportador. El valor por defecto es
/metrics.metrics.exporter.portEl puerto para métricas del exportador. El valor por defecto es
8001.metrics.serviceMonitor.enabledHabilita la creación de un Prometheus ServiceMonitor (requiere Prometheus CRD). El valor por defecto es
false.metrics.serviceMonitor.additionalLabelsEtiquetas adicionales que se aplicarán al manifiesto del ServiceMonitor. El valor por defecto es
"".metrics.serviceMonitor.intervalEl intervalo de recolección para las métricas de Harbor. El valor por defecto es
"".metrics.serviceMonitor.metricRelabelingsLas reglas de reetiquetado para las métricas antes de la ingestión. El valor por defecto es
[].metrics.serviceMonitor.relabelingsLas reglas de reetiquetado para las métricas antes de la recolección. El valor por defecto es
[].
trace.enabledHabilita la funcionalidad de trazado. El valor por defecto es
false.trace.providerEl proveedor de trazado (
jaegerootel). La versión de Jaeger debe ser 1.26 o superior. El valor por defecto esjaeger.trace.sample_rateLa tasa de muestreo para los datos de trazado.
1muestrea el 100%,0.5muestrea el 50%. El valor por defecto es1.trace.namespaceEl espacio de nombres para diferenciar diferentes servicios de Harbor.
trace.attributesUn diccionario de clave-valor para atributos definidos por el usuario en la inicialización del proveedor de trazado.
trace.jaeger.endpointEl punto final para el trazado de Jaeger. El valor por defecto es
http://hostname:14268/api/traces.trace.jaeger.usernameEl nombre de usuario para la autenticación de Jaeger.
trace.jaeger.passwordLa contraseña para la autenticación de Jaeger.
trace.jaeger.agent_hostEl host del agente para Jaeger.
trace.jaeger.agent_portEl puerto del agente para Jaeger. El valor por defecto es
6831.trace.otel.endpointEl punto final para el trazado de OpenTelemetry. El valor por defecto es
hostname:4318.trace.otel.url_pathLa vía URL para OpenTelemetry. El valor por defecto es
/v1/traces.trace.otel.compressionHabilita la compresión para OpenTelemetry. El valor por defecto es
false.trace.otel.insecureEstablece una conexión insegura para OpenTelemetry. El valor por defecto es
true.trace.otel.timeoutEl tiempo de espera en segundos para OpenTelemetry. El valor por defecto es
10.
cache.enabledHabilita la capa de caché. El valor por defecto es
false.cache.expireHoursEl 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 18Nombre de host del servicio del kernel en la regla Ingress. | |
La URL externa para el servicio harbor-core. | |
Número de réplicas a crear. Especificar dos o más. | |
Rellene los detalles de conexión a la base de datos en la sección | |
Si se utiliza un secreto existente, el valor debe ser | |
Acepta uno de los siguientes valores:
| |
Rellene la información de conexión en la sección | |
Soporta redis y redis+sentinel. | |
El nombre del conjunto de Valkey instancias a monitorizar. Debe configurarse para soportar redis+sentinel. | |
Debe ser | |
Opcional. Por defecto es | |
Opcional. Por defecto es | |
Si está vacío, se autentica contra el usuario por defecto. | |
Si se utiliza, la clave debe ser <REDIS_PASSWORD>. | |
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:
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.
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.
Indicar en la Portada el nombre del editor de la Versión modificada, como el editor.
Conservar todos la información de copyright del Documento.
Añada la información de copyright apropiada para sus modificaciones junto a la otra información de copyright.
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.
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.
Incluir una copia sin modificación de esta Licencia.
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.
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.
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.
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.
Borre cualquier sección titulada "Aprobaciones". Dicha sección no puede estar incluida en la Versión modificada.
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.
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.



