Menggunakan registry image pribadi

GKE di penginstalan AWS dapat mengakses image container publik secara default. Topik ini menjelaskan cara menggunakan GKE di AWS dengan repositori image container pribadi, seperti Artifact Registry.

Mulai versi 1.28, GKE di AWS menyediakan cara untuk mengambil image pribadi dari Artifact Registry atau Container Registry tanpa harus menggunakan Secret Kubernetes. Untuk mengetahui detailnya, lihat Menggunakan registry image pribadi tanpa Secret.

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
    

    Alat command line gcloud 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 di bawah menunjukkan 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 dengan mengikuti langkah-langkah dalam artikel Men-deploy aplikasi dalam container.

Membuat Akun Layanan

Cluster Anda melakukan autentikasi menggunakan akun layanan Identity and Access Management (IAM).

Untuk membuat akun layanan baru, ikuti langkah-langkah berikut:

  1. Membuat akun layanan IAM dengan Google Cloud CLI.

    gcloud iam service-accounts create ACCOUNT_NAME
    

    Ganti ACCOUNT_NAME dengan nama akun layanan Google Cloud yang baru.

  2. Berikan izin Artifact Registry ke akun layanan.

    gcloud projects add-iam-policy-binding PROJECT_NAME \
      --member serviceAccount:ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \
      --role roles/artifactregistry.reader
    

    Ganti kode berikut:

    • PROJECT_NAME dengan project Google Cloud Anda
    • ACCOUNT_NAME dengan nama akun layanan Google Cloud Anda
  3. Download kunci akun layanan akun tersebut.

    gcloud iam service-accounts keys create registry-access-key.json \
      --iam-account ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
    

    Ganti kode berikut:

    • PROJECT_NAME
    • ACCOUNT_NAME

Sekarang Anda siap mengonfigurasi cluster pengguna untuk terhubung ke Artifact Registry.

Simpan kunci ke cluster Anda

Untuk memberikan kunci yang akan digunakan untuk mengautentikasi ke Artifact Registry, simpan kunci akun layanan sebagai Secret Kubernetes dengan langkah-langkah berikut:

  1. Gunakan kubectl untuk membuat Secret.

      kubectl create secret docker-registry registry-secret \
      --docker-server=LOCATION-docker.pkg.dev \
      --docker-username=_json_key \
      --docker-email=ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \
      --docker-password="$(cat registry-access-key.json)"
    

    Ganti kode berikut:

    • LOCATION: lokasi regional atau multi-regional repositori.
    • PROJECT_NAME
    • ACCOUNT_NAME
  2. Hapus salinan lokal kunci akun layanan Anda.

    rm registry-access-key.json
    

Sekarang Anda dapat merujuk Secret ini dalam workload Anda.

Membuat beban kerja dengan gambar pribadi

Untuk menggunakan image dari repositori container pribadi dengan beban kerja, tetapkan kolom spec.imagePullSecrets ke nama Secret Anda. Kolom ini berada di lokasi yang berbeda untuk Pods dan Deployment.

Membuat Pod

Untuk membuat Pod yang dapat mengakses container registry, tetapkan kolom spec.imagePullSecrets ke nama Secret Anda.

  1. Membuat Pod yang menentukan spec.imagePullSecrets.

    apiVersion: v1
    kind: Pod
    metadata:
      name: POD_NAME
    spec:
      containers:
      - name: CONTAINER_NAME
        image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1
      imagePullSecrets:
      - name: registry-secret
    

    Ganti kode berikut:

    • POD_NAME: nama Pod Anda
    • CONTAINER_NAME: nama container di dalam Pod
    • LOCATION
    • PROJECT_NAME

    Misalnya, untuk menarik 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
      imagePullSecrets:
      - name: registry-secret
    
  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

  1. Untuk menggunakan repositori pribadi dalam Deployment, tentukan imagePullSecret di dalam template.

    Misalnya, untuk mengonfigurasi Deployment yang menggunakan image hello-app, 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"
          imagePullSecrets:
          - name: registry-secret
    

    Ganti kode berikut:

    • LOCATION
    • PROJECT_NAME
  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
    

Pembersihan

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

kubectl apply -f hello-pod.yaml
kubectl delete -f hello-deployment.yaml

Langkah selanjutnya