Halaman ini menjelaskan cara membuat cluster menggunakan image yang diambil dari pencerminan
registry, bukan dari registry publik, seperti gcr.io
.
Duplikasi registry adalah salinan lokal dari registry publik yang menyalin atau menduplikasi struktur file registry publik. Misalnya, jalur ke pencerminan registry lokal Anda adalah 172.18.0.20:5000
. Saat
containerd
menemukan permintaan untuk mengambil image seperti
gcr.io/kubernetes-e2e-test-images/nautilus:1.0
, containerd
akan mencoba mengambil
image tersebut, bukan dari gcr.io
, tetapi dari registry lokal Anda di jalur
berikut: 172.18.0.20:5000/kubernetes-e2e-test-images/nautilus:1.0
. Jika image tidak ada di jalur registry lokal ini, image akan otomatis diambil dari gcr.io
registry publik.
Menggunakan duplikasi registry memberikan manfaat berikut:
- Melindungi Anda dari pemadaman registry publik.
- Mempercepat pembuatan pod.
- Memungkinkan Anda melakukan pemindaian kerentanan.
- Menghindari batasan yang diberlakukan oleh registry publik terkait seberapa sering Anda dapat memberikan perintah.
Sebelum memulai
- Anda harus menyiapkan server container registry di jaringan Anda.
- Jika server registry Anda menjalankan sertifikat TLS pribadi, Anda harus memiliki file certificate authority (CA).
- Jika server registry memerlukan autentikasi, Anda harus memiliki kredensial login atau file konfigurasi Docker yang tepat.
- Untuk menggunakan mirror registry, Anda harus menetapkan runtime container ke containerd.
Download semua image yang diperlukan untuk GKE di Bare Metal
Download versi terbaru alat bmctl
dan paket image 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 proxy jika Anda memerlukan proxy untuk mengupload gambar dari workstation Anda ke server registry.VERSION
dengan versi paket image yang Anda download dari halaman Download.REGISTRY_IP:PORT
dengan alamat IP dan port server registry pribadi.CERT_PATH
dengan jalur file sertifikat CA jika server registry Anda menggunakan sertifikat TLS pribadi.
Masukkan nama pengguna dan sandi saat diminta atau pilih file konfigurasi Docker. Jika server registry Anda tidak memerlukan kredensial, tentukan
--need-credential=false
.
Untuk informasi selengkapnya tentang perintah bmctl push images
, jalankan:
bmctl push images --help
Menggunakan namespace Anda sendiri
Jika ingin menggunakan namespace Anda sendiri di server registry, bukan namespace root, containerd
dapat melakukan pull dari namespace ini jika Anda menyediakan endpoint API untuk registry pribadi Anda di registryMirrors.endpoint
. Endpoint
biasanya dalam format <REGISTRY_IP:PORT>/v2/<NAMESPACE>
. Lihat panduan pengguna registry pribadi Anda untuk mengetahui detail yang spesifik.
Misalnya, jika hanya memiliki akses ke 172.18.0.20:5000/test-namespace/
, Anda
dapat menggunakan perintah berikut untuk mengupload semua gambar pada 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
menarik dari namespace:
registryMirrors:
- endpoint: https://172.18.0.20:5000/v2/test-namespace
Membuat cluster dari duplikasi registry
Contoh file konfigurasi cluster berikut menentukan bahwa gambar akan
diambil dari mirror registry lokal yang endpoint-nya adalah https://172.18.0.20:5000
.
Beberapa kolom yang muncul di awal file konfigurasi ini 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
memeriksa bagian hosts
file konfigurasi cluster untuk
menemukan host 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 muncul di bagian hosts
, containerd
akan memeriksa mirror registry pribadi terlebih dahulu saat menemukan permintaan pull untuk gambar dari somehost.io
atau otherhost.io
.
Misalnya, containerd
menerima perintah pull ke
somehost.io/kubernetes-e2e-test-images/nautilus:1.0
. Karena somehost.io
terdaftar
sebagai salah satu host di bagian hosts
file konfigurasi cluster,
containerd
akan melihat mirror registry lokal untuk
gambar kubernetes-e2e-test-images/nautilus:1.0
. Jika somehost.io
tidak tercantum dalam
bagian hosts
, containerd
tidak tahu bahwa pencerminan lokal somehost.io
ada. Dalam hal ini, containerd
tidak memeriksa pencerminan untuk
image, dan hanya mengambil image dari registry publik somehost.io
.
Perhatikan bahwa secara default, GKE di Bare Metal otomatis mencerminkan gambar dari gcr.io
sehingga Anda tidak perlu mencantumkan gcr.io
sebagai host di bagian hosts
.
Kolom gcrKeyPath
Jika Anda ingin GKE di Bare Metal otomatis menggunakan Container Registry (gcr.io
) untuk mengambil image yang tidak muncul di registry lokal, Anda harus menentukan jalur ke kunci akun layanan Container Registry. GKE di Bare Metal tidak memiliki mekanisme untuk menyediakan kunci untuk registry publik lainnya.
Jika Anda tidak berencana menggunakan fitur tempat gambar diambil dari gcr.io
saat gambar tersebut tidak muncul di registry lokal, Anda tidak perlu
menambahkan gcrKeyPath
ke file konfigurasi cluster.
Kolom caCertPath
Jika registry Anda memerlukan sertifikat Private Transport Layer Security (TLS), kolom ini akan mengambil jalur ke file sertifikat root CA server. File
sertifikat ini harus berada di workstation admin, mesin yang menjalankan perintah
bmctl
. Jika registry tidak memerlukan sertifikat TLS pribadi, Anda dapat mengosongkan kolom caCertPath
.
Kolom pullCredentialConfigPath
Jika server registry tidak memerlukan file konfigurasi Docker autentikasi, Anda dapat mengosongkan kolom pullCredentialConfigPath
. Perhatikan bahwa
ini adalah jalur ke file konfigurasi pada mesin yang menjalankan perintah bmctl
.
Membuat cluster pengguna dari pencerminan registry
Cluster pengguna tidak otomatis mengambil gambar dari duplikasi registry jika cluster adminnya telah dikonfigurasi untuk melakukannya. Agar cluster pengguna diambil dari mirror registry, Anda harus mengonfigurasinya satu per satu seperti yang dijelaskan dalam Membuat cluster dari pencerminan registry.
Mengupdate endpoint pencerminan registry, sertifikat, dan kredensial pull
Untuk mengupdate endpoint pencerminan registry, sertifikat, atau kredensial pull:
Di file konfigurasi cluster, perbarui endpoint, file sertifikat CA, dan tarik jalur file konfigurasi kredensial.
Terapkan perubahan dengan menjalankan:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
Ganti kode berikut:
- CLUSTER_NAME dengan nama cluster yang ingin Anda perbarui.
- ADMIN_KUBECONFIG dengan jalur file konfigurasi cluster adminnya.
Memastikan gambar diambil dari pencerminan registry
Bagian ini menjelaskan dua metode yang dapat Anda gunakan untuk memverifikasi apakah containerd
menarik image dari mirror registry lokal Anda, bukan dari registry publik.
Metode #1: membandingkan ringkasan repositori
Metode ini melibatkan perbandingan ringkasan repositori untuk menentukan apakah image telah diambil dari mirror registry Anda.
Perlu diingat bahwa registry memiliki ID unik yang disebut ringkasan repositori, dan image memiliki ID unik yang disebut ringkasan image container. Dua image yang identik memiliki digest image container yang sama, meskipun image tersebut berasal dari registry yang berbeda. Namun, jika gambar berasal dari registry yang berbeda, ringkasan repositorinya akan berbeda.
Login ke node cluster menggunakan SSH.
Pilih gambar yang asalnya ingin Anda verifikasi.
Tarik image dari registry publik yang Anda gunakan dengan menjalankan perintah berikut:
crictl pull PUBLIC_ENDPOINT
Ganti
PUBLIC_ENDPOINT
dengan jalur image di registry publik. Contoh:gcr.io/anthos-baremetal-release/kube-rbac-proxy:v0.6.0-gke.0
.Ambil image yang sama dari mirror registry Anda dengan menjalankan perintah berikut:
crictl pull MIRROR_ENDPOINT
Ganti
MIRROR_ENDPOINT
dengan jalur image di mirror registry Anda. Contoh:10.168.15.224:5007/test-namespace/anthos-baremetal-release/kube-rbac-proxy:v0.6.0-gke.0
.Jalankan perintah berikut untuk menampilkan ringkasan repositori dari dua gambar yang Anda tarik pada langkah sebelumnya:
crictl inspecti PUBLIC_OR_MIRROR_ENDPOINT | grep -A 3 repoDigests
Ganti
PUBLIC_OR_MIRROR_ENDPOINT
dengan endpoint publik gambar atau endpoint pencerminan registry gambar. Salah satunya tidak masalah karena perintahcrictl inspecti
melihat ringkasan image container dari argumen yang Anda teruskan. Karena image dari registry publik identik dengan image dari mirror registry, keduanya memiliki ringkasan image container yang sama.Output dari perintah akan terlihat seperti ini:
"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" ],
Bandingkan ringkasan repositori yang muncul dalam huruf tebal pada output dari langkah sebelumnya. Jika ringkasan identik, node dalam cluster Anda akan menarik dari mirror registry Anda. Jika tidak, node cluster Anda akan menarik image dari registry publik.
Metode #2: memeriksa file config.toml
Anda dapat menentukan apakah containerd
mengambil gambar dari registry lokal Anda dengan memeriksa konten file config.toml
seperti yang ditunjukkan pada langkah-langkah berikut:
Login ke node dan periksa konten file berikut:
/etc/containerd/config.toml
Periksa bagian
plugins."io.containerd.grpc.v1.cri".registry.mirrors
dari fileconfig.toml
untuk melihat apakah server registry Anda tercantum di kolomendpoint
. Berikut adalah kutipan dari contoh fileconfig.toml
yang menampilkan kolomendpoint
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 cermin registry Anda muncul di kolom endpoint
, berarti node tersebut menarik gambar dari pencerminan registry Anda, bukan dari registry publik.