GKE di AWS menyediakan cara untuk mengambil image pribadi dari Artifact Registry atau Container Registry tanpa harus menggunakan Secret Kubernetes. Sebelumnya, Anda harus melakukan langkah-langkah berikut:
- Membuat akun layanan Identity and Access Management (IAM) Google.
- Memberi akun layanan izin untuk mengakses registry pribadi.
- Download kunci akun layanan dan simpan sebagai Secret Kubernetes di cluster Anda.
- Referensikan Secret ini dalam manifes YAML untuk Pod atau Deployment agar dapat mengakses image dari repositori container pribadi.
- Merotasi dan mengelola kunci yang terkait dengan akun layanan IAM Google secara teratur.
GKE di AWS meniadakan semua langkah manual ini, serta otomatis menangani autentikasi dan otorisasi yang diperlukan untuk mengambil image pribadi.
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.Upgrade ke GKE versi 1.28 di AWS sehingga Anda dapat mengambil image pribadi dari Artifact Registry atau Container Registry tanpa harus menggunakan Secret Kubernetes.
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
Google Cloud CLI 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 berikut menampilkan image container bernama
hello-app
dalam 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 di bagian Men-deploy aplikasi dalam container.
Membuat Pod dengan image pribadi tanpa Secret pull image
Untuk membuat Pod yang dapat mengakses image container pribadi dari registry, Anda tidak perlu lagi menyediakan kolom spec.imagePullSecrets
di spesifikasi Pod. Untuk menyiapkan Pod, lakukan langkah-langkah berikut:
Buat definisi Pod tanpa kolom
spec.imagePullSecrets
:apiVersion: v1 kind: Pod metadata: name: POD_NAME spec: containers: - name: CONTAINER_NAME image: LOCATION-docker.pkg.dev/PROJECT_NAME/REPOSITORY_NAME/IMAGE_NAME:IMAGE_VERSION
Ganti kode berikut:
POD_NAME
: nama Pod.CONTAINER_NAME
: nama container di dalam Pod.LOCATION
: region Google Cloud yang berisi registry Anda. Contoh,us-west1
.PROJECT_NAME
: nama Project Google yang menghosting repositori Artifact Registry Anda, yang mungkin sama dengan project cluster Anda. Jika repositori berada di project yang berbeda, lihat Menggunakan Artifact Registry saat tidak berada dalam project yang sama dengan cluster Anda untuk mengetahui langkah-langkah tambahan.REPOSITORY_NAME
: nama repositori Anda.IMAGE_NAME
: nama image.IMAGE_VERSION
: versi image.
Terapkan konfigurasi ke cluster Anda dengan
kubectl
:kubectl apply -f YAML_FILE_NAME
Ganti
YAML_FILE_NAME
dengan nama file YAML Anda.
Contoh membuat Pod tanpa Secret pull image
Berikut ini contoh pembuatan Pod Kubernetes tanpa memerlukan Secret pull image. Pod mengambil image hello-app
dari
Artifact Registry.
Untuk mengambil 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
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 dengan image pribadi tanpa Secret pull image
Untuk membuat Deployment yang dapat mengakses image container pribadi dari registry, Anda tidak perlu lagi menyediakan kolom spec.imagePullSecrets
dalam spesifikasi Deployment.
Untuk menyiapkan Deployment, lakukan langkah-langkah berikut:
Buat definisi Deployment tanpa kolom
spec.imagePullSecrets
:apiVersion: apps/v1 kind: Deployment metadata: name: DEPLOYMENT_NAME spec: replicas: NUMBER_OF_REPLICAS template: spec: containers: - name: CONTAINER_NAME image: LOCATION-docker.pkg.dev/PROJECT_NAME/REPOSITORY_NAME/IMAGE_NAME:IMAGE_VERSION
Ganti kode berikut:
DEPLOYMENT_NAME
: nama Deployment Anda.NUMBER_OF_REPLICAS
: berapa banyak instance Pod yang ditentukan dalam Deployment yang harus berjalan pada waktu tertentu.CONTAINER_NAME
: nama container di dalam Pod.LOCATION
: region Google Cloud yang berisi registry Anda. Contoh,us-west1
.PROJECT_NAME
: nama Project Google yang menghosting repositori Artifact Registry Anda, yang mungkin tidak sama dengan project cluster Anda. Jika repositori berada di project yang berbeda, lihat Menggunakan Artifact Registry saat tidak berada dalam project yang sama dengan cluster Anda untuk mengetahui langkah-langkah tambahan.REPOSITORY_NAME
: nama repositori Anda.IMAGE_NAME
: nama image.IMAGE_VERSION
: versi image.
Terapkan konfigurasi ke cluster Anda dengan
kubectl
.kubectl apply -f name-of-your-yaml-file.yaml
Contoh membuat Deployment tanpa Secret pull image
Berikut contoh pembuatan Deployment tanpa Secret pull image. Deployment mengambil image hello-app
dari Artifact Registry.
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"
Ganti kode berikut:
LOCATION
: region Google Cloud yang berisi registry Anda. Contoh,us-west1
.PROJECT_NAME
: nama Project Google yang menghosting repositori Artifact Registry Anda, yang mungkin tidak sama dengan project cluster Anda. Jika repositori berada dalam project yang berbeda, lihat Menggunakan Artifact Registry saat tidak berada dalam project yang sama dengan cluster Anda untuk mengetahui langkah-langkah tambahan.
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
Gunakan Artifact Registry saat tidak berada dalam project yang sama dengan cluster Anda
Untuk menggunakan repositori Artifact Registry yang ada di Project Google yang berbeda dengan yang berisi cluster Anda, lakukan langkah-langkah berikut:
Beri akun layanan untuk instance virtual machine kumpulan node cluster Anda, yang dikenal sebagai Agen Layanan Mesin Kumpulan Node, izin yang diperlukan untuk mengakses registry ini.
gcloud projects add-iam-policy-binding AR_PROJECT_ID \
--member=NODE_POOL_MACHINE_SERVICE_AGENT \
--role=ROLE
Langkah ini memastikan cluster Anda dapat mengambil artefak dari registry dalam project terpisah tersebut.
Ganti kode berikut:
AR_PROJECT_ID
: ID project Google yang menghosting Artifact Registry.NODE_POOL_MACHINE_SERVICE_AGENT
: akun layanan untuk Kumpulan Node cluster Anda, yang memiliki format berikut:service-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com
ROLE
: peranroles/artifactregistry.reader
atau peran khusus yang memberikan izin yang memadai untuk mengakses image di repositori Artifact Registry.
Menggunakan Google Container Registry pribadi
Untuk mengintegrasikan Google Container Registry pribadi dengan GKE Anda di cluster AWS, apa pun lokasi project Google-nya, ikuti langkah-langkah berikut:
Izinkan Agen Layanan Mesin Kumpulan Node, akun layanan untuk instance virtual machine kumpulan node cluster Anda, untuk mengakses Container Registry:
gcloud projects add-iam-policy-binding GCR_PROJECT_ID \
--member=NODE_POOL_MACHINE_SERVICE_AGENT \
--role=ROLE
Langkah ini akan mengaktifkan akses akun layanan cluster ke image container pribadi.
Ganti kode berikut:
GCR_PROJECT_ID
: ID project yang menghosting Container Registry.NODE_POOL_MACHINE_SERVICE_AGENT
: akun layanan kumpulan node, dalam formatservice-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com
.ROLE
: pilihstorage.objectViewer
atau peran khusus untuk akses Container Registry yang memadai. Hati-hati terhadap akses yang luas denganstorage.objectViewer
.
Pembersihan
Untuk menghapus resource yang Anda buat di halaman ini, jalankan perintah berikut:
kubectl apply -f POD_YAML_FILE
kubectl delete -f DEPLOYMENT_YAML_FILE
Ganti kode berikut:
POD_YAML_FILE
: nama file YAML tempat Anda menentukan Pod.DEPLOYMENT_YAML_FILE
: nama file YAML yang Anda gunakan untuk menentukan Deployment.