Membuat instance registry Harbor

Gunakan Managed Harbor Service (MHS) Google Distributed Cloud (GDC) dengan air gap untuk membuat instance registry Harbor di setiap project. Instance registry Harbor berfungsi sebagai repositori pusat untuk menyimpan dan mengelola image container di lingkungan berbasis cloud. Artifact Registry memperluas kemampuan distribusi Docker open source. Berlaku batasan berikut:

  • Anda dapat membuat maksimum satu instance per project.
  • Instance diisolasi dan tidak berbagi data atau resource komputasi apa pun.

Sebelum memulai

Jika Anda bertanggung jawab untuk membuat instance registry Harbor, hubungi Admin Project IAM Anda untuk meminta peran Harbor Instance Admin (harbor-instance-admin), yang memungkinkan Anda mendapatkan, mencantumkan, memantau, membuat, mengupdate, menerapkan patch, dan menghapus instance Harbor, repositori cadangan, rencana pencadangan, pencadangan, dan pemulihan dalam namespace project. Peran ini mencakup izin yang diperlukan untuk menyediakan instance Harbor baru.

Membuat instance registry Harbor

Buat instance registry Harbor di konsol GDC atau gdcloud CLI.

Konsol

Di konsol GDC, ikuti langkah-langkah berikut:

  1. Di menu navigasi, di bagian CI/CD, klik Harbor Container Registry.
  2. Klik Create Instance.
  3. Di kolom Instance name, masukkan nama untuk instance.
  4. Opsional: Di bagian Projects, untuk membuat project default untuk instance Harbor ini, klik tombol Create a default project when creating this instance ke posisi aktif, lalu lakukan hal berikut:
    1. Di kolom Project Name, masukkan nama project.
  5. Baca Persyaratan Layanan Harbor yang dikelola, lalu centang kotak jika Anda menyetujui persyaratan tersebut.
  6. Klik Create. Status menampilkan In progress, dan Name menampilkan link eksternal yang berisi nama instance Harbor yang baru Anda buat.
  7. Setelah instance dibuat dan Status menampilkan Ready, klik link eksternal di halaman untuk membuka UI web instance Harbor.

gdcloud

Buat instance registry Harbor:

gdcloud harbor instances create INSTANCE \
  --project=PROJECT

Ganti kode berikut:

  • INSTANCE: nama instance
  • PROJECT: nama project GDC tempat membuat instance

Kepercayaan node cluster untuk instance registry Harbor

Saat instance registry Harbor siap, GDC secara otomatis mengonfigurasi node cluster Kubernetes bersama dan standar di organisasi Anda untuk memercayai sertifikat TLS instance, yang diterbitkan oleh root certificate authority (CA) tepercaya organisasi Anda. Untuk mengambil image dari instance, Anda tidak perlu menginstal root CA atau mengubah konfigurasi runtime container pada node cluster.

Konfigurasi otomatis memiliki perilaku berikut:

  • Waktu update node: GDC menambahkan instance ke konfigurasi registry pribadi setiap cluster, lalu mengupdate setiap node dalam cluster. Node dapat mengambil image dari instance hanya setelah update selesai pada node tersebut, yang dapat memerlukan waktu hingga 60 menit di semua node.
  • Cluster baru dan lintas zona: GDC juga mengonfigurasi cluster yang Anda buat setelah instance siap dan cluster di zona lain organisasi Anda.
  • Nama host tepercaya: Node hanya memercayai nama host instance, yang merupakan URL instance tanpa awalan https://, seperti harbor-1-my-project.org-1.zone1.google.gdc.test. Anda dapat menemukan URL instance di link instance konsol GDC atau di kolom status.url pada output perintah gdcloud harbor instances describe. Gunakan nama host instance dalam referensi image Anda, seperti INSTANCE_HOSTNAME/HARBOR_PROJECT/IMAGE:TAG, dengan HARBOR_PROJECT adalah project Harbor yang menyimpan image.
  • Klien Docker workstation: Kepercayaan otomatis hanya berlaku untuk node cluster. Untuk mengirim atau mengambil image dengan Docker dari workstation, Anda harus mengonfigurasi klien Docker lokal agar memercayai root CA. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi Docker untuk memercayai root CA Harbor.

Jika node cluster tidak memercayai instance Anda, lihat Memecahkan masalah error sertifikat saat mengambil image.

Memecahkan masalah error sertifikat saat mengambil image

Jika node cluster tidak memercayai sertifikat untuk nama host dalam referensi image, pod tidak dapat mengambil image. Pod menampilkan status ErrImagePull atau ImagePullBackOff, dan peristiwa pod menampilkan error yang mirip dengan berikut:

failed to pull and unpack image "INSTANCE_HOSTNAME/HARBOR_PROJECT/IMAGE:TAG": ... x509: certificate signed by unknown authority

Untuk memecahkan masalah error sertifikat, Anda memerlukan hal berikut:

  • Peran Harbor Instance Viewer (harbor-instance-viewer) atau Harbor Instance Admin (harbor-instance-admin) dalam project GDC yang berisi instance.
  • Peran yang memungkinkan Anda melihat peristiwa pod dan menghapus pod di cluster yang terpengaruh:
    • Untuk cluster bersama, peran Namespace Admin (namespace-admin) dalam namespace project workload.
    • Untuk cluster standar, peran Developer Cluster (cluster-developer) dalam project yang berisi cluster.
  • File kubeconfig untuk cluster Kubernetes yang terpengaruh:

