Menggunakan registry image pribadi tanpa Secret

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

  1. Buat akun layanan Google Identity and Access Management (IAM).
  2. Beri akun layanan izin untuk mengakses registry pribadi.
  3. Download kunci akun layanan dan simpan sebagai Secret Kubernetes di cluster Anda.
  4. Referensi Secret ini dalam manifes YAML untuk Pod atau Deployment sehingga dapat mengakses image dari repositori container pribadi.
  5. Rotasikan dan kelola kunci yang terkait dengan akun layanan Google IAM secara rutin.

GKE di AWS menghilangkan semua langkah manual ini, dan secara otomatis menangani autentikasi dan otorisasi yang diperlukan untuk menarik image pribadi.

Sebelum memulai

Untuk melakukan langkah-langkah di halaman ini, selesaikan terlebih dahulu langkah-langkah berikut:

Memeriksa image di Artifact Registry

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

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

    gcloud auth configure-docker
    

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

  2. Pastikan Artifact Registry Anda 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 di 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 image container dengan mengikuti langkah-langkah di Men-deploy aplikasi yang di-container.

Membuat Pod dengan image pribadi tanpa Secret penarikan image

Untuk membuat Pod yang dapat mengakses image container pribadi dari registry, Anda tidak perlu lagi memberikan kolom spec.imagePullSecrets dalam spesifikasi Pod Anda. 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: Google Cloud region yang berisi registri Anda. Misalnya, 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 di 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 pembuatan Pod tanpa Secret penarikan image

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

  1. Untuk menarik image 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. Konfirmasi bahwa Pod sedang berjalan dengan kubectl get:

    kubectl get pod/hello-pod
    

    Respons mencakup satu Pod dengan status Running.

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

Membuat Deployment dengan image pribadi tanpa Secret penarikan image

Untuk membuat Deployment yang dapat mengakses image container pribadi dari registry, Anda tidak perlu lagi memberikan 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: jumlah 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 registri Anda. Misalnya, 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 di 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 pembuatan Deployment tanpa Secret penarikan image

Berikut contoh pembuatan Deployment tanpa Secret penarikan 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 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
    

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

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

Beri akun layanan untuk instance mesin virtual node pool cluster Anda, yang dikenal sebagai Agen Layanan Mesin Node pool, 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 di project terpisah tersebut.

Ganti kode berikut:

  • AR_PROJECT_ID: ID project Google yang menghosting Artifact Registry.
  • NODE_POOL_MACHINE_SERVICE_AGENT: akun layanan untuk Node Pool 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 cluster GKE di AWS, terlepas dari lokasi project Google-nya, ikuti langkah-langkah berikut:

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

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

Langkah ini memungkinkan 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 node pool, dalam format service-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com.
  • ROLE: pilih storage.objectViewer atau peran kustom untuk akses Container Registry yang memadai. Berhati-hatilah dengan akses luas menggunakan 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 mendefinisikan Pod.
  • DEPLOYMENT_YAML_FILE: nama file YAML tempat Anda menentukan Deployment.

Langkah berikutnya