Menggunakan registry image pribadi tanpa Secret

GKE di AWS menyediakan cara untuk mengambil image pribadi dari Artifact Registry atau Container Registry tanpa harus menggunakan Secret Kubernetes. Sebelumnya, Anda harus melakukan langkah-langkah berikut:

  1. Membuat akun layanan Identity and Access Management (IAM) Google.
  2. Memberi akun layanan izin untuk mengakses registry pribadi.
  3. Download kunci akun layanan dan simpan sebagai Secret Kubernetes di cluster Anda.
  4. Referensikan Secret ini dalam manifes YAML untuk Pod atau Deployment agar dapat mengakses image dari repositori container pribadi.
  5. Merotasi dan mengelola kunci yang terkait dengan akun layanan IAM Google secara teratur.

GKE di AWS meniadakan semua langkah manual ini, serta otomatis menangani autentikasi dan otorisasi yang diperlukan untuk mengambil image pribadi.

Sebelum memulai

Untuk melakukan langkah-langkah di halaman ini, pertama-tama selesaikan langkah-langkah berikut:

Periksa image di Artifact Registry

Untuk menyelesaikan langkah-langkah selanjutnya, Anda memerlukan image container. Dapatkan nama image container Anda dengan melakukan langkah-langkah berikut:

  1. Konfigurasikan alat command line Docker untuk melakukan autentikasi ke Artifact Registry dengan Google Cloud SDK:

    gcloud auth configure-docker
    

    Google Cloud CLI mendaftarkan helper kredensial untuk semua registry Docker yang didukung Google.

  2. Pastikan Artifact Registry menyertakan image dengan perintah docker images:

    docker images
    

    Docker terhubung ke Artifact Registry dan menampilkan image yang tersedia di repositori Anda. Misalnya, respons berikut menampilkan image container bernama hello-app dalam repositori PROJECT_NAME pada us-west1-docker.pkg.dev.

    REPOSITORY                                                            TAG          IMAGE ID       CREATED          SIZE
    us-west1-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app   v1           f7cfe0d58569   21 minutes ago   11.5MB
    

Jika Anda belum menyiapkan image container, buat dengan mengikuti langkah-langkah di bagian Men-deploy aplikasi dalam container.

Membuat Pod dengan image pribadi tanpa Secret pull image

Untuk membuat Pod yang dapat mengakses image container pribadi dari registry, Anda tidak perlu lagi menyediakan kolom spec.imagePullSecrets di spesifikasi Pod. Untuk menyiapkan Pod, lakukan langkah-langkah berikut:

  1. Buat definisi Pod tanpa kolom spec.imagePullSecrets:

    apiVersion: v1
    kind: Pod
    metadata:
      name: POD_NAME
    spec:
      containers:
      - name: CONTAINER_NAME
        image: LOCATION-docker.pkg.dev/PROJECT_NAME/REPOSITORY_NAME/IMAGE_NAME:IMAGE_VERSION
    

    Ganti kode berikut:

    • POD_NAME: nama Pod.
    • CONTAINER_NAME: nama container di dalam Pod.
    • LOCATION: region Google Cloud yang berisi registry Anda. Contoh, us-west1.
    • PROJECT_NAME: nama Project Google yang menghosting repositori Artifact Registry Anda, yang mungkin sama dengan project cluster Anda. Jika repositori berada di project yang berbeda, lihat Menggunakan Artifact Registry saat tidak berada dalam project yang sama dengan cluster Anda untuk mengetahui langkah-langkah tambahan.
    • REPOSITORY_NAME: nama repositori Anda.
    • IMAGE_NAME: nama image.
    • IMAGE_VERSION: versi image.
  2. Terapkan konfigurasi ke cluster Anda dengan kubectl:

    kubectl apply -f YAML_FILE_NAME
    

    Ganti YAML_FILE_NAME dengan nama file YAML Anda.

Contoh membuat Pod tanpa Secret pull image

Berikut ini contoh pembuatan Pod Kubernetes tanpa memerlukan Secret pull image. Pod mengambil image hello-app dari Artifact Registry.

  1. Untuk mengambil gambar hello-app, salin YAML berikut ke dalam file bernama hello-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: hello-pod
    spec:
      containers:
      - name: hello-container
        image: us-west1-docker.pkg.dev/example-project/hello-repo/hello-app:v1
    
  2. Terapkan konfigurasi ke cluster Anda dengan kubectl:

    kubectl apply -f hello-pod.yaml
    
  3. Pastikan Pod berjalan dengan kubectl get:

    kubectl get pod/hello-pod
    

    Respons menyertakan satu Pod dengan status Running.

    NAME        READY   STATUS    RESTARTS   AGE
    hello-pod   1/1     Running   0          15s
    

Membuat Deployment dengan image pribadi tanpa Secret pull image

