En Harbor, un proyecto funciona como una unidad lógica para organizar y administrar una colección de imágenes de contenedor. Proporciona una forma de agrupar artefactos relacionados y aplicar políticas, controles de acceso y reglas de replicación específicos a toda la colección. No se pueden enviar ni extraer imágenes a Harbor antes de que se cree un proyecto.
Antes de comenzar
Antes de comenzar, debes inicializar tu identidad con el registro de Harbor. Para ello, accede a la IU de Harbor al menos una vez.
Rol de IAM requerido
Para crear proyectos de Harbor y administrar espacios de nombres de imágenes, comunícate con el administrador de IAM de tu proyecto para solicitar el rol de creador de proyectos de Harbor (harbor-project-creator), que te permite crear, obtener y supervisar proyectos de Harbor en el espacio de nombres del proyecto. Este rol incluye los permisos necesarios para definir nuevos espacios de nombres de imágenes,
de modo que puedas establecer límites de seguridad para tus aplicaciones
en contenedores.
Crea un proyecto de Harbor
Crea un proyecto de Harbor con la consola de GDC, la CLI de gdcloud o la API.
Console
En la consola de GDC, sigue estos pasos:
- Haz clic en el vínculo Harbor Container Registry en la sección CI/CD del menú de navegación.
- Haz clic en Create a Harbor project.
- Ingresa el nombre del proyecto.
- Opcional: El análisis de vulnerabilidades está habilitado de forma predeterminada. Para inhabilitar el análisis de vulnerabilidades automático en los proyectos de Harbor, haz clic en el botón de activación Habilitar el análisis de vulnerabilidades para el proyecto. Para obtener más información, consulta Analiza en busca de vulnerabilidades.
- Haz clic en Crear.
- Aparecerá un mensaje de confirmación que indica que tu proyecto se creó correctamente.
- Después de crear tu proyecto de Harbor, accede a la IU de Harbor para confirmar que puedes ver el proyecto de Harbor.
gdcloud
Crea el proyecto de Harbor:
gdcloud harbor harbor-projects create HARBOR_PROJECT \
--project=PROJECT \
--instance=INSTANCE
Reemplaza lo siguiente:
HARBOR_PROJECT: Es el nombre del proyecto de Harbor que se creará.PROJECT: Es el nombre del proyecto de GDC.INSTANCE: El nombre de la instancia.
API
La consola de GDC y la CLI de gdcloud configuran el creador del proyecto de Harbor en tu cuenta de usuario. Cuando usas la API, debes configurar el campo
spec.creatorSubject por tu cuenta.
Crea un recurso personalizado
HarborInstanceProjecten el servidor de la API de administración zonal. No puedes cambiar el campocreatorSubjectniautoScandespués de crear el recurso, por lo que debes verificar ambos valores antes de crearlo.kubectl --kubeconfig MANAGEMENT_API_SERVER create -f - <<EOF apiVersion: artifactregistry.gdc.goog/v1 kind: HarborInstanceProject metadata: name: INSTANCE-HARBOR_PROJECT namespace: PROJECT spec: projectName: HARBOR_PROJECT harborInstanceRef: name: INSTANCE creatorSubject: apiGroup: rbac.authorization.k8s.io kind: User name: HARBOR_USERNAME autoScan: true EOFReemplaza lo siguiente:
MANAGEMENT_API_SERVER: Es la ruta de acceso al archivo kubeconfig del servidor de la API de administración zonal. Para obtener más información, consulta Cambia a un contexto zonal.INSTANCE: Es el nombre de la instancia del registro de Harbor.HARBOR_PROJECT: Es el nombre del proyecto de Harbor que se creará.PROJECT: Es el nombre del proyecto de GDC que contiene la instancia del registro de Harbor.HARBOR_USERNAME: Es tu nombre de usuario de Harbor, exactamente como se muestra en el menú de usuario de la IU de Harbor después de acceder. Este usuario se convierte en el administrador del proyecto de Harbor. Usa el nombre de usuario de una persona, no una cuenta de servicio. Para obtener más información, consulta Antes de comenzar.
El campo
autoScanhabilita el análisis automático de vulnerabilidades para las imágenes que se envían al proyecto. Para inhabilitar el análisis automático, configúralo comofalse. Para obtener más información, consulta Analiza en busca de vulnerabilidades.Verifica que se haya creado el proyecto de Harbor y que se haya asignado el creador:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ get harborinstanceproject INSTANCE-HARBOR_PROJECT \ -n PROJECTLa columna
PROJECTCREATEDSTATUSmuestraCreatedy la columnaPROJECTSUBJECTASSIGNEDSTATUSmuestraSubjectAssigned.Si la columna
PROJECTSUBJECTASSIGNEDSTATUSmuestraSubjectAssignError, verifica el mensaje de condición:kubectl --kubeconfig MANAGEMENT_API_SERVER \ describe harborinstanceproject INSTANCE-HARBOR_PROJECT \ -n PROJECTUn mensaje
user ... not foundsignifica que el usuario especificado en el campocreatorSubjectaún no accedió a la IU de Harbor. El servicio de Harbor vuelve a intentarlo cada 30 segundos, por lo que el estado cambia aSubjectAssigneddespués de que el usuario accede.
Corrige un proyecto de Harbor creado sin un creador
Si un recurso HarborInstanceProject en cualquier proyecto de tu organización
no establece el campo spec.creatorSubject, el servicio de Harbor deja de
procesar los cambios en los recursos de Harbor en toda tu organización. Los síntomas
incluyen instancias de Harbor que no se preparan, proyectos nuevos de Harbor que permanecen
sin estado y extracciones de imágenes que fallan con
errores x509: certificate signed by unknown authority.
Para solucionar este problema, necesitas el rol de administrador de instancias de Harbor
(harbor-instance-admin) en el proyecto que contiene el recurso
afectado. Si no tienes este rol, pídele a un usuario que lo tenga que complete estos
pasos. Si no sabes qué recurso se ve afectado, comunícate con tu
operador de infraestructura (IO), que puede encontrarlo en los registros del servicio de Harbor.
Verifica si el recurso
HarborInstanceProjectafectado establece el campospec.creatorSubject:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get harborinstanceproject HARBOR_INSTANCE_PROJECT \ -n PROJECT -o jsonpath='{.spec.creatorSubject}'Reemplaza lo siguiente:
MANAGEMENT_API_SERVER: Es la ruta de acceso al archivo kubeconfig del servidor de la API de administración zonal. Para obtener más información, consulta Cambia a un contexto zonal.HARBOR_INSTANCE_PROJECT: Es el nombre del recursoHarborInstanceProject. Los recursos que creas desde la pestaña API de esta página se denominanINSTANCE-HARBOR_PROJECT.PROJECT: Es el nombre del proyecto de GDC que contiene el recurso.
Un resultado vacío significa que el campo no está configurado.
Confirma el nombre de usuario de Harbor que se asignará como administrador del proyecto de Harbor con el propietario del proyecto de GDC. Como no puedes cambiar el campo
spec.creatorSubjectdespués de configurarlo, verifica el nombre de usuario antes de agregar el campo a cada recurso afectado:kubectl --kubeconfig MANAGEMENT_API_SERVER \ patch harborinstanceproject HARBOR_INSTANCE_PROJECT \ -n PROJECT --type merge \ -p '{"spec":{"creatorSubject":{"apiGroup":"rbac.authorization.k8s.io","kind":"User","name":"HARBOR_USERNAME"}}}'Reemplaza
HARBOR_USERNAMEpor el nombre de usuario de Harbor del usuario que se asignará como administrador del proyecto de Harbor. Este rol puede borrar imágenes y administrar miembros del proyecto. El usuario debe haber accedido a la IU de Harbor al menos una vez, y el nombre de usuario debe coincidir exactamente con el nombre que se muestra en el menú de usuario de la IU de Harbor.Verifica que se haya asignado el creador:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ get harborinstanceproject HARBOR_INSTANCE_PROJECT \ -n PROJECTDespués de que se corrigen todos los recursos afectados, el servicio de Harbor se reinicia y reanuda el procesamiento de los cambios en un plazo de 10 minutos, y la columna
PROJECTSUBJECTASSIGNEDSTATUSmuestraSubjectAssigned. Si las extracciones de imágenes de Harbor siguen fallando después de 15 minutos, comunícate con tu IO. Proporciona al IO los nombres y los proyectos de los recursos que corregiste para que pueda verificar si hay otros recursos afectados y reiniciar el servicio de Harbor si es necesario.
¿Qué sigue?
Después de crear un proyecto de Harbor, configura tus clientes de Docker y Helm para que se conecten a tu registro de Harbor: