Halaman ini menjelaskan cara membuat dan mengupgrade cluster menggunakan image yang diambil dari mirror registry, bukan dari registry publik, seperti gcr.io
. Fitur
ini dapat diaktifkan atau dinonaktifkan kapan saja dalam siklus proses cluster.
Halaman ini ditujukan bagi Operator dan spesialis Penyimpanan yang mengonfigurasi dan mengelola performa, penggunaan, dan biaya penyimpanan. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud, lihat Peran dan tugas pengguna GKE Enterprise umum.
Mirror registry adalah salinan lokal dari registry publik yang menyalin atau mencerminkan
struktur file registry publik. Misalnya, anggap jalur
ke mirror 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 diambil secara otomatis dari
registry publik gcr.io
.
Menggunakan mirror registry memberikan manfaat berikut:
- Melindungi Anda dari pemadaman layanan registry publik.
- Mempercepat pembuatan pod.
- Memungkinkan Anda melakukan pemindaian kerentanan sendiri.
- Menghindari batasan yang diberlakukan oleh registry publik terkait frekuensi Anda dapat memberikan perintah kepada mereka.
Sebelum memulai
- Anda harus menyiapkan server container registry di jaringan.
- Jika server registry 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 sesuai.
- Untuk menggunakan mirror registry, Anda harus menetapkan runtime container ke containerd.
Mendownload semua image yang diperlukan untuk Google Distributed Cloud
Download alat bmctl
dan paket gambar versi terbaru dari
halaman Download.
Mengupload image container ke server registry
Upload gambar dari paket gambar ke server registry Anda 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 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>
. Periksa
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 dalam 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, dalam file konfigurasi cluster, Anda dapat menambahkan hal berikut untuk membuat
containerd
menarik dari namespace:
registryMirrors:
- endpoint: https://172.18.0.20:5000/v2/test-namespace
Mengonfigurasi cluster untuk menggunakan mirror registry
Anda dapat mengonfigurasi mirror registry untuk cluster saat pembuatan cluster atau setiap kali Anda mengupdate cluster yang ada. Metode konfigurasi yang Anda gunakan bergantung pada jenis cluster dan, untuk cluster pengguna, apakah Anda membuat cluster atau mengupdate cluster. Dua bagian berikut menjelaskan dua metode yang tersedia untuk mengonfigurasi mirror registry.
Menggunakan bagian header dalam file konfigurasi cluster
Google Distributed Cloud memungkinkan Anda menentukan mirror registry di luar spesifikasi Cluster, di bagian header file konfigurasi cluster:
Untuk cluster admin, campuran, dan mandiri, satu-satunya cara untuk mengonfigurasi mirror registry adalah dengan menggunakan bagian header dalam file konfigurasi cluster. Metode ini berlaku untuk pembuatan cluster atau update cluster.
Untuk cluster pengguna, Anda dapat menggunakan metode ini untuk mengonfigurasi mirror registry hanya selama pembuatan cluster. Atau, untuk mengonfigurasi mirror registry untuk cluster pengguna yang ada, Anda menggunakan bagian
nodeConfig.registryMirrors
dalam spesifikasi Cluster.
Contoh file konfigurasi cluster berikut menentukan bahwa image 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
...
Menggunakan bagian nodeConfig.registryMirrors
dalam spesifikasi Cluster
Metode pembuatan atau pembaruan mirror registry ini hanya berlaku untuk cluster pengguna. Karena Anda dapat membagikan secret yang dibuat untuk cluster pengelola dengan
cluster pengguna, Anda dapat menggunakan nodeConfig.registryMirrors
dari
admin pengelola atau cluster campuran untuk menentukan mirror registry dalam spesifikasi
Cluster untuk cluster pengguna.
Untuk mengonfigurasi cluster pengguna agar menggunakan mirror registry yang sama dengan cluster admin, ikuti langkah-langkah berikut:
Dapatkan bagian
nodeConfig.registryMirror
, termasuk referensi secret, darinodeConfig.registryMirrors
resource cluster admin:kubectl get CLUSTER_NAME -n CLUSTER_NAMESPACE \ --kubeconfig ADMIN_KUBECONFIG \ -o yaml
Ganti kode berikut:
CLUSTER_NAME
: nama cluster admin atau hybrid yang mengelola cluster pengguna.CLUSTER_NAMESPACE
: nama namespace untuk cluster pengelola.ADMIN_KUBECONFIG
: jalur file kubeconfig cluster pengelola.
Tambahkan konfigurasi
nodeConfig.registryMirrors
dari cluster admin ke file konfigurasi cluster dari cluster pengguna.Bagian
registryMirrors
dalam file konfigurasi cluster pengguna akan terlihat seperti contoh berikut:--- gcrKeyPath: /bmctl/bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json sshPrivateKeyPath: /root/ssh-key/id_rsa --- apiVersion: v1 kind: Namespace metadata: name: cluster-user1 --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user1 namespace: cluster-user1 spec: nodeConfig: containerRuntime: containerd registryMirrors: - caCertSecretRef: name: the-secret-created-for-the-admin-cluster namespace: anthos-creds endpoint: https://172.18.0.20:5000 hosts: - somehost.io - otherhost.io pullCredentialSecretRef: name: the-image-pull-creds-created-for-the-admin-cluster namespace: anthos-creds ...
Untuk membuat perubahan berikutnya pada konfigurasi mirror registry untuk cluster pengguna, edit nodeConfig.registryMirrors
dalam file konfigurasi cluster pengguna dan terapkan perubahan dengan bmctl update
.
Anda tidak dapat menggunakan bagian header file konfigurasi cluster untuk memperbarui konfigurasi mirror registry untuk cluster pengguna.
Kolom hosts
containerd
memeriksa bagian hosts
dari file konfigurasi cluster untuk
menemukan host yang dicerminkan secara lokal. Dalam contoh file konfigurasi,
registri 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 image dari somehost.io
atau otherhost.io
.
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
dalam file konfigurasi
cluster, containerd
akan mencari image kubernetes-e2e-test-images/nautilus:1.0
di mirror registry lokal. Jika somehost.io
tidak tercantum
di bagian hosts
, containerd
tidak mengetahui bahwa mirror lokal
somehost.io
ada. Dalam hal ini, containerd
tidak memeriksa mirror untuk
image, dan mengambil image dari registry publik somehost.io
.
Perhatikan 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 ingin Google Distributed Cloud 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.
Google Distributed Cloud tidak memiliki mekanisme untuk menyediakan kunci bagi
registry publik lainnya.
Jika tidak berencana menggunakan fitur yang gambarnya diambil dari gcr.io
saat tidak muncul di registry lokal, Anda tidak perlu menambahkan
gcrKeyPath
ke file konfigurasi cluster.
Kolom caCertPath
Jika registry Anda memerlukan sertifikat transport layer security (TLS) pribadi,
kolom ini akan menggunakan jalur ke file sertifikat root CA server. File
sertifikat ini harus berada di workstation admin, yaitu komputer 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 di komputer yang menjalankan perintah
bmctl
.
Menggunakan mirror registry dengan cluster pengguna
Cluster pengguna tidak otomatis mengambil image dari mirror registry jika cluster adminnya telah dikonfigurasi untuk melakukannya. Agar cluster pengguna mengambil dari mirror registry, Anda harus mengonfigurasinya satu per satu seperti yang dijelaskan dalam Mengonfigurasi cluster untuk menggunakan mirror registry.
Memperbarui endpoint, sertifikat, dan kredensial pull mirror registry
Untuk memperbarui endpoint, sertifikat, atau kredensial pull mirror registry:
Dalam 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.
Memverifikasi bahwa image diambil dari mirror registry
Anda dapat menentukan apakah containerd
mengambil gambar dari registry lokal
Anda dengan memeriksa konten 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 kolomendpoint
-nya muncul 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 mirror registry Anda muncul di kolom
endpoint
, node akan mengambil image dari mirror registry, bukan dari registry publik.