Halaman ini menunjukkan cara membuat dan memublikasikan image Anda ke repositori di Artifact Registry dengan crane dan oras.
Anda dapat mengonfigurasi Config Sync untuk menyinkronkan dari image OCI menggunakan Artifact Registry. Untuk menggunakan fitur ini, Anda harus mengaktifkan RootSync dan RepoSync API.
Tentang Artifact Registry
Artifact Registry adalah layanan terkelola sepenuhnya dengan dukungan untuk image container dan artefak non-container. Kami merekomendasikan Artifact Registry untuk penyimpanan dan pengelolaan image container Anda di Google Cloud. Ada banyak alat yang tersedia untuk mengirim artefak ke Artifact Registry. Misalnya, Anda dapat mengirim image Docker atau menggunakan library go-containerregistry untuk bekerja dengan container registry. Pilih alat yang paling sesuai untuk Anda.
Sebelum memulai
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan GKE API, Config Sync API, dan Artifact Registry API, jika ada yang belum diaktifkan:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.gcloud services enable container.googleapis.com
anthosconfigmanagement.googleapis.com artifactregistry.googleapis.com -
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan GKE API, Config Sync API, dan Artifact Registry API, jika ada yang belum diaktifkan:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.gcloud services enable container.googleapis.com
anthosconfigmanagement.googleapis.com artifactregistry.googleapis.com - Buat, atau miliki akses ke, cluster yang memenuhi persyaratan untuk Config Sync dan menggunakan Config Sync versi terbaru.
- Instal
nomosCLI atau upgrade ke versi terbaru. - (Opsional) Jika Anda ingin menggunakan Cosign untuk memverifikasi tanda tangan gambar OCI, instal berikut ini:
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Membuat repositori Artifact Registry
Di bagian ini, Anda akan membuat repositori Artifact Registry. Untuk mempelajari lebih lanjut cara membuat repositori Artifact Registry, lihat Membuat repositori.
Buat repositori Artifact Registry:
gcloud artifacts repositories create AR_REPO_NAME \
--repository-format=docker \
--location=AR_REGION \
--description="Config Sync repo" \
--project=PROJECT_ID
Ganti kode berikut:
PROJECT_ID: project ID organisasi.AR_REPO_NAME: ID repositori.AR_REGION: lokasi repositori regional atau multi-regional.
Variabel yang digunakan di bagian berikut:
FLEET_HOST_PROJECT_NUMBER: jika Anda menggunakan GKE Workload Identity Federation for GKE, nilai ini sama dengan nomor project untukPROJECT_ID. Jika Anda menggunakan Workload Identity Federation for GKE, ini adalah nomor project fleet tempat cluster Anda terdaftar.FLEET_HOST_PROJECT_ID: jika Anda menggunakan GKE Workload Identity Federation for GKE, nilai ini sama denganPROJECT_ID. Jika Anda menggunakan fleet Workload Identity Federation untuk GKE, ini adalah project ID fleet tempat cluster Anda terdaftar.KUBERNETES_SERVICEACCOUNT: ServiceAccount Kubernetes untuk rekonsiliasi:- Untuk repositori root, jika nama
RootSyncadalahroot-sync, tambahkanroot-reconciler. Jika tidak, tambahkanroot-reconciler-ROOT_SYNC_NAME. - Untuk repositori namespace, jika nama
RepoSyncadalahrepo-sync, tambahkanns-reconciler-NAMESPACE. Jika tidak, tambahkanns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTHdenganREPO_SYNC_NAME_LENGTHadalah jumlah karakter dalamREPO_SYNC_NAME.
- Untuk repositori root, jika nama
Memberikan izin pembaca
Berikan peran Artifact Registry Reader (roles/artifactregistry.reader)
di repositori ke ServiceAccount Kubernetes:
gcloud artifacts repositories add-iam-policy-binding AR_REPO_NAME \
--location=AR_REGION \
--member="principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/FLEET_HOST_PROJECT_ID.svc.id.goog/subject/ns/config-management-system/sa/KUBERNETES_SERVICEACCOUNT" \
--role=roles/artifactregistry.reader \
--project=PROJECT_ID \
--condition=None
Mengirim image ke repositori Artifact Registry
Di bagian ini, Anda akan membuat image OCI dan mengirimkannya ke Artifact Registry.
Buat file manifes
Namespace:cat <<EOF> test-namespace.yaml apiVersion: v1 kind: Namespace metadata: name: test EOFLogin ke Artifact Registry:
gcloud auth configure-docker AR_REGION-docker.pkg.devKemasi dan kirim image ke Artifact Registry:
cranePerintah di bagian ini menggunakan
craneuntuk berinteraksi dengan image dan registry jarak jauh.Paketkan file:
tar -cf test-namespace.tar test-namespace.yamlInstal alat
crane.Mengirim image ke Artifact Registry:
crane append -f test-namespace.tar -t AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1
orasPerintah di bagian ini menggunakan
orasuntuk berinteraksi dengan image dan registry jarak jauh.Paketkan file:
tar -czf test-namespace.tar.gz test-namespace.yamlInstal alat
oras.Mengirim image ke Artifact Registry:
oras push AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 test-namespace.tar.gz
Mengonfigurasi Config Sync untuk menyinkronkan dari image Anda
Di bagian ini, Anda akan membuat objek RootSync dan mengonfigurasi Config Sync
untuk menyinkronkan dari image OCI.
Buat objek
RootSyncdengan nama unik:cat <<EOF>> ROOT_SYNC_NAME.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceFormat: unstructured sourceType: oci oci: image: AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 dir: . auth: k8sserviceaccount EOFGanti
ROOT_SYNC_NAMEdengan nama objekRootSyncAnda. Nama harus unik dalam cluster dan tidak boleh lebih dari 26 karakter. Untuk mengetahui daftar lengkap opsi saat mengonfigurasi objekRootSync, lihat kolomRootSyncdanRepoSync.Terapkan objek
RootSync:kubectl apply -f ROOT_SYNC_NAME.yamlPastikan Config Sync menyinkronkan dari image:
nomos status --contexts=$(kubectl config current-context)Anda akan melihat output yang mirip dengan contoh berikut ini:
Connecting to clusters... *publish-config-registry -------------------- <root>:root-sync-test AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 SYNCED 05e6a6b77de7a62286387cfea833d45290105fe84383224938d7b3ab151a55a1 Managed resources: NAMESPACE NAME STATUS SOURCEHASH namespace/test Current 05e6a6bAnda kini telah berhasil menyinkronkan image ke cluster.
(Opsional) Memverifikasi tanda tangan sumber OCI
Anda dapat memverifikasi keaslian image sumber OCI sebelum konfigurasi diterapkan ke cluster Anda. Metode ini menggunakan objek ValidatingWebhookConfiguration dan server webhook validasi untuk mencegat permintaan update untuk objek RootSync dan RepoSync. Config Sync mengupdate anotasi configsync.gke.io/image-to-sync
objek RootSync dan RepoSync setelah berhasil mengambil ringkasan
image baru. Server webhook validasi membandingkan nilai antara anotasi lama dan anotasi baru, serta menjalankan validasi dengan alat validasi seperti Cosign saat perubahan terdeteksi.
Menyiapkan server verifikasi tanda tangan
Untuk memastikan keaslian sumber OCI Anda, Anda memerlukan server HTTP untuk memverifikasi tanda tangan. Anda dapat menggunakan contoh di repositori contoh Config Sync atau menggunakan image Docker Anda sendiri.
Jika Anda ingin menggunakan sampel yang disediakan, selesaikan langkah-langkah berikut:
Gandakan repositori contoh:
git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples/Ubah ke direktori yang berisi contoh server verifikasi tanda tangan:
cd anthos-config-management-samples/tree/main/pre-sync/oci-image-verification
Untuk membuat image Docker bagi server verifikasi tanda tangan dan mengirimkannya ke registry image, jalankan perintah berikut:
docker build -t SIGNATURE_VERIFICATION_SERVER_IMAGE_URL:latest . && docker push SIGNATURE_VERIFICATION_SERVER_IMAGE_URL:latestGanti
SIGNATURE_VERIFICATION_SERVER_IMAGE_URLdengan URL image server verifikasi tanda tangan Anda.
Mengautentikasi ke layanan
Untuk menyiapkan server verifikasi tanda tangan, Anda harus mengautentikasi ke Artifact Registry, klien Cosign, dan server webhook.
Buat namespace
kubectl create ns signature-verificationUntuk melakukan autentikasi ke Artifact Registry dengan ServiceAccount Kubernetes, selesaikan langkah-langkah berikut:
Buat ServiceAccount Kubernetes di namespace yang Anda buat:
kubectl create sa signature-verification-sa -n signature-verificationBerikan peran Artifact Registry Reader (
roles/artifactregistry.reader) di repositori ke ServiceAccount Kubernetes:gcloud artifacts repositories add-iam-policy-binding REPOSITORY_NAME \ --location=REPOSITORY_LOCATION \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/signature-verification/sa/signature-verification-sa" \ --role=roles/artifactregistry.reader \ --project=PROJECT_ID \ --condition=NoneGanti kode berikut:
REPOSITORY_NAME: nama repositori Artifact Registry tempat Anda menyimpan image OCI.REPOSITORY_LOCATION: lokasi repositori Artifact Registry Anda.PROJECT_NUMBER: nomor project Anda.PROJECT_ID: project ID Anda.
Untuk melakukan autentikasi ke klien Cosign, selesaikan langkah-langkah berikut:
Buat pasangan kunci Cosign. Perintah ini menghasilkan kunci publik dan pribadi:
cosign generate-key-pairSimpan kunci publik di Secret Kubernetes dalam namespace yang Anda buat:
kubectl create secret generic cosign-key --from-file=cosign.pub -n signature-verification
Untuk mengautentikasi server verifikasi tanda tangan, selesaikan langkah-langkah berikut:
Untuk mengenkripsi komunikasi dalam server verifikasi tanda tangan, buat sertifikat TLS dan kunci pribadi dengan OpenSSL:
openssl req -nodes -x509 -sha256 -newkey rsa:4096 \ -keyout tls.key \ -out tls.crt \ -days 356 \ -subj "/CN=signature-verification-service.signature-verification.svc" \ -addext "subjectAltName = DNS:signature-verification-service,DNS:signature-verification-service.signature-verification.svc,DNS:signature-verification-service.signature-verification"Simpan kredensial yang Anda buat di Secret Kubernetes:
kubectl create secret tls webhook-tls --cert=tls.crt --key=tls.key -n signature-verificationDapatkan konten berenkode base64 dari
tls.cert. Hal ini diperlukan untuk konfigurasi webhook validasi yang Anda buat di bagian berikutnya:cat tls.crt | base64 -w 0.
Men-deploy webhook penerimaan
Anda dapat menggunakan contoh berikut untuk membuat deployment bagi server verifikasi tanda tangan dan konfigurasi webhook validasi.
Buat deployment untuk server verifikasi tanda tangan dengan menyimpan file berikut:
Ganti
SIGNATURE_VERIFICATION_SERVER_IMAGE_URLdengan URL lengkap gambar server verifikasi tanda tangan.Terapkan deployment ke cluster:
kubectl apply -f signature-verification-deployment.yaml -n signature-verificationBuat konfigurasi webhook validasi dengan menyimpan file berikut:
Ganti
CA_BUNDLEdengan konten berenkode base64 daritls.cert.Terapkan konfigurasi webhook validasi ke cluster:
kubectl apply -f signature-verification-validatingwebhookconfiguration.yaml
Memeriksa log untuk mengetahui error verifikasi gambar
Setelah Anda menyiapkan server verifikasi gambar, semua upaya sinkronisasi dari image OCI yang tidak ditandatangani akan gagal.
Untuk memeriksa error verifikasi tanda tangan, lihat log dari server verifikasi tanda tangan dengan menjalankan perintah berikut:
Periksa log
kubectl:kubectl logs deployment signature-verification-server -n signature-verificationError dari
kubectlterkait verifikasi tanda tangan menyerupai berikut ini:main.go:69: error during command execution: no signatures foundPeriksa log Config Sync:
nomos statusError dari Config Sync yang terkait dengan verifikasi tanda tangan akan terlihat seperti berikut:
Error: KNV2002: admission webhook "imageverification.webhook.com" denied the request: Image validation failed: cosign verification failed: exit status 10, output: Error: no signatures found
Jika tidak ada error, Anda dapat mengonfirmasi bahwa gambar bertanda tangan adalah objek yang disinkronkan dengan memeriksa konfigurasi RootSync atau RepoSync:
RootSync
kubectl get rootsync ROOTSYNC_NAME -n config-management-system -oyaml
Ganti ROOTSYNC_NAME dengan nama RootSync Anda.
RepoSync
kubectl get reposync REPOSYNC_NAME -n REPOSYNC_NAMESPACE -oyaml
Ganti kode berikut:
REPOSYNC_NAME: namaRepoSyncAnda.REPOSYNC_NAMESPACE: nama namespace yang terkait denganRepoSyncAnda.
Anda akan melihat anotasi configsync.gke.io/image-to-sync ditambahkan ke objek
RootSync atau RepoSync. Anotasi berisi URL image OCI sumber dan ringkasan terbaru yang diambil oleh Config Sync.
Langkah berikutnya
- Pelajari lebih lanjut cara menginstal Config Sync.
- Memecahkan masalah Config Sync.