Menggunakan duplikat registry untuk image container

Halaman ini menjelaskan cara membuat dan mengupgrade cluster menggunakan gambar yang diambil dari duplikat registry, bukan dari registry publik, seperti gcr.io. Ini fitur ini dapat diaktifkan atau dinonaktifkan kapan saja dalam siklus proses cluster.

Halaman ini ditujukan untuk pakar Operator dan Penyimpanan yang mengonfigurasi dan mengelola kinerja penyimpanan, penggunaan, dan biaya. Untuk mempelajari lebih lanjut tentang peran dan contoh tugas yang kami rujuk dalam konten Google Cloud, lihat Peran dan tugas pengguna GKE Enterprise yang umum.

Cermin pendaftaran adalah salinan lokal dari kantor pendaftaran publik yang menyalin atau mencerminkan struktur {i>file<i} kantor pendaftaran publik. Misalnya, jalur ke duplikat registry lokal Anda adalah 172.18.0.20:5000. Saat containerd menemui permintaan untuk menarik gambar seperti gcr.io/kubernetes-e2e-test-images/nautilus:1.0, containerd kali mencoba menarik image tersebut, bukan dari gcr.io, tetapi dari registry lokal Anda di jalur: 172.18.0.20:5000/kubernetes-e2e-test-images/nautilus:1.0. Jika gambar tidak berada di jalur registry lokal, image diambil secara otomatis dari kantor pendaftaran publik gcr.io.

Dengan menggunakan duplikat registry, Anda akan mendapatkan manfaat berikut:

  • Melindungi Anda dari gangguan registry publik.
  • Mempercepat pembuatan pod.
  • Memungkinkan Anda melakukan pemindaian kerentanan sendiri.
  • Menghindari batas yang diberlakukan oleh registry publik terkait seberapa sering Anda dapat menerbitkan perintah kepada mereka.

Sebelum memulai

  • Anda harus menyiapkan server container registry di jaringan.
  • Jika server registry Anda menjalankan sertifikat TLS pribadi, Anda harus memiliki file certificate authority (CA).
  • Jika server registry memerlukan autentikasi, Anda harus memiliki login yang benar kredensial, atau file konfigurasi Docker.
  • Untuk menggunakan duplikat registry, Anda harus menetapkan runtime container ke containerd.

Download semua gambar yang diperlukan untuk Google Distributed Cloud

Download alat bmctl dan paket image versi terbaru dari Halaman Download.

Mengupload image container ke server registry

Upload image dari paket image ke server registry dengan menjalankan:

