1. Giới thiệu
Private Service Connect (PSC) là một tính năng của mạng Google Cloud, cho phép người dùng truy cập riêng tư vào các dịch vụ được quản lý từ bên trong mạng VPC của họ. Tương tự, dịch vụ này cho phép nhà sản xuất dịch vụ được quản lý lưu trữ các dịch vụ này trong mạng VPC riêng của họ và cung cấp kết nối riêng tư cho người dùng.
Cloud Run là một nền tảng điện toán được quản lý, cho phép bạn chạy các vùng chứa ngay trên cơ sở hạ tầng có thể mở rộng của Google.
Bạn có thể sử dụng Cloud Run dưới dạng dịch vụ PSC theo hai cách.
- Thông qua PSC cho API của Google bằng cách gọi Cloud Run thông qua URL run.app do Cloud Run cung cấp
- Thông qua dịch vụ nhà sản xuất PSC tuỳ chỉnh, trong đó Cloud Run được hiển thị thông qua Tệp đính kèm dịch vụ qua Trình cân bằng tải ứng dụng nội bộ có NEG không có máy chủ.
Lớp học lập trình này sẽ khám phá cách thiết lập Cloud Run bằng PSC cho cả hai tình huống này
Kiến thức bạn sẽ học được
- Triển khai các ứng dụng cơ bản trên Cloud Run
- Chế độ kiểm soát lưu lượng truy cập vào và ra của Cloud Run
- Triển khai Cloud Run thông qua Trình cân bằng tải ứng dụng nội bộ bằng NEG không có máy chủ
- Thiết lập Dịch vụ nhà sản xuất PSC thông qua Tệp đính kèm dịch vụ
- Triển khai Điểm cuối PSC
Bạn cần có
- Dự án Google Cloud có quyền của Chủ sở hữu
2. Cấu trúc liên kết của lớp học lập trình
Trong lớp học lập trình này, bạn sẽ triển khai hai dịch vụ Cloud Run có thể truy cập được thông qua PSC – dịch vụ đầu tiên là dịch vụ được phát hành tuỳ chỉnh bằng PSC và dịch vụ thứ hai là PSC cho API của Google. Bạn sẽ tạo hai VPC, một consumer-vpc và một producer-vpc. Trước tiên, bạn sẽ triển khai dịch vụ Cloud Run Hello World và cho phép truy cập dịch vụ này thông qua Trình cân bằng tải ứng dụng nội bộ theo khu vực và NEG không có máy chủ trong producer-vpc. Bạn sẽ xác minh rằng dịch vụ đang hoạt động thông qua bộ cân bằng tải qua ứng dụng của nhà sản xuất trước khi thiết lập dịch vụ Cloud Run để có thể truy cập dưới dạng dịch vụ nhà sản xuất PSC thông qua Tệp đính kèm dịch vụ.
Chuyển sang consumer-vpc, bạn sẽ triển khai một điểm cuối PSC trỏ đến Tệp đính kèm dịch vụ Cloud Run mà chúng ta đã thiết lập trong producer-vpc. Sau đó, bạn sẽ xác minh rằng có thể truy cập dịch vụ thông qua PSC từ ứng dụng khách của người dùng trong consumer-vpc. Tiếp theo, bạn sẽ tạo một dịch vụ Cloud Run khác gọi Điểm cuối PSC. Cuối cùng, bạn sẽ triển khai Điểm cuối PSC cho các API của Google. Từ ứng dụng khách, bạn sẽ truy cập vào Cloud Run thông qua URL do Cloud Run cung cấp. URL này sẽ sử dụng PSC cho điểm cuối API của Google.
3. Cách thiết lập và các yêu cầu
Thiết lập môi trường theo tốc độ của riêng bạn
- Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
- Tên dự án là tên hiển thị cho người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng. Bạn có thể cập nhật thông tin này bất cứ lúc nào.
- Mã dự án là duy nhất trên tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường thì bạn không cần quan tâm đến chuỗi này. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (thường được xác định là
PROJECT_ID
). Nếu không thích mã được tạo, bạn có thể tạo một mã ngẫu nhiên khác. Ngoài ra, bạn có thể thử dùng email của riêng mình để xem có thể sử dụng hay không. Bạn không thể thay đổi giá trị này sau bước này và giá trị này sẽ được giữ nguyên trong suốt thời gian của dự án. - Xin lưu ý rằng có một giá trị thứ ba là Mã dự án mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu.
- Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên Cloud. Việc tham gia lớp học lập trình này sẽ không tốn kém nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí sau khi hoàn tất hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Khởi động Cloud Shell
Mặc dù có thể điều khiển Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên đám mây.
Trong Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ trên cùng bên phải:
Quá trình cấp phép và kết nối với môi trường chỉ mất vài phút. Khi hoàn tất, bạn sẽ thấy như sau:
Máy ảo này được tải sẵn tất cả các công cụ phát triển mà bạn cần. Ứng dụng này cung cấp một thư mục gốc 5 GB ổn định và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất mạng và xác thực. Bạn có thể thực hiện tất cả công việc trong lớp học lập trình này trong một trình duyệt. Bạn không cần cài đặt gì cả.
4. Trước khi bắt đầu
Bật API
Trong Cloud Shell, hãy đảm bảo rằng dự án của bạn đã được thiết lập và định cấu hình các biến.
gcloud auth login gcloud config list project gcloud config set project [YOUR-PROJECT-ID] export projectid=[YOUR-PROJECT-ID] export projectnum=[YOUR-PROJECT-NUM] export region=us-central1 export zone=us-central1-a echo $projectid echo $projectnum echo $region echo $zone
Bật tất cả các dịch vụ cần thiết
gcloud services enable compute.googleapis.com gcloud services enable run.googleapis.com gcloud services enable servicedirectory.googleapis.com gcloud services enable dns.googleapis.com gcloud services enable cloudbuild.googleapis.com gcloud services enable cloudresourcemanager.googleapis.com
5. Tạo mạng VPC của nhà sản xuất
Mạng VPC
Trong Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
Tạo mạng con
Trong Cloud Shell
gcloud compute networks subnets create producer-subnet \ --network=producer-vpc \ --range=10.0.0.0/28 \ --region=$region gcloud compute networks subnets create lb-proxy-subnet \ --network=producer-vpc \ --range=10.100.100.0/24 \ --region=$region \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE gcloud compute networks subnets create psc-nat-subnet \ --network=producer-vpc \ --region=$region \ --range=10.100.101.0/24 \ --purpose=PRIVATE_SERVICE_CONNECT
Mạng con PSC sẽ được liên kết với Tệp đính kèm dịch vụ PSC cho mục đích Dịch địa chỉ mạng. Đối với các trường hợp sử dụng chính thức, bạn cần định cỡ phù hợp cho mạng con này để hỗ trợ số lượng điểm cuối được đính kèm. Hãy xem tài liệu về cách định cỡ mạng con NAT PSC để biết thêm thông tin.
Tạo Chính sách tường lửa và Quy tắc tường lửa cho mạng của nhà sản xuất
Trong Cloud Shell
gcloud compute network-firewall-policies create producer-vpc-policy --global gcloud compute network-firewall-policies associations create \ --firewall-policy producer-vpc-policy \ --network producer-vpc \ --name network-producer-vpc \ --global-firewall-policy
Để cho phép IAP kết nối với các phiên bản máy ảo, hãy tạo một quy tắc tường lửa:
- Áp dụng cho tất cả các phiên bản máy ảo mà bạn muốn truy cập bằng IAP.
- Cho phép lưu lượng truy cập vào từ dải IP 35.235.240.0/20. Phạm vi này chứa tất cả địa chỉ IP mà IAP sử dụng để chuyển tiếp TCP.
Trong Cloud Shell
gcloud compute network-firewall-policies rules create 1000 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "SSH with IAP" \ --direction INGRESS \ --src-ip-ranges 35.235.240.0/20 \ --layer4-configs tcp:22 \ --global-firewall-policy
6. Tạo ứng dụng Hello World trên Cloud Run
Làm theo hướng dẫn tại đây để viết một ứng dụng mẫu bằng Python. Chạy các lệnh này trong Cloud Shell. Sau khi bạn hoàn tất bước 3 trong phần "Viết ứng dụng mẫu", hãy quay lại Lớp học lập trình này và làm theo hướng dẫn bên dưới để Triển khai lên Cloud Run từ nguồn.
Trước khi triển khai dịch vụ Cloud Run, hãy đảm bảo tài khoản dịch vụ điện toán mặc định của bạn có các quyền thích hợp bằng cách chạy lệnh sau.
Trong Cloud Shell
gcloud projects add-iam-policy-binding $projectid --member=serviceAccount:$projectnum-compute@developer.gserviceaccount.com --role=roles/run.builder
LƯU Ý: Lớp học lập trình này giả định rằng tổ chức của bạn chưa bật Chính sách của tổ chức về việc chia sẻ có giới hạn về miền. Nếu đã bật chính sách này, bạn sẽ phải thực hiện thêm các bước để triển khai Cloud Run bằng tính năng xác thực, định cấu hình Màn hình đồng ý OAuth và thiết lập IAP cho phần phụ trợ của bộ cân bằng tải. Bạn nên làm theo tất cả các bước định cấu hình này trong môi trường sản xuất.
Trong Cloud Shell
gcloud beta run deploy helloworld \ --source . \ --platform=managed \ --ingress=internal \ --allow-unauthenticated \ --no-default-url \ --region=$region
Việc sử dụng cờ --no-default-url
sẽ triển khai dịch vụ Cloud Run mà không cần URL run.app được cung cấp. Chúng tôi sẽ không sử dụng URL này cho dịch vụ này. Tính năng này vẫn đang ở giai đoạn xem trước kể từ thời điểm phát hành lớp học lập trình này.
Trước khi tiếp tục, hãy quay lại thư mục chính của Cloud Shell.
Trong Cloud Shell
cd ..
7. Hiển thị Hello World Cloud Run thông qua Trình cân bằng tải ứng dụng nội bộ
Đặt trước địa chỉ IP nội bộ tĩnh cho quy tắc chuyển tiếp của trình cân bằng tải.
Trong Cloud Shell
gcloud compute addresses create cloudrun-ip \ --region=$region \ --subnet=producer-subnet gcloud compute addresses describe cloudrun-ip --region=$region
Kết quả mẫu
address: 10.0.1.31 addressType: INTERNAL creationTimestamp: '2025-03-17T09:04:06.620-07:00' description: '' id: 'xxxx' kind: compute#address labelFingerprint: xxxx name: cloudrun-ip networkTier: PREMIUM purpose: GCE_ENDPOINT region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/addresses/cloudrun-ip status: RESERVED subnetwork: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/producer-subnet
Ghi lại địa chỉ IP mà bạn vừa tạo.
Tạo Trình cân bằng tải ứng dụng nội bộ theo vùng
Trong Cloud Shell
gcloud compute network-endpoint-groups create cloudrun-producer-neg \ --region=$region \ --network-endpoint-type=serverless \ --cloud-run-service=helloworld gcloud compute backend-services create cloudrun-producer-bes \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTP \ --region=$region gcloud compute backend-services add-backend cloudrun-producer-bes \ --region=$region \ --network-endpoint-group=cloudrun-producer-neg \ --network-endpoint-group-region=$region gcloud compute url-maps create producer-urlmap \ --default-service=cloudrun-producer-bes \ --region=$region gcloud compute target-http-proxies create producer-http-proxy \ --url-map=producer-urlmap \ --region=$region
Trong Cloud Shell
gcloud compute forwarding-rules create cloudrun-fr \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=producer-vpc \ --subnet=producer-subnet \ --address=cloudrun-ip \ --target-http-proxy=producer-http-proxy \ --target-http-proxy-region=$region \ --region=$region \ --ports=80 \ --allow-global-access
8. Kiểm thử Hello World Cloud Run được hiển thị thông qua Trình cân bằng tải
Tạo máy ảo kiểm thử
Trong Cloud Shell
gcloud compute instances create producer-client \ --zone=$zone \ --subnet=producer-subnet \ --no-address \ --scopes=cloud-platform
Trong Cloud Shell
gcloud compute ssh \ --zone "$zone" "producer-client" \ --tunnel-through-iap \ --project $projectid
Thay thế <loadbalancer-ip> bằng địa chỉ IP mà bạn đã tạo trước đó (ví dụ: 10.0.0.2).
Kiểm thử Hello World
Trong producer-vm
curl <loadbalancer-ip>
Kết quả dự kiến
Hello World!
Thoát khỏi máy ảo.
Trong producer-vm
exit
9. Tạo tệp đính kèm dịch vụ
Trong Cloud Shell
gcloud compute service-attachments create cloudrun-attachment \ --region=$region \ --producer-forwarding-rule=cloudrun-fr \ --connection-preference=ACCEPT_MANUAL \ --consumer-accept-list=$projectid=5 \ --nat-subnets=psc-nat-subnet
Tiếp theo, hãy truy xuất và ghi lại URI tệp đính kèm dịch vụ để định cấu hình điểm cuối PSC trong môi trường người dùng.
Trong Cloud Shell
gcloud compute service-attachments describe cloudrun-attachment --region=$region
Ví dụ về kết quả đầu ra dự kiến
connectionPreference: ACCEPT_MANUAL consumerAcceptLists: - connectionLimit: 5 projectIdOrNum: $projectid creationTimestamp: '2025-03-10T08:49:08.134-07:00' description: '' enableProxyProtocol: false fingerprint: -F0Kpe3Fi8o= id: '2679595584727463707' kind: compute#serviceAttachment name: cloudrun-attachment natSubnets: - https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet pscServiceAttachmentId: high: 'xxxxx' low: 'xxxx' reconcileConnections: false region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/serviceAttachments/cloudrun-attachment targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$projectid/forwardingRules/cloudrun-fr
10. Tạo mạng VPC của người dùng
Mạng VPC
Trong Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
Tạo mạng con
Trong Cloud Shell
gcloud compute networks subnets create consumer-subnet \ --network=consumer-vpc \ --range=10.0.0.0/24 \ --region=$region \ --enable-private-ip-google-access gcloud compute networks subnets create cloudrun-egress \ --network=consumer-vpc \ --range=10.0.1.0/24 \ --region=$region \ --enable-private-ip-google-access
Tạo Cloud NAT
Trong Cloud Shell
gcloud compute routers create central-cr \ --network=consumer-vpc \ --region=$region gcloud compute routers nats create central-nat \ --router=central-cr \ --region=$region \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
Tạo Chính sách tường lửa mạng dành cho người tiêu dùng và Quy tắc tường lửa
Chúng ta sẽ tạo một Chính sách tường lửa mạng khác cho consumer-vpc.
Trong Cloud Shell
gcloud compute network-firewall-policies create consumer-vpc-policy --global gcloud compute network-firewall-policies associations create --firewall-policy consumer-vpc-policy --network consumer-vpc --name network-consumer-vpc --global-firewall-policy gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy consumer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22 --global-firewall-policy
11. Tạo điểm cuối PSC cho Dịch vụ Cloud Run Hello World
Tại thời điểm này, chúng ta sẽ tạo một điểm cuối PSC và kết nối điểm cuối đó với dịch vụ Cloud Run mà bạn đã hiển thị thông qua Tệp đính kèm dịch vụ. Bạn sẽ sử dụng URI tệp đính kèm dịch vụ mà bạn đã ghi chú trước đó trong phần này. Đảm bảo rằng định dạng của URI trong lệnh gcloud khớp với URI của bạn.
Tạo điểm cuối PSC
Trong Cloud Shell
gcloud compute addresses create cloudrun-service-ip --region=$region --subnet=consumer-subnet --ip-version=IPV4 gcloud compute forwarding-rules create cloudrun-ep --region=$region --network=consumer-vpc --address=cloudrun-service-ip --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/cloudrun-attachment
Lấy địa chỉ IP của Điểm cuối PSC mà bạn vừa tạo. Bạn sẽ sử dụng địa chỉ IP này trong bước tiếp theo để kiểm thử điểm cuối.
Trong Cloud Shell
gcloud compute addresses list --filter="name=cloudrun-service-ip"
Ví dụ về kết quả đầu ra dự kiến
NAME: cloudrun-service-ip ADDRESS/RANGE: 10.0.0.2 TYPE: INTERNAL PURPOSE: GCE_ENDPOINT NETWORK: REGION: us-central1 SUBNET: consumer-subnet STATUS: IN_USE
12. Tạo máy ảo ứng dụng khách và kiểm thử khả năng kết nối với điểm cuối
Tạo máy ảo ứng dụng khách
Trong Cloud Shell
gcloud compute instances create consumer-client \ --zone=$zone \ --subnet=consumer-subnet \ --no-address \ --metadata startup-script='#! /bin/bash sudo apt-get update sudo apt-get install dnsutils -y'
Kiểm thử khả năng kết nối
Trong Cloud Shell
gcloud compute ssh \ --zone "$zone" "consumer-client" \ --tunnel-through-iap \ --project $projectid
Thay thế <cloudrun-service-ip> bằng địa chỉ IP thực tế.
Từ máy ảo ứng dụng khách
curl <cloudrun-service-ip>
Kết quả dự kiến
Hello World!
Từ máy ảo ứng dụng khách
exit
13. Tạo Dịch vụ vòng lặp Cloud Run
Tiếp theo, chúng ta sẽ tạo một dịch vụ Cloud Run để thực hiện lệnh gọi riêng tư trở lại consumer-vpc nhằm gọi dịch vụ HelloWorld trên Cloud Run trước đó mà chúng ta đã hiển thị thông qua PSC.
Làm theo hướng dẫn "Viết ứng dụng mẫu" tại đây để viết một ứng dụng vòng lặp trong PHP. Thay vì helloworld-php, hãy đặt tên thư mục là cloudrun-loop. Chạy các lệnh này trong Cloud Shell. Ở bước hai, hãy sử dụng mã PHP dưới đây trong tệp index.php. Hãy quay lại lớp học lập trình này khi bạn đã sẵn sàng triển khai lên Cloud Run. Đừng làm theo hướng dẫn trong tài liệu cho bước này.
Sử dụng mã này cho tệp index.php. Thay thế <cloudrun-service-ip> bằng địa chỉ IP của điểm cuối PSC mà bạn đã kiểm thử ở bước trước.
Trong Cloud Shell
<?php if(!function_exists('curl_init')) { die('cURL not available!'); } $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://<cloudrun-service-ip>/'); curl_setopt($curl, CURLOPT_FAILONERROR, true); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($curl); if ($output === FALSE) { echo 'An error has occurred: ' . curl_error($curl) . PHP_EOL; } else { echo $output; } ?>
Chúng ta đang chỉ định một mạng và mạng con trong quá trình triển khai Cloud Run này vì lưu lượng truy cập Cloud Run cần quay lại VPC để truy cập vào điểm cuối PSC. Chúng tôi đang hướng dẫn Cloud Run sử dụng mạng con cloudrun-egress cho Luồng dữ liệu trực tiếp ra khỏi VPC. Chúng ta sẽ chuyển hướng tất cả lưu lượng truy cập đi ra ngoài thông qua mạng con Direct VPC Egress (Đường thoát VPC trực tiếp) trở lại VPC.
Trong Cloud Shell
gcloud run deploy cloudrun-loop \ --source . \ --platform=managed \ --ingress=internal \ --allow-unauthenticated \ --vpc-egress=all-traffic \ --network=consumer-vpc \ --subnet=cloudrun-egress \ --region=$region
Khi hoàn tất quá trình triển khai, dịch vụ Cloud Run sẽ cung cấp một URL dịch vụ ở định dạng https://cloudrun-loop-<projectnum>.<region>.run.app. Xin lưu ý rằng URL này cũng sẽ được kiểm thử trong bước tiếp theo.
14. Kiểm thử khả năng kết nối với CloudRun-Loop thông qua URL Cloud Run
Trong Cloud Shell
gcloud compute ssh \ --zone "$zone" "consumer-client" \ --tunnel-through-iap \ --project $projectid
Thay thế <Cloud-Run-ServiceURL> bằng URL dịch vụ mà bạn đã ghi chú ở bước trước.
Từ máy ảo ứng dụng khách
curl <Cloud-Run-ServiceURL>
Kết quả dự kiến
Hello World!
Kết quả này cho thấy dịch vụ CloudRun-Loop của chúng ta đang gọi lại thành công vào consumer-vpc để gọi điểm cuối PSC được kết nối với dịch vụ Cloud Run Hello World. Tuy nhiên, tại thời điểm này, máy ảo ứng dụng khách của chúng ta đang thoát ra Internet thông qua Cloud NAT để thực hiện lệnh gọi đến URL công khai của Cloud Run. Chúng ta có thể chạy lệnh dig trên URL để cho thấy rằng URL đó sẽ phân giải thành một địa chỉ IP công khai.
Từ máy ảo ứng dụng khách
dig <Cloud-Run-ServiceURL>
Kết quả mẫu
; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1938 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;https://cloudrun-loop-<projectnum>.<region>.run.app. IN A ;; ANSWER SECTION: https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.38.53 https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.36.53 https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.32.53 https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.34.53 ;; Query time: 4 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP) ;; WHEN: Tue Mar 11 19:05:36 UTC 2025 ;; MSG SIZE rcvd: 147
Chúng ta có thể tạo một PSC cho điểm cuối API của Google để thay đổi độ phân giải này thành riêng tư nhằm ngăn lưu lượng truy cập trên Internet công khai.
Từ máy ảo ứng dụng khách
exit
15. Tạo PSC cho Điểm cuối API của Google
Điểm cuối PSC này khác với điểm cuối PSC mà chúng ta đã tạo trước đó. PSC cho API Google trỏ đến một gói API Google (tất cả API hoặc API tương thích với VPC-SC). Địa chỉ IP không lấy nguồn từ mạng con theo khu vực, mà được tạo dưới dạng một địa chỉ IP /32 duy nhất trên toàn cầu và không được trùng lặp với bất kỳ mạng con VPC hiện có, mạng con VPC ngang hàng hoặc tuyến đường kết hợp nào.
Trong Cloud Shell
export pscgoogip=100.100.100.100 echo $pscgoogip gcloud compute addresses create psc-goog-ep-ip \ --global \ --purpose=PRIVATE_SERVICE_CONNECT \ --addresses=$pscgoogip \ --network=consumer-vpc
Trong Cloud Shell
gcloud compute forwarding-rules create psc4googapi \ --global \ --network=consumer-vpc \ --address=psc-goog-ep-ip \ --target-google-apis-bundle=all-apis
16. Tạo Vùng riêng của Cloud DNS cho run.app
Khi bạn tạo một điểm cuối PSC cho API của Google, một vùng DNS riêng tư của Cloud Run sẽ được tạo cho tất cả API thuộc miền googleapis.com. Vì Cloud Run sử dụng run.app, nên chúng ta cần tạo một vùng riêng tư khác để liên kết run.app với điểm cuối PSC cho API của Google.
Trong Cloud Shell
gcloud dns managed-zones create "cloudrun" \ --dns-name=run.app \ --description="run.app psc resolution" \ --visibility=private \ --networks=consumer-vpc gcloud dns record-sets transaction start \ --zone="cloudrun" gcloud dns record-sets transaction add $pscgoogip \ --name=*.run.app \ --ttl=300 \ --type=A \ --zone="cloudrun" gcloud dns record-sets transaction execute \ --zone="cloudrun"
17. Kiểm thử tính năng phân giải DNS riêng
Chúng ta sẽ đăng nhập lại vào máy ảo ứng dụng khách và chạy lại lệnh dig. Lúc này, chúng ta sẽ thấy URL Cloud Run sẽ phân giải đến điểm cuối PSC cho API của Google.
Trong Cloud Shell
gcloud compute ssh \ --zone "$zone" "consumer-client" \ --tunnel-through-iap \ --project $projectid
Trước tiên, chúng ta sẽ xoá bộ nhớ đệm DNS. Thay thế <Cloud-Run-ServiceURL> bằng URL dịch vụ mà bạn đã ghi lại trước đó.
Từ máy ảo ứng dụng khách
sudo resolvectl flush-caches curl <CloudRun-Loop-ServiceURL>
Curl vẫn hoạt động như trước.
Từ máy ảo ứng dụng khách
curl <CloudRun-Loop-ServiceURL>
Kết quả dự kiến
Hello World!
Từ máy ảo ứng dụng khách
dig <CloudRun-Loop-ServiceURL>
Kết quả của lệnh dig sẽ cho thấy rằng dịch vụ Vòng lặp Cloud Run của chúng ta hiện đang phân giải đến điểm cuối PSC cho API của Google.
Kết quả mẫu
; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30179 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;https://cloudrun-loop-<projectnum>.<region>.run.app. IN A ;; ANSWER SECTION: https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 100.100.100.100 ;; Query time: 8 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP) ;; WHEN: Tue Mar 11 20:04:05 UTC 2025 ;; MSG SIZE rcvd: 99
THÀNH CÔNG!
18. Các bước dọn dẹp
Thoát khỏi phiên bản máy ảo
exit
Trong Cloud Shell
gcloud dns record-sets delete *.run.app --zone="cloudrun" --type=A -q gcloud dns managed-zones delete "cloudrun" -q gcloud compute instances delete consumer-client --zone=$zone --project=$projectid -q gcloud compute forwarding-rules delete psc4googapi --global -q gcloud compute addresses delete psc-goog-ep-ip --global -q gcloud run services delete cloudrun-loop --region=$region -q gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/cloudrun-loop -q gcloud compute forwarding-rules delete cloudrun-ep --region=$region -q gcloud compute addresses delete cloudrun-service-ip --region=$region -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy consumer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy --name=network-consumer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q gcloud compute routers nats delete central-nat --router=central-cr --region=$region -q gcloud compute routers delete central-cr --region=$region -q gcloud compute networks subnets delete consumer-subnet --region $region -q
Có thể bạn sẽ không chạy được hai lệnh tiếp theo do lỗi "tài nguyên đang được sử dụng". Tài liệu về Cloud Run cho biết đôi khi Cloud Run mất từ 1 đến 2 giờ để giải phóng tài nguyên mạng con sau khi dịch vụ Cloud Run bị xoá. Nếu không xoá được, hãy bỏ qua hai lệnh này và tiếp tục sang phần tiếp theo, sau đó quay lại phần này để xoá sau một khoảng thời gian.
Trong Cloud Shell
gcloud compute networks subnets delete cloudrun-egress --region $region -q gcloud compute networks delete consumer-vpc -q
Trong Cloud Shell
gcloud compute service-attachments delete cloudrun-attachment --region=$region -q gcloud compute instances delete producer-client --zone=$zone --project=$projectid -q gcloud compute forwarding-rules delete cloudrun-fr --region=$region -q gcloud compute target-http-proxies delete producer-http-proxy --region=$region -q gcloud compute url-maps delete producer-urlmap --region=$region -q gcloud compute backend-services delete cloudrun-producer-bes --region=$region -q gcloud compute network-endpoint-groups delete cloudrun-producer-neg --region=$region -q gcloud compute addresses delete cloudrun-ip --region=$region -q gcloud run services delete helloworld --region=$region -q gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/helloworld -q gcloud artifacts repositories delete cloud-run-source-deploy --location=$region -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy --name=network-producer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete producer-vpc-policy --global -q gcloud compute networks subnets delete lb-proxy-subnet --region $region -q gcloud compute networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete producer-subnet --region $region -q gcloud compute networks delete producer-vpc -q
19. Xin chúc mừng!
Chúc mừng bạn đã hoàn thành lớp học lập trình này.
Nội dung đã đề cập
- Triển khai các ứng dụng cơ bản trên Cloud Run
- Chế độ kiểm soát lưu lượng truy cập vào và ra của Cloud Run
- Triển khai Cloud Run thông qua Trình cân bằng tải ứng dụng nội bộ bằng NEG không có máy chủ
- Thiết lập Dịch vụ nhà sản xuất PSC thông qua Tệp đính kèm dịch vụ
- Triển khai Điểm cuối PSC