Mengonfigurasi perutean DNS ke IP virtual (VIP) terbatas memungkinkan cluster pribadi Google Kubernetes Engine mengakses repositori Artifact Registry di dalam perimeter layanan Kontrol Layanan VPC.
Karena node cluster pribadi diisolasi dari internet dan domain registry di-resolve ke alamat IP publik secara default, Anda harus merutekan permintaan untuk domainpkg.dev dan gcr.io melalui VIP yang dibatasi.
Ringkasan
Cluster pribadi Anda harus selalu mengakses Artifact Registry atau Container Registry dengan VIP yang dibatasi untuk mencegah pemindahan data yang tidak sah dari layanan yang didukung ke layanan yang tidak didukung.Konfigurasikan akses terbatas untuk cluster pribadi GKE jika semua hal berikut terpenuhi:
- Anda menggunakan cluster pribadi GKE.
- Anda belum mengonfigurasi pemilihan rute domain registry
pkg.devataugcr.iokerestricted.googleapis.com.
Sebelum memulai
Sebelum membuat perimeter layanan, siapkan cluster pribadi baru atau identifikasi cluster pribadi yang ada yang ingin Anda lindungi.
Selain itu, Anda harus mengizinkan egress ke 199.36.153.4/30 di port 443. Biasanya, jaringan VPC memiliki aturan tersirat yang mengizinkan semua traffic egress ke tujuan mana pun. Namun, jika Anda memiliki aturan yang menolak traffic tersebut, Anda harus membuat aturan firewall egress untuk mengizinkan traffic TCP di port 443 ke 199.36.153.4/30.
Mengonfigurasi DNS
Konfigurasi server DNS Anda agar permintaan ke alamat registry di-resolve ke restricted.googleapis.com, VIP yang dibatasi. Anda dapat melakukannya menggunakan zona DNS pribadi Cloud DNS.
Buat zona pribadi terkelola.
gcloud dns managed-zones create ZONE_NAME \ --visibility=private \ --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK \ --description=DESCRIPTION \ --dns-name=REGISTRY_DOMAIN \ --project=PROJECT_IDDengan:
ZONE_NAMEadalah nama untuk zona yang Anda buat. Contoh,registry. Nama ini akan digunakan di setiap langkah berikut.PROJECT_IDadalah ID project yang menghosting cluster pribadi GKE Anda.NETWORKadalah daftar opsional nama jaringan cluster yang ingin Anda alihkan permintaannya.DESCRIPTIONadalah deskripsi zona terkelola yang dapat dibaca manusia.REGISTRY_DOMAINadalah domain untuk registry Anda:pkg.devuntuk Artifact Registrygcr.iountuk Container Registry atau repositorigcr.ioyang dihosting di Artifact Registry
Mulai transaksi.
gcloud dns record-sets transaction start \ --zone=ZONE_NAME \ --project=PROJECT_IDDengan:
ZONE_NAME adalah nama zona yang Anda buat di langkah pertama.
PROJECT_ID adalah ID project yang menghosting cluster pribadi GKE Anda.
Tambahkan data CNAME untuk registry Anda.
gcloud dns record-sets transaction add \ --name=*.REGISTRY_DOMAIN. \ --type=CNAME REGISTRY_DOMAIN. \ --zone=ZONE_NAME \ --ttl=300 \ --project=PROJECT_IDDengan:
ZONE_NAMEadalah nama zona yang Anda buat di langkah pertama.PROJECT_IDadalah ID project yang menghosting cluster pribadi GKE Anda.REGISTRY_DOMAINadalah domain untuk registry Anda:pkg.devuntuk Artifact Registrygcr.iountuk Container Registry atau repositorigcr.ioyang dihosting di Artifact Registry
Tambahkan data A untuk VIP yang dibatasi.
gcloud dns record-sets transaction add \ --name=REGISTRY_DOMAIN. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=ZONE_NAME \ --ttl=300 \ --project=PROJECT_IDDengan:
ZONE_NAMEadalah nama zona yang Anda buat di langkah pertama.PROJECT_IDadalah ID project yang menghosting cluster pribadi GKE Anda.REGISTRY_DOMAINadalah domain untuk registry Anda:pkg.devuntuk Artifact Registrygcr.iountuk Container Registry atau repositorigcr.ioyang dihosting di Artifact Registry
Jalankan transaksi.
gcloud dns record-sets transaction execute \ --zone=ZONE_NAME \ --project=PROJECT_IDDengan:
ZONE_NAME adalah nama zona yang Anda buat di langkah pertama.
PROJECT_ID adalah ID project yang menghosting cluster pribadi GKE Anda.
Setelah mengonfigurasi pemilihan rute DNS, pastikan GKE, registry, dan layanan lain yang diperlukan berada di dalam perimeter layanan Kontrol Layanan VPC Anda. Untuk mengonfigurasi perimeter layanan Anda, lihat bagian berikut.
Mengonfigurasi perimeter layanan
Setelah mengonfigurasi data DNS, lakukan hal berikut:
- Buat perimeter layanan baru atau perbarui perimeter yang ada.
- Tambahkan layanan Container Registry atau Artifact Registry ke daftar layanan yang ingin Anda lindungi menggunakan perimeter layanan.
- Tambahkan layanan yang didukung lainnya yang Anda gunakan dengan registry ke perimeter layanan, seperti Cloud Build, Artifact Analysis, dan Otorisasi Biner.
- Jika Anda perlu mengakses Container Registry, Anda juga harus menambahkan Cloud Storage ke perimeter layanan.
Memastikan perimeter berfungsi
Setelah mengonfigurasi perimeter layanan, node Anda di cluster pribadi GKE dapat mengakses image container di Artifact Registry dan Container Registry jika image tersebut disimpan dalam project yang berada di perimeter layanan Anda.Image container dalam project di luar perimeter tetap tidak dapat diakses, kecuali untuk beberapa repositori publik hanya baca tertentu.
Misalnya, jika project google-samples tidak ada dalam perimeter layanan Anda,
menjalankan perintah untuk membuat deployment dari container hello-app
akan gagal:
Domain pkg.dev
kubectl create deployment hello-server --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
Domain gcr.io
kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0
Periksa status pod dengan perintah:
kubectl get pods
Perintah ini menampilkan tabel yang mirip dengan contoh berikut. Status pod ErrImagePull menunjukkan bahwa pull gagal.
NAME READY STATUS RESTARTS AGE
hello-server-dbd86c8c4-h5wsf 1/1 ErrImagePull 0 45s
Anda dapat menggunakan perintah kubectl describe pod untuk melihat detail selengkapnya tentang deployment. Untuk pod dalam contoh sebelumnya, perintahnya adalah:
kubectl describe pod hello-server-dbd86c8c4-h5wsf