[HTTPS_PROXY=http://PROXY_IP:PORT] ./bmctl push images \
    --source=./bmpackages_VERSION.tar.xz \
    --private-registry=REGISTRY_IP:PORT \
    [--cacert=CERT_PATH] \
    [--need-credential=false]

Ganti kode berikut:

  • PROXY_IP:PORT dengan alamat IP dan port jika Anda memerlukan {i>proxy<i} untuk mengunggah gambar dari komputer Anda ke di server registry.
  • VERSION dengan versi paket image yang Anda didownload dari halaman Download.
  • REGISTRY_IP:PORT dengan alamat IP dan porta server {i>private registry<i}.
  • CERT_PATH dengan jalur file sertifikat CA jika server {i>registry<i} menggunakan sertifikat TLS pribadi.

Masukkan nama pengguna dan sandi Anda saat diminta atau pilih konfigurasi Docker . Jika server registry Anda tidak memerlukan kredensial, tentukan --need-credential=false.

Untuk mengetahui informasi selengkapnya tentang perintah bmctl push images, jalankan:

bmctl push images --help

Menggunakan namespace Anda sendiri

Jika Anda ingin menggunakan namespace Anda sendiri di server registry, bukan untuk namespace root, containerd dapat mengambil dari namespace ini jika Anda menyediakan Endpoint API untuk registry pribadi Anda di registryMirrors.endpoint. Tujuan endpoint biasanya dalam format <REGISTRY_IP:PORT>/v2/<NAMESPACE>. Periksa panduan pengguna {i>registry<i} pribadi Anda untuk detail yang spesifik.

Misalnya, jika hanya memiliki akses ke 172.18.0.20:5000/test-namespace/, Anda bisa menggunakan perintah berikut untuk mengupload semua gambar dengan namespace test-namespace:

./bmctl push images \
    --source=./bmpackages_VERSION.tar.xz \
    --private-registry=172.18.0.20:5000/test-namespace \
    --username=<USERNAME> \
    --password=<PASSWORD> \
    --cacert <path/to/cert.crt>

Kemudian di file konfigurasi cluster, Anda dapat menambahkan kode berikut untuk membuat containerd diambil dari namespace:

registryMirrors:
  - endpoint: https://172.18.0.20:5000/v2/test-namespace

Mengonfigurasi cluster untuk menggunakan duplikat registry

Contoh file konfigurasi cluster berikut menetapkan bahwa gambar akan ditarik dari cermin {i>registry<i} lokal yang endpoint-nya https://172.18.0.20:5000. Beberapa isian muncul di awal file konfigurasi ini akan dijelaskan di bagian berikut.

# Sample cluster config with registry mirror:
---
gcrKeyPath: /bmctl/bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json
sshPrivateKeyPath: /root/ssh-key/id_rsa
registryMirrors:
  - endpoint: https://172.18.0.20:5000
    caCertPath: /root/ca.crt
    pullCredentialConfigPath: /root/.docker/config.json
    hosts:
      - somehost.io
      - otherhost.io
---
apiVersion: v1
kind: Namespace
metadata:
  name: cluster-admin1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: admin1
  namespace: cluster-admin1
spec:
  nodeConfig:
    containerRuntime: containerd
...

Kolom hosts

containerd akan memeriksa bagian hosts file konfigurasi cluster untuk menemukan {i>host<i} mana yang dicerminkan secara lokal. Dalam contoh file konfigurasi, registry publik yang tercantum di bagian hosts adalah somehost.io dan otherhost.io. Karena registry publik ini ditampilkan di bagian hosts, containerd akan memeriksa duplikasi registry pribadi terlebih dahulu saat menemukan pull permintaan gambar dari somehost.io atau otherhost.io.

Misalnya, containerd menerima perintah pull untuk somehost.io/kubernetes-e2e-test-images/nautilus:1.0. Karena somehost.io adalah terdaftar sebagai salah satu host di bagian hosts pada konfigurasi cluster , containerd mencari di duplikat registry lokal Gambar kubernetes-e2e-test-images/nautilus:1.0. Jika somehost.io tidak tercantum di bagian hosts, containerd tidak mengetahui bahwa duplikat lokal dari somehost.io ada. Dalam hal ini, containerd tidak memeriksa cermin untuk image tersebut, dan akan mengambil image dari registry publik somehost.io.

Perlu diperhatikan bahwa secara default, Google Distributed Cloud otomatis mencerminkan gambar dari gcr.io sehingga Anda tidak perlu mencantumkan gcr.io sebagai host di bagian hosts.

Kolom gcrKeyPath

Jika Anda ingin Google Distributed Cloud menggunakan Container Registry secara otomatis (gcr.io) untuk mengambil image yang tidak muncul di registry lokal, Anda harus menentukan jalur ke kunci akun layanan Container Registry. Google Distributed Cloud tidak memiliki mekanisme untuk menyediakan kunci untuk registry publik.

Jika Anda tidak berencana menggunakan fitur tempat gambar diambil dari gcr.io bila tidak muncul di {i>registry<i} lokal, maka Anda tidak perlu menambahkan gcrKeyPath ke file konfigurasi cluster.

Kolom caCertPath

Jika {i>registry<i} Anda memerlukan sertifikat keamanan lapisan transportasi pribadi (TLS), isian ini mengambil jalur ke file sertifikat CA {i>root<i} server. Ini file sertifikat harus ada di workstation admin, mesin yang menjalankan bmctl perintah. Jika {i>registry<i} Anda tidak memerlukan sertifikat TLS pribadi, maka Anda Anda dapat mengosongkan kolom caCertPath.

Kolom pullCredentialConfigPath

Jika server registry Anda tidak memerlukan konfigurasi Docker autentikasi , lalu Anda dapat mengosongkan kolom pullCredentialConfigPath. Perlu diketahui bahwa ini adalah jalur ke file konfigurasi pada mesin yang menjalankan bmctl perintah.

Menggunakan duplikat registry dengan cluster pengguna

Cluster pengguna tidak secara otomatis mengambil image dari cermin registry jika cluster admin telah dikonfigurasi untuk melakukannya. Agar klaster pengguna dapat ditarik dari sendiri, Anda perlu mengonfigurasinya satu per satu seperti yang dijelaskan dalam Konfigurasikan cluster untuk menggunakan duplikat registry.

Memperbarui endpoint duplikat registry, sertifikat, dan kredensial pull

Untuk mengupdate endpoint, sertifikat, atau kredensial pull registry:

  1. Di file konfigurasi cluster, perbarui endpoint, file sertifikat CA, dan jalur file konfigurasi kredensial pull.

  2. Terapkan perubahan dengan menjalankan:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
    

    Ganti kode berikut:

    • CLUSTER_NAME dengan nama cluster yang ingin Anda memperbarui.

    • ADMIN_KUBECONFIG dengan jalur cluster adminnya file konfigurasi Anda.

Memastikan gambar diambil dari duplikat registry

Bagian ini menjelaskan dua metode yang dapat Anda gunakan untuk memverifikasi apakah containerd mengambil gambar dari cermin registry lokal Anda dan bukan dari {i>registry<i}.

Metode #1: membandingkan ringkasan repositori

Metode ini melibatkan perbandingan digest repositori untuk menentukan apakah telah diambil dari cerminan {i>registry<i} Anda.

Perlu diingat bahwa registry memiliki ID unik yang disebut repositori digest, dan gambar memiliki ID unik yang disebut ringkasan image container. Dua gambar yang identik memiliki ringkasan image container yang sama, meskipun image yang berasal dari registry yang berbeda. Namun, jika gambar berasal dari {i>registry<i}, mereka memiliki ringkasan repositori yang berbeda.

  1. Login ke node cluster menggunakan SSH.

  2. Pilih image yang asalnya ingin Anda verifikasi.

  3. Ambil image dari registry publik yang Anda gunakan dengan menjalankan perintah berikut berikut:

    crictl pull PUBLIC_ENDPOINT
    

    Ganti PUBLIC_ENDPOINT dengan jalur gambar di kantor pendaftaran publik. Contoh: gcr.io/anthos-baremetal-release/kube-rbac-proxy:v0.6.0-gke.0.

  4. Ambil image yang sama dari duplikat registry Anda dengan menjalankan perintah berikut:

    crictl pull MIRROR_ENDPOINT
    

    Ganti MIRROR_ENDPOINT dengan jalur gambar di atau registry duplikat. Contoh: 10.168.15.224:5007/test-namespace/anthos-baremetal-release/kube-rbac-proxy:v0.6.0-gke.0.

  5. Jalankan perintah berikut untuk menampilkan ringkasan repositori keduanya gambar yang Anda ambil pada langkah sebelumnya:

    crictl inspecti PUBLIC_OR_MIRROR_ENDPOINT | grep -A 3 repoDigests
    

    Ganti PUBLIC_OR_MIRROR_ENDPOINT dengan endpoint publik image atau endpoint duplikat registry image. Pilih salah satu tidak masalah karena perintah crictl inspecti melihat image container ringkasan argumen yang Anda berikan. Karena gambar dari publik identik dengan gambar dari cermin registry, keduanya memiliki digest image container yang sama.

    Output dari perintah mungkin terlihat seperti berikut:

    "repoDigests": [
      "gcr.io/anthos-baremetal-release/kube-rbac-proxy@sha256:
      27be66fb9140d83c4af8794a234b998c90e844e3414108ce72db603f4f6ea0b3",
      "10.168.15.224:5007/test-namespace/anthos-baremetal-release/kube-rbac-proxy@sha256:
      27be66fb9140d83c4af8794a234b998c90e844e3414108ce72db603f4f6ea0b3"
    ],
    
  6. Bandingkan ringkasan repositori yang muncul dalam huruf tebal pada output dari langkah sebelumnya. Jika ringkasan identik, node di cluster Anda dari cermin {i>registry<i} Anda. Jika tidak, node cluster Anda mengambil image dari kantor pendaftaran publik.

Metode #2: memeriksa file config.toml

Anda dapat menentukan apakah containerd mengambil gambar dari lokal Anda registry dengan memeriksa isi file config.toml seperti yang ditunjukkan dalam langkah-langkah berikut:

  1. Login ke node dan periksa konten file berikut: /etc/containerd/config.toml

  2. Periksa bagian plugins."io.containerd.grpc.v1.cri".registry.mirrors pada file config.toml untuk melihat apakah server registry Anda tercantum dalam Kolom endpoint. Berikut adalah kutipan dari contoh file config.toml di yang kolom endpoint muncul dalam cetak tebal:

    version = 2
    root = "/var/lib/containerd"
    state = "/run/containerd"
    ...
    [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
        [plugins."io.containerd.grpc.v1.cri".registry.configs."gcr.io"]
          [plugins."io.containerd.grpc.v1.cri".registry.configs."privateregistry2.io".tls]
            ca_file = '/etc/containerd/certs.d/privateregistry2.io/ca.crt'
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
          endpoint = ["http://privateregistry.io", "http://privateregistry2.io"]
    ...
    

    Jika duplikat registry Anda muncul di kolom endpoint, berarti node tersebut mengambil gambar dari cermin {i>registry<i} Anda dan bukan dari {i>registry<i} publik.