Untuk mengatasi masalah ini, selesaikan beberapa langkah berikut:

  1. Lihat peristiwa pod dan node yang menjalankan pod:

    kubectl --kubeconfig CLUSTER_KUBECONFIG \
      -n NAMESPACE describe pod POD_NAME
    

    Ganti kode berikut:

    • CLUSTER_KUBECONFIG: jalur ke file kubeconfig cluster Kubernetes yang terpengaruh.
    • NAMESPACE: namespace pod. Untuk cluster bersama, ini adalah namespace project.
    • POD_NAME: nama pod.

    Dalam output, kolom Node menampilkan node yang menjalankan pod, dan bagian Events menampilkan pesan error dan referensi image.

  2. Pastikan instance sudah siap dan tidak memiliki kode error:

    • Di konsol GDC, pastikan Status instance menampilkan Ready. Meskipun Status menampilkan Ready, gunakan gdcloud CLI untuk memeriksa kode error.
    • Gunakan gdcloud CLI untuk memeriksa status instance dan kode error apa pun:

      gdcloud harbor instances describe INSTANCE \
        --project=PROJECT
      

      Ganti kode berikut:

      • INSTANCE: nama instance registry Harbor.
      • PROJECT: nama project GDC yang berisi instance.

      Di output, pastikan kondisi dengan type: Ready dalam daftar status.conditions memiliki status: "True". Outputnya mirip dengan hal berikut ini:

      # Several lines of code are omitted here.
      status:
        conditions:
        - message: HarborInstance reconciled
          reason: Reconciled
          status: "True"
          type: Ready
        # Several lines of code are omitted here.
        url: https://harbor-1-my-project.org-1.zone1.google.gdc.test
      

    Jika Status tetap In progress atau menampilkan Unknown atau Error, atau kondisi Ready tidak memiliki status: "True", hubungi operator infrastruktur (IO) Anda. Jika bagian status dari output gdcloud harbor instances describe berisi kolom errorStatus dengan kode error, seperti HAAS0008, hubungi IO Anda meskipun kondisi Ready adalah True. Sertakan kode error dan pesan.

  3. Pastikan referensi image di workload Anda menggunakan nama host instance persis seperti yang muncul di URL instance, tanpa awalan https://. Node tidak memercayai nama lain untuk instance, seperti alamat IP. Jika referensi image menggunakan nama yang berbeda, perbarui referensi untuk menggunakan nama host instance, lalu deploy ulang workload.

  4. Jika kurang dari 60 menit telah berlalu sejak instance menampilkan status Ready atau sejak Anda membuat cluster, mana saja yang lebih baru, tunggu hingga GDC selesai mengupdate node cluster:

    • Update node parsial: Jika pull image berhasil di beberapa node dan gagal di node lain, update masih dalam proses.
    • Pencadangan dan pemulihan: Update node menunggu saat pencadangan atau pemulihan instance sedang berlangsung. Mulai periode 60 menit setelah pencadangan atau pemulihan selesai.
    • Cluster baru atau lintas zona: Untuk cluster yang Anda buat setelah instance siap, dan untuk cluster di zona yang berbeda dari instance, status Ready instance tidak menunjukkan apakah node cluster diupdate.
  5. Setelah update node selesai, pastikan workload Anda dapat mengambil image. Kubernetes akan otomatis mencoba kembali pengambilan image yang gagal. Untuk segera mencoba lagi, hapus pod yang gagal agar pengontrolnya, seperti Deployment, membuatnya ulang:

    kubectl --kubeconfig CLUSTER_KUBECONFIG \
      -n NAMESPACE delete pod POD_NAME
    

    Jika tidak ada pengontrol yang mengelola pod, buat ulang pod. Untuk mengonfirmasi bahwa masalah telah diselesaikan, pastikan pod baru menampilkan status Running, bukan ErrImagePull atau ImagePullBackOff:

    kubectl --kubeconfig CLUSTER_KUBECONFIG \
      -n NAMESPACE get pods
    
  6. Jika error berlanjut selama lebih dari 60 menit setelah instance menampilkan status Ready atau setelah Anda membuat cluster, mana saja yang lebih lambat, hubungi IO Anda. Berikan informasi berikut:

    • Organisasi dan zona instance serta cluster yang terpengaruh
    • Nama instance dan project GDC yang berisi instance
    • Nama cluster Kubernetes yang terpengaruh, apakah itu cluster bersama atau standar, dan, untuk cluster standar, project yang berisi cluster tersebut
    • Referensi image lengkap dan pesan error lengkap dari peristiwa pod
    • Nama node tempat pull image gagal, dan apakah pull image berhasil di node lain
    • Kapan instance menampilkan status Ready, kapan Anda membuat cluster, dan apakah pencadangan atau pemulihan instance sedang berlangsung
    • Bagian status dari output gdcloud harbor instances describe, termasuk kode error errorStatus

Langkah berikutnya

Setelah instance registry Harbor siap, Anda dapat membuat project untuk menghosting koleksi image atau mengelola instance yang ada: