Menggunakan registry image pribadi

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

Sebelum memulai

Sebelum Anda 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 beralih konteks ke cluster pengguna Anda.
    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.
  • Membangun dan mengirim image Docker ke Container Registry. Contoh dalam topik ini menggunakan container hello-app, yang dibangun dengan langkah-langkah dari Men-deploy aplikasi dalam container di dokumentasi GKE on Google Cloud .

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

    gcloud auth configure-docker
    

    Google Cloud CLI mendaftarkan pembantu 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 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 image container dengan mengikuti langkah-langkah di Men-deploy aplikasi yang di-containerkan.

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. 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 akses akun layanan 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 Google Cloud nama akun layanan Anda
  3. Download kunci akun layanan akun.

    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 Google Cloud nama akun layanan Anda

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

Tentukan Secret Kubernetes

Untuk memberikan kunci guna melakukan autentikasi ke Container Registry, simpan kunci akun layanan sebagai Secret Kubernetes dengan melakukan langkah-langkah berikut:

  1. Gunakan kubectl untuk membuat secret.

    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 Google Cloud nama akun layanan Anda
  2. Hapus salinan lokal kunci akun layanan Anda.

    rm key.json
    

Anda kini dapat mereferensikan secret ini di workload Anda.

Membuat workload dengan image pribadi

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

Membuat Pod

Untuk membuat Pod yang dapat mengakses container registry, 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: 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 secret registri Anda

    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: 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. Konfirmasi bahwa pod sedang berjalan dengan kubectl get.

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

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

    Misalnya, untuk membuat Deployment, 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-nya 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 berikutnya