Halaman ini menjelaskan cara membuat dan mengupgrade cluster menggunakan gambar yang diambil dari
duplikasi registry, bukan dari registry publik, seperti gcr.io
. Fitur ini dapat diaktifkan atau dinonaktifkan kapan saja dalam siklus proses cluster.
Cermin registry adalah salinan lokal dari registry publik yang menyalin atau
mencerminkan struktur file registry publik. Misalnya, jalur ke duplikat registry lokal Anda adalah 172.18.0.20:5000
. Saat containerd
menerima 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 diambil secara otomatis dari
registry 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 tentang seberapa sering Anda dapat memberikan perintah kepada registry tersebut.
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 kredensial login atau file konfigurasi Docker yang tepat.
- Untuk menggunakan duplikat registry, Anda harus menetapkan runtime container ke containerd.
Download semua gambar yang diperlukan untuk Google Distributed Cloud
Download versi terbaru alat dan paket image bmctl
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 image dari workstation 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 Anda saat diminta, atau pilih file 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
namespace root, containerd
dapat mengambil dari namespace ini jika Anda menyediakan
endpoint API untuk registry pribadi di registryMirrors.endpoint
. Endpoint
biasanya dalam format <REGISTRY_IP:PORT>/v2/<NAMESPACE>
. Lihat
panduan pengguna registry pribadi Anda untuk mengetahui detail 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
mengambil dari namespace:
registryMirrors:
- endpoint: https://172.18.0.20:5000/v2/test-namespace
Mengonfigurasi cluster untuk menggunakan duplikat registry
Contoh file konfigurasi cluster berikut menentukan bahwa gambar akan
diambil dari duplikat 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
akan memeriksa bagian hosts
file konfigurasi cluster untuk
menemukan host yang dicerminkan secara lokal. Pada 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 duplikasi registry pribadi terlebih dahulu saat menemui permintaan
pull untuk gambar dari somehost.io
atau otherhost.io
.
Sebagai contoh, misalnya containerd
menerima perintah pull ke somehost.io/kubernetes-e2e-test-images/nautilus:1.0
. Karena somehost.io
tercantum sebagai salah satu host di bagian hosts
pada file konfigurasi
cluster, containerd
akan mencari image
kubernetes-e2e-test-images/nautilus:1.0
di duplikat registry lokal. Jika somehost.io
tidak tercantum
di bagian hosts
, containerd
tidak akan mengetahui bahwa duplikasi lokal
somehost.io
ada. Dalam hal ini, containerd
tidak memeriksa duplikat untuk
gambar, dan mengambil gambar 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 (gcr.io
) secara otomatis 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 lainnya.
Jika 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 CA root server. File
sertifikat ini harus berada di workstation admin, yaitu mesin yang menjalankan perintah
bmctl
. Jika registry Anda tidak memerlukan sertifikat TLS pribadi, Anda dapat mengosongkan kolom caCertPath
.
Kolom pullCredentialConfigPath
Jika server registry Anda 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
.
Menggunakan duplikat registry dengan cluster pengguna
Cluster pengguna tidak otomatis mengambil gambar dari pencerminan registry jika cluster adminnya telah dikonfigurasi untuk melakukannya. Agar cluster pengguna dapat diambil dari duplikat registry, Anda harus mengonfigurasinya satu per satu seperti yang dijelaskan dalam Mengonfigurasi cluster untuk menggunakan duplikat registry.
Memperbarui endpoint duplikat registry, sertifikat, dan kredensial pull
Untuk mengupdate endpoint, sertifikat, atau kredensial pull registry:
Di file konfigurasi cluster, perbarui endpoint, file sertifikat CA, dan jalur file konfigurasi kredensial pull.
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 duplikat registry
Bagian ini menjelaskan dua metode yang dapat digunakan untuk memverifikasi apakah containerd
menarik image dari duplikat registry lokal Anda, bukan dari registry
publik.
Metode #1: membandingkan ringkasan repositori
Metode ini melibatkan perbandingan ringkasan repositori untuk menentukan apakah gambar telah diambil dari cermin registry Anda.
Perlu diingat bahwa registry memiliki ID unik yang disebut ringkasan repositori, dan image memiliki ID unik yang disebut ringkasan image container. Dua gambar yang identik memiliki ringkasan image container yang sama, meskipun gambar berasal dari registry yang berbeda. Namun, jika image berasal dari registry yang berbeda, image tersebut memiliki ringkasan repositori yang berbeda.
Login ke node cluster menggunakan SSH.
Pilih image yang asalnya ingin Anda verifikasi.
Ambil 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 duplikat registry Anda dengan menjalankan perintah:
crictl pull MIRROR_ENDPOINT
Ganti
MIRROR_ENDPOINT
dengan jalur gambar di duplikat 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 ambil pada langkah sebelumnya:
crictl inspecti PUBLIC_OR_MIRROR_ENDPOINT | grep -A 3 repoDigests
Ganti
PUBLIC_OR_MIRROR_ENDPOINT
dengan endpoint publik gambar atau endpoint duplikat registry gambar. Salah satunya tidak masalah karena perintahcrictl inspecti
melihat ringkasan image container dari argumen yang Anda teruskan. Karena gambar dari registry publik identik dengan gambar dari pencerminan registry, keduanya memiliki ringkasan 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" ],
Bandingkan ringkasan repositori yang muncul dalam huruf tebal di output dari langkah sebelumnya. Jika ringkasan identik, node dalam cluster Anda akan diambil dari cermin registry. Jika tidak, node cluster Anda akan menarik image dari registry publik.
Metode #2: memeriksa file config.toml
Anda dapat menentukan apakah containerd
mengambil image dari registry
lokal dengan memeriksa isi file config.toml
seperti yang ditunjukkan dalam
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
fileconfig.toml
untuk melihat apakah server registry Anda tercantum di kolomendpoint
. Berikut adalah kutipan dari contoh fileconfig.toml
yang menampilkan kolomendpoint
dalam huruf 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 ini menarik image dari pencerminan registry Anda, bukan dari registry publik.