GKE di AWS menyediakan cara untuk menarik image pribadi dari Artifact Registry atau Container Registry tanpa harus menggunakan Secret Kubernetes. Sebelumnya, Anda harus melakukan langkah-langkah berikut:
- Buat akun layanan Google Identity and Access Management (IAM).
- Beri akun layanan izin untuk mengakses registry pribadi.
- Download kunci akun layanan dan simpan sebagai Secret Kubernetes di cluster Anda.
- Referensi Secret ini dalam manifes YAML untuk Pod atau Deployment sehingga dapat mengakses image dari repositori container pribadi.
- Rotasikan dan kelola kunci yang terkait dengan akun layanan Google IAM secara rutin.
GKE di AWS menghilangkan semua langkah manual ini, dan secara otomatis menangani autentikasi dan otorisasi yang diperlukan untuk menarik image pribadi.
Sebelum memulai
Untuk melakukan langkah-langkah di halaman ini, selesaikan terlebih dahulu langkah-langkah berikut:
- Membuat cluster.
- Buat node pool.
Bangun image Docker dan kirimkan ke Artifact Registry. Contoh di halaman ini menggunakan container
hello-app
. Untuk membangun 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 .Lakukan upgrade ke GKE di AWS versi 1.28 agar Anda dapat menarik image pribadi dari Artifact Registry atau Container Registry tanpa harus menggunakan Secret Kubernetes.
Memeriksa image di Artifact Registry
Untuk menyelesaikan langkah-langkah lainnya, Anda memerlukan image penampung. Dapatkan nama image container Anda dengan melakukan langkah-langkah berikut:
Konfigurasi alat command line Docker untuk melakukan autentikasi ke Artifact Registry dengan Google Cloud SDK:
gcloud auth configure-docker
Google Cloud CLI mendaftarkan pembantu kredensial untuk semua registry Docker yang didukung Google.
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 berikut menampilkan 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 image container dengan mengikuti langkah-langkah di Men-deploy aplikasi yang di-container.
Membuat Pod dengan image pribadi tanpa Secret penarikan image
Untuk membuat Pod yang dapat mengakses image container pribadi dari registry, Anda
tidak perlu lagi memberikan kolom spec.imagePullSecrets
dalam spesifikasi
Pod Anda. 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
: Google Cloud region yang berisi registri Anda. Misalnya,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 di 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 pembuatan Pod tanpa Secret penarikan image
Berikut contoh pembuatan Pod Kubernetes tanpa memerlukan Secret penarikan image. Pod mengambil image hello-app
dari
Artifact Registry.
Untuk menarik image
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
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 dengan image pribadi tanpa Secret penarikan image
Untuk membuat
Deployment
yang dapat mengakses image container pribadi dari registry, Anda tidak perlu lagi
memberikan 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
: jumlah 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 registri Anda. Misalnya,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 di 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 pembuatan Deployment tanpa Secret penarikan image
Berikut contoh pembuatan Deployment tanpa Secret penarikan 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
: Google Cloud region yang berisi registri Anda. Misalnya,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 di 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 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
Menggunakan Artifact Registry saat tidak berada dalam project yang sama dengan cluster Anda
Untuk menggunakan repositori Artifact Registry yang berada di Project Google yang berbeda dengan project yang berisi cluster Anda, lakukan langkah-langkah berikut:
Beri akun layanan untuk instance mesin virtual node pool cluster Anda, yang dikenal sebagai Agen Layanan Mesin Node pool, 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 di project terpisah tersebut.
Ganti kode berikut:
AR_PROJECT_ID
: ID project Google yang menghosting Artifact Registry.NODE_POOL_MACHINE_SERVICE_AGENT
: akun layanan untuk Node Pool 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 cluster GKE di AWS, terlepas dari lokasi project Google-nya, ikuti langkah-langkah berikut:
Izinkan Agen Layanan Mesin Node Pool, akun layanan untuk instance virtual machine node pool cluster Anda, mengakses Container Registry:
gcloud projects add-iam-policy-binding GCR_PROJECT_ID \
--member=NODE_POOL_MACHINE_SERVICE_AGENT \
--role=ROLE
Langkah ini memungkinkan 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 node pool, dalam formatservice-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com
.ROLE
: pilihstorage.objectViewer
atau peran kustom untuk akses Container Registry yang memadai. Berhati-hatilah dengan akses luas menggunakanstorage.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 mendefinisikan Pod.DEPLOYMENT_YAML_FILE
: nama file YAML tempat Anda menentukan Deployment.