Dans Harbor, un projet sert d'unité logique pour organiser et gérer un ensemble d'images de conteneurs. Il permet de regrouper des artefacts associés et d'appliquer des règles, des contrôles d'accès et des règles de réplication spécifiques à l'ensemble de la collection. Les images ne peuvent pas être transférées vers Harbor ni extraites de Harbor avant la création d'un projet.
Avant de commencer
Avant de commencer, vous devez initialiser votre identité avec le registre Harbor en vous connectant à l'interface utilisateur Harbor au moins une fois.
Rôle IAM requis
Pour créer des projets Harbor et gérer les espaces de noms d'images, contactez l'administrateur de votre projet IAM pour demander le rôle Créateur de projets Harbor (harbor-project-creator), qui vous permet de créer, d'obtenir et de surveiller des projets Harbor dans l'espace de noms du projet. Ce rôle inclut les autorisations requises pour définir de nouveaux espaces de noms d'image afin que vous puissiez établir des limites de sécurité pour vos applications conteneurisées.
Créer un projet Harbor
Créez un projet Harbor à l'aide de la console GDC, de la CLI gdcloud ou de l'API.
Console
Dans la console GDC, procédez comme suit :
- Cliquez sur le lien Harbor Container Registry dans la section CI/CD du menu de navigation.
- Cliquez sur Créer un projet Harbor.
- Saisissez le nom du projet.
- Facultatif : l'analyse des failles est activée par défaut. Pour désactiver l'analyse automatique des failles pour les projets Harbor, cliquez sur le bouton Activer l'analyse des failles pour le projet. Pour en savoir plus, consultez Rechercher des failles.
- Cliquez sur Créer.
- Un message de confirmation s'affiche pour indiquer que votre projet a bien été créé.
- Une fois votre projet Harbor créé, connectez-vous à l'interface utilisateur Harbor pour vérifier que vous pouvez afficher le projet Harbor.
gdcloud
Créez le projet Harbor :
gdcloud harbor harbor-projects create HARBOR_PROJECT \
--project=PROJECT \
--instance=INSTANCE
Remplacez les éléments suivants :
HARBOR_PROJECT: nom du projet Harbor à créer.PROJECT: nom du projet GDC.INSTANCE: nom de l'instance.
API
La console GDC et la CLI gdcloud définissent le créateur du projet Harbor sur votre compte utilisateur. Lorsque vous utilisez l'API, vous devez définir vous-même le champ spec.creatorSubject.
Créez une ressource personnalisée
HarborInstanceProjectsur le serveur d'API de gestion zonale. Vous ne pouvez pas modifier le champcreatorSubjectouautoScanaprès avoir créé la ressource. Vérifiez donc les deux valeurs avant de la créer.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 EOFRemplacez les éléments suivants :
MANAGEMENT_API_SERVER: chemin d'accès au fichier kubeconfig du serveur d'API de gestion zonale. Pour en savoir plus, consultez Passer à un contexte zonal.INSTANCE: nom de l'instance de registre Harbor.HARBOR_PROJECT: nom du projet Harbor à créer.PROJECT: nom du projet GDC contenant l'instance de registre Harbor.HARBOR_USERNAME: votre nom d'utilisateur Harbor, exactement tel qu'il apparaît dans le menu utilisateur de l'interface utilisateur Harbor après votre connexion. Cet utilisateur devient l'administrateur du projet Harbor. Utilisez le nom d'utilisateur d'une personne, et non un compte de service. Pour plus d'informations, consultez la section Avant de commencer.
Le champ
autoScanactive l'analyse automatique des failles pour les images transférées vers le projet. Pour désactiver l'analyse automatique, définissez-la surfalse. Pour en savoir plus, consultez Rechercher des failles.Vérifiez que le projet Harbor est créé et que le créateur est attribué :
kubectl --kubeconfig MANAGEMENT_API_SERVER \ get harborinstanceproject INSTANCE-HARBOR_PROJECT \ -n PROJECTLa colonne
PROJECTCREATEDSTATUSafficheCreatedet la colonnePROJECTSUBJECTASSIGNEDSTATUSafficheSubjectAssigned.Si la colonne
PROJECTSUBJECTASSIGNEDSTATUSafficheSubjectAssignError, vérifiez le message de condition :kubectl --kubeconfig MANAGEMENT_API_SERVER \ describe harborinstanceproject INSTANCE-HARBOR_PROJECT \ -n PROJECTUn message
user ... not foundsignifie que l'utilisateur spécifié dans le champcreatorSubjectne s'est pas encore connecté à l'UI Harbor. Le service Harbor effectue une nouvelle tentative toutes les 30 secondes. L'état passe donc àSubjectAssignedune fois que l'utilisateur s'est connecté.
Corriger un projet Harbor créé sans créateur
Si une ressource HarborInstanceProject d'un projet de votre organisation ne définit pas le champ spec.creatorSubject, le service Harbor cesse de traiter les modifications apportées aux ressources Harbor dans votre organisation. Les symptômes incluent des instances Harbor qui ne sont pas prêtes, de nouveaux projets Harbor qui restent sans état et des extractions d'images qui échouent avec des erreurs x509: certificate signed by unknown authority.
Pour résoudre ce problème, vous devez disposer du rôle Administrateur d'instance Harbor (harbor-instance-admin) dans le projet qui contient la ressource concernée. Si vous ne disposez pas de ce rôle, demandez à un utilisateur qui en dispose d'effectuer ces étapes. Si vous ne savez pas quelle ressource est concernée, contactez votre opérateur d'infrastructure (IO), qui pourra la trouver dans les journaux du service Harbor.
Vérifiez si la ressource
HarborInstanceProjectconcernée définit le champspec.creatorSubject:kubectl --kubeconfig MANAGEMENT_API_SERVER \ get harborinstanceproject HARBOR_INSTANCE_PROJECT \ -n PROJECT -o jsonpath='{.spec.creatorSubject}'Remplacez les éléments suivants :
MANAGEMENT_API_SERVER: chemin d'accès au fichier kubeconfig du serveur d'API de gestion zonale. Pour en savoir plus, consultez Passer à un contexte zonal.HARBOR_INSTANCE_PROJECT: nom de la ressourceHarborInstanceProject. Les ressources que vous créez à partir de l'onglet API de cette page sont nomméesINSTANCE-HARBOR_PROJECT.PROJECT: nom du projet GDC contenant la ressource.
Un résultat vide signifie que le champ n'est pas défini.
Confirmez le nom d'utilisateur Harbor à attribuer en tant qu'administrateur de projet Harbor auprès du propriétaire du projet GDC. Comme vous ne pouvez pas modifier le champ
spec.creatorSubjectaprès l'avoir défini, vérifiez le nom d'utilisateur avant d'ajouter le champ à chaque ressource concernée :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"}}}'Remplacez
HARBOR_USERNAMEpar le nom d'utilisateur Harbor de l'utilisateur à désigner comme administrateur du projet Harbor. Ce rôle peut supprimer des images et gérer les membres du projet. L'utilisateur doit s'être connecté à l'UI Harbor au moins une fois, et le nom d'utilisateur doit correspondre exactement au nom affiché dans le menu utilisateur de l'UI Harbor.Vérifiez que le créateur est attribué :
kubectl --kubeconfig MANAGEMENT_API_SERVER \ get harborinstanceproject HARBOR_INSTANCE_PROJECT \ -n PROJECTUne fois que toutes les ressources concernées ont été corrigées, le service Harbor redémarre et reprend le traitement des modifications dans un délai d'environ 10 minutes, et la colonne
PROJECTSUBJECTASSIGNEDSTATUSafficheSubjectAssigned. Si l'extraction d'images depuis Harbor échoue toujours après 15 minutes, contactez votre IO. Indiquez à l'IO les noms et les projets des ressources que vous avez corrigées, afin qu'il puisse rechercher d'autres ressources concernées et redémarrer le service Harbor si nécessaire.
Étapes suivantes
Après avoir créé un projet Harbor, configurez vos clients Docker et Helm pour qu'ils se connectent à votre registre Harbor :
- Configurer Docker pour qu'il fasse confiance à l'autorité de certification racine Harbor
- Se connecter à Docker et Helm