Tutorial ini menunjukkan cara membuat endpoint HTTP pribadi di cluster Google Kubernetes Engine (GKE) pribadi yang menerima peristiwa pesan Pub/Sub menggunakan Eventarc. Untuk mempelajari lebih lanjut tujuan peristiwa ini, lihat artikel Merutekan peristiwa ke endpoint HTTP internal dalam jaringan VPC.
Cluster GKE pribadi adalah jenis cluster native Virtual Private Cloud (VPC) yang node-nya hanya memiliki alamat IP internal, yang berarti node dan Pod diisolasi dari internet secara default. Anda dapat memilih untuk tidak memiliki akses klien, akses terbatas, atau akses tidak terbatas ke bidang kontrol. Anda tidak dapat mengonversi cluster non-pribadi yang ada menjadi cluster pribadi. Untuk mengetahui informasi selengkapnya, lihat Tentang cluster pribadi.
Anda dapat menjalankan perintah berikut menggunakan Google Cloud CLI di terminal atau Cloud Shell.
Tujuan
Dalam tutorial ini, Anda akan:
- Buat subnet khusus proxy di jaringan VPC default, dan buat aturan firewall VPC.
- Buat cluster GKE Autopilot pribadi tanpa akses klien ke endpoint publik.
- Buat instance virtual machine (VM) Compute Engine di subnet yang ditentukan dari jaringan VPC.
- Buat koneksi SSH ke instance VM dan deploy layanan penerima peristiwa di instance VM.
- Deploy Gateway di cluster Anda dan manifes
HTTPRouteuntuk mengonfigurasi perutean traffic di Kubernetes ke backend aplikasi. - Buat lampiran jaringan yang memungkinkan jaringan VPC produsen memulai koneksi ke jaringan VPC konsumen.
- Buat pemicu Eventarc yang merutekan peristiwa Pub/Sub ke penerima peristiwa di instance VM Anda.
- Publikasikan pesan ke topik Pub/Sub untuk membuat peristiwa, dan lihat isi peristiwa di log Pod aplikasi.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager, Compute Engine, Eventarc, GKE, and Pub/Sub APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable compute.googleapis.com
container.googleapis.com cloudresourcemanager.googleapis.com eventarc.googleapis.com pubsub.googleapis.com -
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager, Compute Engine, Eventarc, GKE, and Pub/Sub APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable compute.googleapis.com
container.googleapis.com cloudresourcemanager.googleapis.com eventarc.googleapis.com pubsub.googleapis.com - Update komponen Google Cloud CLI:
gcloud components update
- Login menggunakan akun Anda:
gcloud auth login
-
Jika Anda adalah project creator, Anda diberi peran Pemilik dasar (
roles/owner). Secara default, peran Identity and Access Management (IAM) ini mencakup izin yang diperlukan untuk akses penuh ke sebagian besar resource Google Cloud dan Anda dapat melewati langkah ini.Jika Anda bukan project creator, izin yang diperlukan harus diberikan pada project kepada akun utama yang sesuai. Misalnya, akun utama dapat berupa Akun Google (untuk pengguna akhir) atau akun layanan (untuk aplikasi dan workload komputasi). Untuk mengetahui informasi selengkapnya, lihat halaman eran dan izin untuk tujuan peristiwa Anda.
Izin yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan panduan memulai ini, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
-
Compute Network Admin (
roles/compute.networkAdmin) -
Compute Security Admin (
roles/compute.securityAdmin) -
Eventarc Admin (
roles/eventarc.admin) -
Kubernetes Engine Admin (
roles/container.admin) -
Logs View Accessor (
roles/logging.viewAccessor) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin) -
Pub/Sub Publisher (
roles/pubsub.publisher) -
Service Account Admin (
roles/iam.serviceAccountAdmin) -
Service Account User (
roles/iam.serviceAccountUser) -
Service Usage Admin (
roles/serviceusage.serviceUsageAdmin)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran kustom atau peran yang telah ditentukan lainnya.
-
Compute Network Admin (
Catat akun layanan default Compute Engine karena Anda akan melampirkannya ke pemicu Eventarc untuk merepresentasikan identitas pemicu untuk tujuan pengujian. Akun layanan ini dibuat secara otomatis setelah mengaktifkan atau menggunakan layanan Google Cloud yang menggunakan Compute Engine, dan dengan format email berikut:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Ganti
PROJECT_NUMBERdengan Google Cloud nomor project Anda. Anda dapat menemukan nomor project di halaman Selamat Datang di konsol Google Cloud atau dengan menjalankan perintah berikut:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Untuk lingkungan produksi, sebaiknya buat akun layanan baru dan berikan satu atau beberapa peran IAM yang berisi izin minimum yang diperlukan dan ikuti prinsip hak istimewa terendah.
- Jika Anda mengaktifkan agen layanan Cloud Pub/Sub pada atau sebelum
8 April 2021, untuk mendukung permintaan push Pub/Sub yang diautentikasi, berikan
peran
Service Account Token Creator (
roles/iam.serviceAccountTokenCreator) kepada agen layanan. Jika tidak, peran ini akan diberikan secara default:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Gunakan perintah
gcloud compute networks subnets createuntuk membuat subnet khusus proxy di jaringan default.gcloud compute networks subnets create proxy-only-subnet \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=us-central1 \ --network=default \ --range=10.10.10.0/24Perhatikan bahwa subnet dengan
purpose=REGIONAL_MANAGED_PROXYdicadangkan untuk load balancer berbasis Envoy danrangeharus menyediakan 64 alamat IP atau lebih.Buat aturan firewall yang cocok dengan rentang subnet khusus proxy dan yang mengizinkan traffic di port TCP 8080.
gcloud compute firewall-rules create allow-proxy-connection \ --allow tcp:8080 \ --source-ranges 10.10.10.0/24 \ --network=default--enable-master-authorized-networksmenentukan bahwa akses ke endpoint publik dibatasi untuk rentang alamat IP yang Anda otorisasi.--enable-private-nodesmenunjukkan bahwa node cluster tidak memiliki alamat IP eksternal.--enable-private-endpointmenunjukkan bahwa cluster dikelola menggunakan alamat IP internal endpoint API bidang kontrol.Buat koneksi SSH ke instance VM Anda dengan menjalankan perintah berikut:
gcloud compute ssh my-vm --project=PROJECT_ID --zone=us-central1-aSetelah koneksi ke server SSH dibuat, jalankan perintah yang tersisa di instance VM Anda.
Jika perlu, instal
kubectldan plugin yang diperlukan.Dari instance VM, gunakan perintah
get-credentialsagarkubectldapat berfungsi dengan cluster yang telah Anda buat.gcloud container clusters get-credentials private-cluster \ --region=us-central1 \ --internal-ipGunakan perintah Kubernetes,
kubectl create deployment, untuk men-deploy aplikasi ke cluster.kubectl create deployment hello-app \ --image=us-docker.pkg.dev/cloudrun/container/helloTindakan ini akan membuat Deployment bernama
hello-app. Pod Deployment akan menjalankan image containerhello.Setelah men-deploy aplikasi, Anda dapat mengekspos aplikasi ke traffic dengan membuat Layanan Kubernetes. Jalankan perintah
kubectl exposeberikut:kubectl expose deployment hello-app \ --type ClusterIP \ --port 80 \ --target-port 8080Anda akan melihat
service/hello-app exposeddalam output.Anda dapat mengabaikan pesan apa pun yang mirip dengan berikut ini:
E0418 14:15:33.970933 1129 memcache.go:287] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the requestDeploy Gateway di cluster Anda.
kubectl apply -f - <<EOF kind: Gateway apiVersion: gateway.networking.k8s.io/v1beta1 metadata: name: internal-http spec: gatewayClassName: gke-l7-rilb listeners: - name: http protocol: HTTP port: 80 EOFPerhatikan hal berikut:
gatewayClassName: gke-l7-rilbmenentukan GatewayClass asal Gateway ini.gke-l7-rilbsesuai dengan Load Balancer Aplikasi internal.port: 80menentukan bahwa Gateway hanya mengekspos port 80 untuk memproses traffic HTTP.
Validasi bahwa Gateway telah di-deploy dengan benar. Mungkin diperlukan waktu beberapa menit untuk men-deploy semua resource-nya.
kubectl describe gateways.gateway.networking.k8s.io internal-httpOutputnya mirip dengan hal berikut ini:
Name: internal-http Namespace: default ... API Version: gateway.networking.k8s.io/v1beta1 Kind: Gateway ... Spec: Gateway Class Name: gke-l7-rilb Listeners: Allowed Routes: Namespaces: From: Same Name: http Port: 80 Protocol: HTTP Status: Addresses: Type: IPAddress Value: 10.36.172.5 ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 80s sc-gateway-controller default/internal-http Normal UPDATE 20s (x3 over 80s) sc-gateway-controller default/internal-http Normal SYNC 20s sc-gateway-controller SYNC on default/internal-http was a successDeploy manifes
HTTPRouteuntuk merutekan traffic HTTP ke layananhello-appdi port 80.kubectl apply -f - <<EOF kind: HTTPRoute apiVersion: gateway.networking.k8s.io/v1beta1 metadata: name: hello-app-route spec: parentRefs: - kind: Gateway name: internal-http rules: - backendRefs: - name: hello-app port: 80 EOFAmbil alamat Gateway.
GATEWAY_ADDRESS=$(kubectl get gateways.gateway.networking.k8s.io internal-http -o=jsonpath="{.status.addresses[0].value}")Buat pemicu.
gcloud eventarc triggers create my-trigger \ --location=us-central1 \ --destination-http-endpoint-uri="http://$GATEWAY_ADDRESS:80/" \ --network-attachment="projects/PROJECT_ID/regions/us-central1/networkAttachments/my-network-attachment" \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.comGanti
PROJECT_NUMBERdengan Google Cloud nomor project Anda. Anda dapat menemukan nomor project di halaman Selamat Datang di konsol Google Cloud atau dengan menjalankan perintah berikut:gcloud projects describe PROJECT_ID --format='value(projectNumber)'Cari dan tetapkan topik Pub/Sub sebagai variabel lingkungan.
export MY_TOPIC=$(gcloud eventarc triggers describe my-trigger \ --location=us-central1 \ --format='value(transport.pubsub.topic)')Publikasikan pesan ke topik Pub/Sub untuk membuat peristiwa.
gcloud pubsub topics publish $MY_TOPIC --message "Hello World"Pemicu Eventarc merutekan peristiwa ke endpoint HTTP internal di cluster GKE pribadi.
Periksa log Pod aplikasi dan verifikasi pengiriman peristiwa.
POD_NAME=$(kubectl get pod --selector app=hello-app --output=name) kubectl logs $POD_NAMEIsi peristiwa harus serupa dengan berikut ini:
2024/04/18 20:31:43 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT {"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished","message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World","event":{"specversion":"1.0","id":"10935738681111260","source":"//pubsub.googleapis.com/projects/my-project/topics/eventarc-us-central1-my-trigger-224","type":"google.cloud.pubsub.topic.v1.messagePublished","datacontenttype":"application/json","time":"2024-04-18T20:40:03Z","data": {"message":{"data":"SGVsbG8gV29ybGQ=","messageId":"10935738681111260","publishTime":"2024-04-18T20:40:03Z"}}}}- Hapus pemicu Eventarc:
gcloud eventarc triggers delete my-trigger --location=us-central1
- Keluar dari VM, lalu hapus instance VM:
gcloud compute instances delete my-vm --zone=us-central1-a
- Hapus lampiran jaringan:
gcloud compute network-attachments delete my-network-attachment --region=us-central1
- Hapus aturan firewall:
gcloud compute firewall-rules delete allow-proxy-connection
- Hapus cluster:
gcloud container clusters delete private-cluster --region=us-central1
- Delete the subnet:
gcloud compute networks subnets delete proxy-only-subnet --region=us-central1
Buat subnet khusus proxy
Kecuali jika Anda membuat kebijakan organisasi yang melarangnya, project baru dimulai dengan jaringan default (jaringan VPC mode otomatis) yang memiliki satu subnetwork (subnet) di setiap region. Setiap jaringan VPC terdiri dari satu atau beberapa rentang alamat IP yang disebut subnet. Subnet adalah resource regional, dan memiliki rentang alamat IP yang terkait dengannya.
Membuat cluster GKE pribadi
Gunakan perintah gcloud container clusters create-auto
untuk membuat cluster GKE pribadi dalam
mode Autopilot
yang memiliki node pribadi dan tidak memiliki akses klien ke endpoint publik.
Contoh berikut membuat cluster GKE pribadi bernama private-cluster dan juga membuat subnet bernama my-subnet:
gcloud container clusters create-auto private-cluster \
--create-subnetwork name=my-subnet \
--enable-master-authorized-networks \
--enable-private-nodes \
--enable-private-endpoint \
--region=us-central1
Perhatikan hal berikut:
Mungkin perlu waktu beberapa menit hingga pembuatan cluster selesai. Setelah
cluster dibuat, output akan menunjukkan bahwa status cluster
adalah RUNNING.
Membuat instance VM di subnet yang ditentukan
Instance VM Compute Engine adalah virtual machine yang dihosting di infrastruktur Google. Istilah instance Compute Engine, instance VM, dan VM merupakan istilah yang sama dan dapat digunakan secara bergantian. Instance VM mencakup cluster GKE, instance lingkungan fleksibel App Engine, dan produk lainnya yang dibangun di VM Compute Engine. Google Cloud
Gunakan perintah gcloud compute instances create
untuk membuat instance VM Compute Engine di subnet yang Anda buat
sebelumnya. Pasang akun layanan dan tetapkan cakupan akses VM ke
cloud-platform.
gcloud compute instances create my-vm \
--service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--zone=us-central1-a \
--subnet=my-subnet
Untuk mengetahui informasi selengkapnya, lihat Membuat dan memulai instance VM.
Men-deploy penerima peristiwa di VM
Dengan menggunakan image bawaan, us-docker.pkg.dev/cloudrun/container/hello, deploy
layanan di VM yang memproses di port 80, serta menerima dan mencatat peristiwa.
Mengonfigurasi perutean traffic Kubernetes
Resource Gateway merepresentasikan bidang data yang merutekan traffic di Kubernetes. Gateway dapat merepresentasikan berbagai jenis load balancing dan pemilihan rute, bergantung pada GatewayClass tempat gateway berasal. Untuk mengetahui informasi selengkapnya, lihat
Men-deploy Gateway.
Manifes HTTPRoute di-deploy untuk membuat Rute dan mengirim traffic ke backend aplikasi.
Membuat lampiran jaringan
Lampiran jaringan adalah resource yang memungkinkan jaringan VPC produsen memulai koneksi ke jaringan VPC konsumen melalui antarmuka Private Service Connect.
Untuk memublikasikan peristiwa, Eventarc menggunakan lampiran jaringan untuk membuat koneksi ke endpoint HTTP internal yang dihosting di jaringan VPC.
Anda dapat membuat lampiran jaringan yang otomatis menerima koneksi dari antarmuka Private Service Connect mana pun yang merujuk ke lampiran jaringan. Buat lampiran jaringan di jaringan dan region yang sama dengan layanan tujuan HTTP.
gcloud compute network-attachments create my-network-attachment \ --region=us-central1 \ --subnets=my-subnet\ --connection-preference=ACCEPT_AUTOMATIC
Untuk mengetahui informasi selengkapnya, lihat Tentang lampiran jaringan.
Membuat pemicu Eventarc
Buat pemicu Eventarc yang membuat topik Pub/Sub baru dan merutekan peristiwa ke penerima peristiwa yang di-deploy di VM saat pesan dipublikasikan ke topik Pub/Sub.
Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi pemicu, lihat Merutekan peristiwa ke endpoint HTTP internal dalam jaringan VPC.
Membuat dan melihat peristiwa topik Pub/Sub
Anda dapat membuat peristiwa dengan memublikasikan pesan ke topik Pub/Sub.
Anda telah berhasil men-deploy layanan penerima peristiwa ke endpoint HTTP internal dalam cluster GKE pribadi, membuat pemicu Eventarc, membuat peristiwa dari Pub/Sub, dan mengonfirmasi bahwa peristiwa dirutekan seperti yang diharapkan oleh pemicu ke endpoint target.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID