Harbor プロジェクトを作成する

Harbor では、プロジェクトはコンテナ イメージのコレクションを整理して管理するための論理単位として機能します。これにより、関連するアーティファクトをグループ化し、特定のポリシー、アクセス制御、レプリケーション ルールをコレクション全体に適用できます。プロジェクトが作成される前に、イメージを Harbor に push または pull することはできません。

始める前に

始める前に、Harbor UI に少なくとも 1 回ログインして、Harbor レジストリで ID を初期化する必要があります。

必要な IAM ロール

Harbor プロジェクトを作成してイメージの名前空間を管理するには、IAM プロジェクト管理者に連絡して、Harbor プロジェクト作成者(harbor-project-creator)ロールをリクエストします。このロールにより、プロジェクトの名前空間で Harbor プロジェクトを作成、取得、監視できます。このロールには、新しいイメージの名前空間を定義するために必要な権限が含まれているため、コンテナ化されたアプリケーションのセキュリティ境界を確立できます。

Harbor プロジェクトを作成する

GDC コンソール、gdcloud CLI、または API を使用して Harbor プロジェクトを作成します。

コンソール

GDC コンソールで、次の手順を行います。

  1. ナビゲーション メニューの [CI / CD] セクションにある [Harbor Container Registry] リンクをクリックします。
  2. [Create a Harbor project] をクリックします。
  3. プロジェクトの名前を入力します。
  4. 省略可: 脆弱性スキャンはデフォルトで有効になっています。Harbor プロジェクトの脆弱性スキャンの自動スキャンを無効にするには、[Enable vulnerability scanning for the project] 切り替えボタンをクリックします。詳細については、脆弱性をスキャンするをご覧ください。
  5. [作成] をクリックします。
  6. プロジェクトが正常に作成されたことを示す確認メッセージが表示されます。
  7. Harbor プロジェクトが作成されたら、Harbor UI にログインして、Harbor プロジェクトが表示されることを確認します。

gdcloud

Harbor プロジェクトを作成します。

  gdcloud harbor harbor-projects create HARBOR_PROJECT \
    --project=PROJECT \
    --instance=INSTANCE

次のように置き換えます。

  • HARBOR_PROJECT: 作成する Harbor プロジェクトの名前。
  • PROJECT: GDC プロジェクトの名前。
  • INSTANCE: インスタンスの名前。

API

GDC コンソールと gdcloud CLI は、Harbor プロジェクトの作成者をユーザー アカウントに設定します。API を使用する場合は、spec.creatorSubject フィールドを自分で設定する必要があります。

  1. ゾーン管理 API サーバーに HarborInstanceProject カスタム リソースを作成します。リソースの作成後に creatorSubject フィールドまたは autoScan フィールドを変更することはできません。作成する前に両方の値を確認してください。

    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
    

    次のように置き換えます。

    • MANAGEMENT_API_SERVER: ゾーン管理 API サーバーの kubeconfig ファイルのパス。詳細については、ゾーン コンテキストに切り替えるをご覧ください。
    • INSTANCE: Harbor レジストリ インスタンスの名前。
    • HARBOR_PROJECT: 作成する Harbor プロジェクトの名前。
    • PROJECT: Harbor レジストリ インスタンスを含む GDC プロジェクトの名前。
    • HARBOR_USERNAME: Harbor のユーザー名。ログイン後に Harbor UI のユーザー メニューに表示される名前と完全に一致します。このユーザーは、Harbor プロジェクトの Harbor プロジェクト管理者になります。サービス アカウントではなく、ユーザーのユーザー名を使用します。詳細については、始める前にをご覧ください。

    autoScan フィールドを使用すると、プロジェクトに push されたイメージの脆弱性スキャンを自動的に実行できます。自動スキャンを無効にするには、false に設定します。詳細については、脆弱性をスキャンするをご覧ください。

  2. Harbor プロジェクトが作成され、作成者が割り当てられていることを確認します。

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

    PROJECTCREATEDSTATUS 列には Created が表示され、PROJECTSUBJECTASSIGNEDSTATUS 列には SubjectAssigned が表示されます。

    PROJECTSUBJECTASSIGNEDSTATUS 列に SubjectAssignError が表示されている場合は、条件メッセージを確認します。

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

    user ... not found メッセージは、creatorSubject フィールドで指定されたユーザーが Harbor UI にまだログインしていないことを意味します。Harbor サービスは 30 秒ごとに再試行するため、ユーザーがログインするとステータスが SubjectAssigned に変わります。

作成者なしで作成された Harbor プロジェクトを修正する

組織のプロジェクトの HarborInstanceProject リソースで spec.creatorSubject フィールドが設定されていない場合、Harbor サービスは組織全体の Harbor リソースへの変更の処理を停止します。症状としては、Harbor インスタンスが準備完了にならない、新しい Harbor プロジェクトがステータスなしのままになる、イメージの pull が x509: certificate signed by unknown authority エラーで失敗するなどがあります。

この問題を解決するには、影響を受けるリソースを含むプロジェクトに Harbor インスタンス管理者(harbor-instance-admin)ロールが必要です。このロールがない場合は、このロールを持つユーザーにこれらの手順を完了するよう依頼してください。影響を受けるリソースがわからない場合は、インフラストラクチャ オペレーター(IO)にお問い合わせください。IO は Harbor サービスログでリソースを確認できます。

  1. 影響を受ける HarborInstanceProject リソースが spec.creatorSubject フィールドを設定しているかどうかを確認します。

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      get harborinstanceproject HARBOR_INSTANCE_PROJECT \
      -n PROJECT -o jsonpath='{.spec.creatorSubject}'
    

    次のように置き換えます。

    • MANAGEMENT_API_SERVER: ゾーン管理 API サーバーの kubeconfig ファイルのパス。詳細については、ゾーン コンテキストに切り替えるをご覧ください。
    • HARBOR_INSTANCE_PROJECT: HarborInstanceProject リソースの名前。このページの [API] タブから作成するリソースの名前は INSTANCE-HARBOR_PROJECT です。
    • PROJECT: リソースを含む GDC プロジェクトの名前。

    出力が空の場合、フィールドは設定されていません。

  2. GDC プロジェクトのオーナーに、Harbor プロジェクト管理者として割り当てる Harbor ユーザー名を確認します。spec.creatorSubject フィールドは設定後に変更できないため、影響を受ける各リソースにフィールドを追加する前にユーザー名を確認します。

    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"}}}'
    

    HARBOR_USERNAME は、Harbor プロジェクト管理者として割り当てるユーザーの Harbor ユーザー名に置き換えます。このロールは、イメージの削除とプロジェクト メンバーの管理を行うことができます。ユーザーが Harbor UI に少なくとも 1 回ログインしている必要があります。また、ユーザー名は Harbor UI のユーザー メニューに表示される名前と完全に一致している必要があります。

  3. 作成者が割り当てられていることを確認します。

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

    影響を受けるすべてのリソースが修正されると、Harbor サービスが再起動し、約 10 分以内に変更の処理が再開されます。PROJECTSUBJECTASSIGNEDSTATUS 列には SubjectAssigned が表示されます。15 分経過しても Harbor からのイメージの pull が失敗する場合は、IO に連絡してください。修正したリソースの名前とプロジェクトを IO に提供します。これにより、IO は影響を受ける他のリソースを確認し、必要に応じて Harbor サービスを再起動できます。

次のステップ

Harbor プロジェクトを作成したら、Harbor レジストリに接続するように Docker クライアントと Helm クライアントを構成します。