Untuk membuat Deployment yang dapat mengakses image container pribadi dari registry, Anda tidak perlu lagi menyediakan kolom spec.imagePullSecrets dalam spesifikasi Deployment. Untuk menyiapkan Deployment, lakukan langkah-langkah berikut:

  1. Buat definisi Deployment tanpa kolom spec.imagePullSecrets:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: DEPLOYMENT_NAME
    spec:
      replicas: NUMBER_OF_REPLICAS
      template:
        spec:
          containers:
          - name: CONTAINER_NAME
            image: LOCATION-docker.pkg.dev/PROJECT_NAME/REPOSITORY_NAME/IMAGE_NAME:IMAGE_VERSION
    

    Ganti kode berikut:

    • DEPLOYMENT_NAME: nama Deployment Anda.
    • NUMBER_OF_REPLICAS: berapa banyak instance Pod yang ditentukan dalam Deployment yang harus berjalan pada waktu tertentu.
    • CONTAINER_NAME: nama container di dalam Pod.
    • LOCATION: region Google Cloud yang berisi registry Anda. Contoh, us-west1.
    • PROJECT_NAME: nama Project Google yang menghosting repositori Artifact Registry Anda, yang mungkin tidak sama dengan project cluster Anda. Jika repositori berada di project yang berbeda, lihat Menggunakan Artifact Registry saat tidak berada dalam project yang sama dengan cluster Anda untuk mengetahui langkah-langkah tambahan.
    • REPOSITORY_NAME: nama repositori Anda.
    • IMAGE_NAME: nama image.
    • IMAGE_VERSION: versi image.
  2. Terapkan konfigurasi ke cluster Anda dengan kubectl.

    kubectl apply -f name-of-your-yaml-file.yaml
    

Contoh membuat Deployment tanpa Secret pull image

Berikut contoh pembuatan Deployment tanpa Secret pull image. Deployment mengambil image hello-app dari Artifact Registry.

  1. Buat file bernama hello-deployment.yaml dengan konten berikut:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello-app-deployment
    spec:
      selector:
        matchLabels:
          app: products
          department: sales
      replicas: 3
      template:
        metadata:
          labels:
            app: products
            department: sales
        spec:
          containers:
          - name: hello
            image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1
            env:
            - name: "PORT"
              value: "50001"
    

    Ganti kode berikut:

  2. Terapkan konfigurasi ke cluster Anda dengan kubectl.

    kubectl apply -f hello-deployment.yaml
    
  3. Pastikan Deployment Anda berjalan dengan kubectl pods.

    kubectl get pods --selector=app=products
    

    Output-nya menampilkan tiga Pod Running.

    NAME                                    READY   STATUS    RESTARTS   AGE
    hello-app-deployment-67d9c6d98c-b69f2   1/1     Running   0          14m
    hello-app-deployment-67d9c6d98c-d6k5c   1/1     Running   0          14m
    hello-app-deployment-67d9c6d98c-p2md5   1/1     Running   0          14m
    

Gunakan Artifact Registry saat tidak berada dalam project yang sama dengan cluster Anda

Untuk menggunakan repositori Artifact Registry yang ada di Project Google yang berbeda dengan yang berisi cluster Anda, lakukan langkah-langkah berikut:

Beri akun layanan untuk instance virtual machine kumpulan node cluster Anda, yang dikenal sebagai Agen Layanan Mesin Kumpulan Node, izin yang diperlukan untuk mengakses registry ini.

gcloud projects add-iam-policy-binding AR_PROJECT_ID \
  --member=NODE_POOL_MACHINE_SERVICE_AGENT \
  --role=ROLE

Langkah ini memastikan cluster Anda dapat mengambil artefak dari registry dalam project terpisah tersebut.

Ganti kode berikut:

  • AR_PROJECT_ID: ID project Google yang menghosting Artifact Registry.
  • NODE_POOL_MACHINE_SERVICE_AGENT: akun layanan untuk Kumpulan Node cluster Anda, yang memiliki format berikut: service-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com
  • ROLE: peran roles/artifactregistry.reader atau peran khusus yang memberikan izin yang memadai untuk mengakses image di repositori Artifact Registry.

Menggunakan Google Container Registry pribadi

Untuk mengintegrasikan Google Container Registry pribadi dengan GKE Anda di cluster AWS, apa pun lokasi project Google-nya, ikuti langkah-langkah berikut:

Izinkan Agen Layanan Mesin Kumpulan Node, akun layanan untuk instance virtual machine kumpulan node cluster Anda, untuk mengakses Container Registry:

gcloud projects add-iam-policy-binding GCR_PROJECT_ID \
  --member=NODE_POOL_MACHINE_SERVICE_AGENT \
  --role=ROLE

Langkah ini akan mengaktifkan akses akun layanan cluster ke image container pribadi.

Ganti kode berikut:

  • GCR_PROJECT_ID: ID project yang menghosting Container Registry.
  • NODE_POOL_MACHINE_SERVICE_AGENT: akun layanan kumpulan node, dalam format service-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com.
  • ROLE: pilih storage.objectViewer atau peran khusus untuk akses Container Registry yang memadai. Hati-hati dengan akses yang luas dengan storage.objectViewer.

Pembersihan

Untuk menghapus resource yang Anda buat di halaman ini, jalankan perintah berikut:

kubectl apply -f POD_YAML_FILE
kubectl delete -f DEPLOYMENT_YAML_FILE

Ganti kode berikut:

  • POD_YAML_FILE: nama file YAML tempat Anda menentukan Pod.
  • DEPLOYMENT_YAML_FILE: nama file YAML yang Anda gunakan untuk menentukan Deployment.

Langkah selanjutnya