Menggunakan registry image pribadi

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

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
    

    Alat command line gcloud mendaftarkan helper 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 di bawah menampilkan image container bernama hello-app di repositori PROJECT_NAME di 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-containerkan.

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. Buat akun layanan IAM dengan Google Cloud CLI.

    gcloud iam service-accounts create ACCOUNT_NAME
    

    Ganti ACCOUNT_NAME dengan nama akun layanan Google Cloud baru.

  2. Berikan izin Artifact Registry untuk 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 Google Cloud nama akun layanan Anda
  3. Download kunci akun layanan akun.

    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 guna melakukan autentikasi 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
    

Anda kini dapat mereferensikan Secret ini dalam beban kerja Anda.

Membuat workload dengan image pribadi

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

Membuat Pod

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

  1. Buat 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 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
      imagePullSecrets:
      - name: registry-secret
    
  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

  1. Untuk menggunakan repositori pribadi dalam Deployment, Anda menentukan 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 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 berikutnya