Membuat project Harbor

Di Harbor, project berfungsi sebagai unit logis untuk mengatur dan mengelola koleksi image container. Repositori menyediakan cara untuk mengelompokkan artefak terkait dan menerapkan kebijakan, kontrol akses, dan aturan replikasi tertentu ke seluruh koleksi. Image tidak dapat dikirim atau ditarik ke Harbor sebelum project dibuat.

Sebelum memulai

Sebelum memulai, Anda harus melakukan inisialisasi identitas dengan registry Harbor dengan login ke UI Harbor setidaknya sekali.

Peran IAM yang diperlukan

Untuk membuat project Harbor dan mengelola namespace image, hubungi Admin Project IAM Anda untuk meminta peran Harbor Project Creator (harbor-project-creator), yang memungkinkan Anda membuat, mendapatkan, dan memantau project Harbor di namespace project. Peran ini mencakup izin yang diperlukan untuk menentukan namespace image baru sehingga Anda dapat menetapkan batas keamanan untuk aplikasi dalam container.

Membuat project Harbor

Buat project Harbor menggunakan konsol GDC, gdcloud CLI, atau API.

Konsol

Di konsol GDC, ikuti langkah-langkah berikut:

  1. Klik link Harbor Container Registry di bagian CI/CD di menu navigasi.
  2. Klik Create a Harbor project.
  3. Masukkan nama project.
  4. Opsional: Pemindaian kerentanan diaktifkan secara default. Untuk menonaktifkan pemindaian kerentanan otomatis untuk project Harbor, klik tombol Enable vulnerability scanning for the project. Untuk mengetahui informasi selengkapnya, lihat Memindai kerentanan.
  5. Klik Create.
  6. Pesan konfirmasi akan muncul yang menyatakan bahwa project Anda berhasil dibuat.
  7. Setelah project Harbor dibuat, login ke UI Harbor untuk mengonfirmasi bahwa Anda dapat melihat project Harbor.

gdcloud

Buat project Harbor:

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

Ganti kode berikut:

  • HARBOR_PROJECT: nama project Harbor yang akan dibuat.
  • PROJECT: nama project GDC.
  • INSTANCE: nama instance.

API

Konsol GDC dan gdcloud CLI menetapkan pembuat project Harbor ke akun pengguna Anda. Saat menggunakan API, Anda harus menetapkan kolom spec.creatorSubject sendiri.

  1. Buat resource kustom HarborInstanceProject di server API pengelolaan zona. Anda tidak dapat mengubah kolom creatorSubject atau autoScan setelah membuat resource, jadi periksa kedua nilai sebelum Anda membuatnya.

    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
    

    Ganti kode berikut:

    • MANAGEMENT_API_SERVER: jalur ke file kubeconfig untuk server API pengelolaan zona. Untuk mengetahui informasi selengkapnya, lihat Beralih ke konteks zona.
    • INSTANCE: nama instance registry Harbor.
    • HARBOR_PROJECT: nama project Harbor yang akan dibuat.
    • PROJECT: nama project GDC yang berisi instance registry Harbor.
    • HARBOR_USERNAME: nama pengguna Harbor Anda, persis seperti yang ditampilkan di menu pengguna UI Harbor setelah Anda login. Pengguna ini akan menjadi Harbor Project Admin dari project Harbor. Gunakan nama pengguna seseorang, bukan akun layanan. Untuk mengetahui informasi selengkapnya, lihat Sebelum memulai.

    Kolom autoScan mengaktifkan pemindaian kerentanan otomatis untuk image yang dikirim ke project. Untuk menonaktifkan pemindaian otomatis, tetapkan ke false. Untuk mengetahui informasi selengkapnya, lihat Memindai kerentanan.

  2. Pastikan project Harbor telah dibuat dan kreator telah ditetapkan:

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

    Kolom PROJECTCREATEDSTATUS menampilkan Created, dan kolom PROJECTSUBJECTASSIGNEDSTATUS menampilkan SubjectAssigned.

    Jika kolom PROJECTSUBJECTASSIGNEDSTATUS menampilkan SubjectAssignError, periksa pesan kondisi:

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

    Pesan user ... not found berarti pengguna yang ditentukan di kolom creatorSubject belum login ke UI Harbor. Layanan Harbor mencoba lagi setiap 30 detik, sehingga statusnya berubah menjadi SubjectAssigned setelah pengguna login.

Memperbaiki project Harbor yang dibuat tanpa kreator

Jika resource HarborInstanceProject di project mana pun dalam organisasi Anda tidak menetapkan kolom spec.creatorSubject, layanan Harbor akan berhenti memproses perubahan pada resource Harbor di seluruh organisasi Anda. Gejalanya mencakup instance Harbor yang tidak siap, project Harbor baru yang tetap tanpa status, dan penarikan image yang gagal dengan error x509: certificate signed by unknown authority.

Untuk memperbaiki masalah ini, Anda memerlukan peran Harbor Instance Admin (harbor-instance-admin) dalam project yang berisi resource yang terpengaruh. Jika Anda tidak memiliki peran ini, minta pengguna yang memilikinya untuk menyelesaikan langkah-langkah ini. Jika Anda tidak tahu resource mana yang terpengaruh, hubungi operator infrastruktur (IO) Anda, yang dapat menemukannya di log layanan Harbor.

  1. Periksa apakah resource HarborInstanceProject yang terpengaruh menetapkan kolom spec.creatorSubject:

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

    Ganti kode berikut:

    • MANAGEMENT_API_SERVER: jalur ke file kubeconfig untuk server API pengelolaan zona. Untuk mengetahui informasi selengkapnya, lihat Beralih ke konteks zona.
    • HARBOR_INSTANCE_PROJECT: nama resource HarborInstanceProject. Resource yang Anda buat dari tab API di halaman ini diberi nama INSTANCE-HARBOR_PROJECT.
    • PROJECT: nama project GDC yang berisi resource.

    Output kosong berarti kolom tidak ditetapkan.

  2. Konfirmasi nama pengguna Harbor yang akan ditetapkan sebagai Admin Project Harbor dengan pemilik project GDC. Karena Anda tidak dapat mengubah kolom spec.creatorSubject setelah menetapkannya, verifikasi nama pengguna sebelum menambahkan kolom ke setiap resource yang terpengaruh:

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

    Ganti HARBOR_USERNAME dengan nama pengguna Harbor dari pengguna yang akan ditetapkan sebagai Admin Project Harbor. Peran ini dapat menghapus image dan mengelola anggota project. Pengguna harus login ke UI Harbor setidaknya sekali, dan nama pengguna harus sama persis dengan nama yang ditampilkan di menu pengguna UI Harbor.

  3. Pastikan kreator telah ditetapkan:

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

    Setelah semua resource yang terpengaruh diperbaiki, layanan Harbor akan dimulai ulang dan melanjutkan pemrosesan perubahan dalam waktu sekitar 10 menit, dan kolom PROJECTSUBJECTASSIGNEDSTATUS akan menampilkan SubjectAssigned. Jika pull image dari Harbor masih gagal setelah 15 menit, hubungi IO Anda. Berikan nama dan project resource yang Anda perbaiki kepada IO, sehingga IO dapat memeriksa resource lain yang terpengaruh dan memulai ulang layanan Harbor jika diperlukan.

Langkah berikutnya

Setelah membuat project Harbor, konfigurasikan klien Docker dan Helm Anda untuk terhubung ke registry Harbor: