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:
- Membuat cluster.
- Buat node pool.
Bangun image Docker dan kirim ke Artifact Registry. Contoh di halaman ini menggunakan penampung
hello-app
. Untuk mem-build container ini, ikuti langkah-langkah untuk Membangun image container dan Mengirim image Docker ke Artifact Registry, yang merupakan bagian dari dokumentasi GKE di Google Cloud.
Periksa image di Artifact Registry
Untuk menyelesaikan langkah-langkah selanjutnya, Anda memerlukan image container. Dapatkan nama image container Anda dengan melakukan langkah-langkah berikut:
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.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 repositoriPROJECT_NAME
padaus-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:
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.
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 AndaACCOUNT_NAME
dengan nama akun layanan Google Cloud Anda
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:
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
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.
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 AndaCONTAINER_NAME
: nama container di dalam PodLOCATION
PROJECT_NAME
Misalnya, untuk menarik gambar
hello-app
, salin YAML berikut ke dalam file bernamahello-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
Terapkan konfigurasi ke cluster Anda dengan
kubectl
.kubectl apply -f hello-pod.yaml
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
Untuk menggunakan repositori pribadi dalam Deployment, tentukan
imagePullSecret
di dalam template.Misalnya, untuk mengonfigurasi Deployment yang menggunakan image
hello-app
, buat file bernamahello-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
Terapkan konfigurasi ke cluster Anda dengan
kubectl
.kubectl apply -f hello-deployment.yaml
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