Crea proyectos de Harbor

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:

  1. Haz clic en el vínculo Harbor Container Registry en la sección CI/CD del menú de navegación.
  2. Haz clic en Create a Harbor project.
  3. Ingresa el nombre del proyecto.
  4. 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.
  5. Haz clic en Crear.
  6. Aparecerá un mensaje de confirmación que indica que tu proyecto se creó correctamente.
  7. 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.

  1. Crea un recurso personalizado HarborInstanceProject en el servidor de la API de administración zonal. No puedes cambiar el campo creatorSubject ni autoScan despué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
    EOF
    

    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.
    • 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 autoScan habilita 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 como false. Para obtener más información, consulta Analiza en busca de vulnerabilidades.

  2. 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 PROJECT
    

    La columna PROJECTCREATEDSTATUS muestra Created y la columna PROJECTSUBJECTASSIGNEDSTATUS muestra SubjectAssigned.

    Si la columna PROJECTSUBJECTASSIGNEDSTATUS muestra SubjectAssignError, verifica el mensaje de condición:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      describe harborinstanceproject INSTANCE-HARBOR_PROJECT \
      -n PROJECT
    

    Un mensaje user ... not found significa que el usuario especificado en el campo creatorSubject aún no accedió a la IU de Harbor. El servicio de Harbor vuelve a intentarlo cada 30 segundos, por lo que el estado cambia a SubjectAssigned despué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.

  1. Verifica si el recurso HarborInstanceProject afectado establece el campo spec.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 recurso HarborInstanceProject. Los recursos que creas desde la pestaña API de esta página se denominan INSTANCE-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.

  2. 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.creatorSubject despué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_USERNAME por 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.

  3. Verifica que se haya asignado el creador:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      get harborinstanceproject HARBOR_INSTANCE_PROJECT \
      -n PROJECT
    

    Despué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 PROJECTSUBJECTASSIGNEDSTATUS muestra SubjectAssigned. 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: