Menggunakan registry image pribadi

Topik ini menjelaskan cara menggunakan GKE di AWS dengan repositori image container pribadi, seperti Container Registry (GCR).

Sebelum memulai

Sebelum mulai menggunakan GKE di AWS, pastikan Anda telah melakukan tugas berikut:

  • Instal layanan pengelolaan.
  • Buat cluster pengguna.
  • Dari direktori anthos-aws, gunakan anthos-gke untuk mengalihkan konteks ke cluster pengguna.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Ganti CLUSTER_NAME dengan nama cluster pengguna Anda.
  • Memiliki image Docker yang dibangun dan dikirim ke Container Registry. Contoh dalam topik ini menggunakan container hello-app, yang dibangun dengan langkah-langkah dari Men-deploy aplikasi dalam container dalam dokumentasi GKE di Google Cloud.

Registry Container Pribadi

Container registry menyimpan dan mendistribusikan image container. Penginstalan GKE di AWS Anda dapat mengakses image publik secara default.

Memeriksa image di Container 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 Container Registry dengan Google Cloud CLI:

    gcloud auth configure-docker
    

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

  2. Pastikan Container Registry Anda menyertakan image dengan docker images.

    docker images
    

    Docker terhubung ke Container Registry dan menampilkan image yang tersedia di repositori Container Registry Anda. Misalnya, respons di bawah ini menampilkan image container bernama hello-app di repositori project-id.

    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    gcr.io/project-id/hello-app   v1                  732f02cea7cb        12 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 pengguna Anda melakukan autentikasi menggunakan akun layanan Identity and Access Management (IAM).

Untuk membuat akun layanan baru, lakukan 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. Memberi akun layanan akses ke Container Registry.

    gcloud projects add-iam-policy-binding project-id \
      --member serviceAccount:account-name@project-id.iam.gserviceaccount.com \
      --role roles/storage.objectViewer
    

    Ganti kode berikut:

    • project-id 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 key.json \
      --iam-account account-name@project-id.iam.gserviceaccount.com
    

    Ganti kode berikut:

    • project-id dengan project Google Cloud Anda
    • account-name dengan nama akun layanan Google Cloud Anda

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

Menentukan Secret Kubernetes

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

  1. Gunakan kubectl untuk membuat rahasia.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl create secret docker-registry gcr-secret \
      --docker-server=gcr.io \
      --docker-username=_json_key \
      --docker-email=account-name@project-id.iam.gserviceaccount.com \
      --docker-password="$(cat key.json)"
    

    Ganti kode berikut:

    • project-id dengan project Google Cloud Anda
    • account-name dengan nama akun layanan Google Cloud Anda
  2. Hapus salinan lokal kunci akun layanan Anda.

    rm key.json
    

Sekarang Anda dapat merujuk rahasia ini dalam beban kerja Anda.

Membuat beban kerja dengan gambar pribadi

Untuk menggunakan image dari repositori container pribadi dengan beban kerja, Anda harus menetapkan 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: gcr.io/project-id/hello-app:v1
      imagePullSecrets:
      - name: secret-name
    

    Ganti kode berikut:

    • pod-name dengan nama Pod Anda
    • container-name dengan nama container di dalam Pod
    • project-id dengan project Google Cloud Anda
    • secret-name dengan nama rahasia registry Anda

    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: gcr.io/project-id/hello-app:v1
      imagePullSecrets:
      - name: gcr-secret
    
  2. Terapkan konfigurasi ke cluster Anda dengan kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-pod.yaml
    
  3. Pastikan pod berjalan dengan kubectl get.

    env HTTPS_PROXY=http://localhost:8118 \
      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

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

    Misalnya, untuk membuat Deployment, dari 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: "gcr.io/project-id/hello-app:v1"
            env:
            - name: "PORT"
              value: "50001"
          imagePullSecrets:
          - name: gcr-secret
    
  5. Terapkan konfigurasi ke cluster Anda dengan kubectl.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-deployment.yaml
    
  6. Pastikan Deployment Anda berjalan dengan kubectl pods.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods --selector=app=products
    

    Output berisi 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
    

Langkah selanjutnya