Menyinkronkan artefak OCI dari Artifact Registry

Halaman ini menunjukkan cara menyinkronkan artefak OCI dari Artifact Registry.

Anda bisa mengonfigurasi Config Sync yang akan disinkronkan dari OCI dengan menggunakan Artifact Registry. Untuk menggunakan fitur ini, Anda harus mengaktifkan tindakan API RootSync dan RepoSync.

Karena Artifact Registry adalah layanan terkelola sepenuhnya dengan dukungan untuk pada image container dan artefak non-container, sebaiknya gunakan untuk penyimpanan dan pengelolaan image container Anda di Google Cloud. Ada yang tersedia untuk mengirim artefak ke Artifact Registry. Misalnya, Anda dapat push image Docker, push chart Helm, atau gunakan tindakan library go-containerregistry agar dapat digunakan dengan registry container. Pilih alat yang paling sesuai untuk Anda. Halaman ini menunjukkan cara membuat dan memublikasikan gambar ke repositori di Artifact Registry dengan crane dan oras.

Membuat repositori Artifact Registry

Di bagian ini, Anda akan membuat repositori Artifact Registry. Untuk mempelajari lebih lanjut tentang membuat repositori Artifact Registry, lihat Membuat repositori.

  1. Aktifkan Artifact Registry API:

    gcloud services enable artifactregistry.googleapis.com --project=PROJECT_ID
    
  2. Buat repositori Artifact Registry:

    gcloud artifacts repositories create AR_REPO_NAME \
       --repository-format=docker \
       --location=AR_REGION \
       --description="Config Sync Helm repo" \
       --project=PROJECT_ID
    

Ganti kode berikut:

  • PROJECT_ID: project ID organisasi.
  • AR_REPO_NAME: ID repositori.
  • AR_REGION: regional atau multi-regional lokasi repositori.

Variabel yang digunakan di bagian berikut:

  • FLEET_HOST_PROJECT_ID: jika Anda menggunakan GKE Workload Identity Federation untuk GKE, sama seperti PROJECT_ID. Jika Anda menggunakan fleet Workload Identity Federation for GKE, ini adalah project ID fleet yang cluster terdaftar.
  • GSA_NAME: nama akun layanan Google kustom yang ingin Anda gunakan untuk terhubung ke Artifact Registry.
  • KSA_NAME: akun layanan Kubernetes untuk rekonsiliasi.
    • Untuk repositori root, jika nama RootSync adalah root-sync, tambahkan root-reconciler. Atau, tambahkan root-reconciler-ROOT_SYNC_NAME.
    • Untuk repositori namespace, jika nama RepoSync adalah repo-sync, tambahkan ns-reconciler-NAMESPACE. Atau, tambahkan ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH dengan REPO_SYNC_NAME_LENGTH adalah jumlah karakter dalam REPO_SYNC_NAME.

Berikan izin pembaca

Jika versi Config Sync adalah 1.17.2 atau yang lebih baru pada cluster, Anda dapat menggunakan akun layanan Kubernetes untuk melakukan autentikasi ke Artifact Registry. Jika tidak, menggunakan akun layanan Google untuk otentikasi.

Menggunakan akun layanan Kubernetes

Berikan Pembaca Artifact Registry (roles/artifactregistry.reader) Peran IAM ke akun layanan Kubernetes dengan Workload Identity Federation untuk kumpulan GKE:

gcloud artifacts repositories add-iam-policy-binding AR_REPO_NAME \
   --location=AR_REGION \
   --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
   --role=roles/artifactregistry.reader \
   --project=PROJECT_ID

Menggunakan akun layanan Google

  1. Berikan Pembaca Artifact Registry (roles/artifactregistry.reader) Peran IAM ke akun layanan Google:

    gcloud artifacts repositories add-iam-policy-binding AR_REPO_NAME \
       --location=AR_REGION \
       --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
       --role=roles/artifactregistry.reader \
       --project=PROJECT_ID
    
  2. Membuat binding kebijakan IAM antara layanan Kubernetes dan akun layanan Google:

    gcloud iam service-accounts add-iam-policy-binding \
       --role roles/iam.workloadIdentityUser \
       --member "serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
       GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
       --project=PROJECT_ID
    

Mengirim image ke repositori Artifact Registry

Di bagian ini, Anda akan membuat image OCI dan mengirimnya ke Artifact Registry.

  1. Buat file manifes Namespace:

    cat <<EOF> test-namespace.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      name: test
    EOF
    
  2. Login ke Artifact Registry:

    gcloud auth configure-docker AR_REGION-docker.pkg.dev
    
  3. Kemas dan kirim image ke Artifact Registry:

    crane

    Perintah di bagian ini menggunakan crane untuk berinteraksi dengan gambar jarak jauh dan registry.

    1. Kemas file:

      tar -cf test-namespace.tar test-namespace.yaml
      
    2. Instal crane menyediakan alat command line gcloud.

    3. 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
      

    oras

    Perintah di bagian ini menggunakan oras untuk berinteraksi dengan gambar jarak jauh dan registry.

    1. Kemas file:

      tar -czf test-namespace.tar.gz test-namespace.yaml
      
    2. Instal oras menyediakan alat command line gcloud.

    3. Mengirim image ke Artifact Registry:

      oras push AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 test-namespace.tar.gz
      

Mengonfigurasikan Sinkronisasi Konfigurasi untuk menyinkronkan dari gambar Anda

Di bagian ini, Anda akan membuat objek RootSync dan mengonfigurasi Config Sync untuk melakukan sinkronisasi dari image OCI.

  1. Buat objek RootSync dengan 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: .
        # The k8sserviceaccount auth type is available in version 1.17.2 and
        # later. Use `gcpserviceaccount` if using an older version.
        # auth: gcpserviceaccount
        # gcpServiceAccountEmail: GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
        auth: k8sserviceaccount
    EOF
    

    Ganti ROOT_SYNC_NAME dengan nama objek RootSync Anda. Nama harus unik di cluster dan tidak lebih dari 26 karakter. Untuk daftar lengkap opsi saat mengonfigurasi objek RootSync, lihat Kolom RootSync dan RepoSync.

  2. Terapkan objek RootSync:

    kubectl apply -f ROOT_SYNC_NAME.yaml
    
  3. Pastikan bahwa Config Sync disinkronkan dari image:

    nomos status --contexts=$(kubectl config current-context)
    

    Anda akan melihat output yang mirip dengan contoh berikut:

    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   05e6a6b
    

    Anda berhasil menyinkronkan gambar ke cluster.

Langkah selanjutnya