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ự, tính năng 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 tiêu 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ó khả năng mở rộng của Google.
Bạn có thể sử dụng Cloud Run dưới dạng một dịch vụ PSC theo 2 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 một dịch vụ nhà sản xuất PSC tuỳ chỉnh, trong đó Cloud Run được hiển thị thông qua một Service Attachment (Tệp đính kèm dịch vụ) thông qua một Internal Application Load Balancer (Bộ cân bằng tải ứng dụng nội bộ) có NEG không dùng 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 trường hợp 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
- Các 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 một Internal Application Load Balancer có NEG không 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 trên Google Cloud có quyền của chủ sở hữu
2. Cấu trúc liên kết 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 2 dịch vụ Cloud Run có thể truy cập thông qua PSC – dịch vụ đầu tiên là dịch vụ tuỳ chỉnh được xuất bản bằng PSC và dịch vụ thứ hai là PSC cho Google API. Bạn sẽ tạo 2 VPC, một consumer-vpc và một producer-vpc. Trước tiên, bạn sẽ triển khai dịch vụ Hello World Cloud Run và cung cấp quyền truy cập vào dịch vụ này thông qua Bộ cân bằng tải ứng dụng nội bộ theo khu vực và NEG phi 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 producer-client 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 một Service Attachment.
Chuyển sang consumer-vpc, bạn sẽ triển khai một điểm cuối PSC trỏ đến Cloud Run Service Attachment mà chúng ta đã thiết lập trong producer-vpc. Sau đó, bạn sẽ xác minh rằng dịch vụ này có thể truy cập thông qua PSC từ một ứng dụng khách 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 của bạn. Cuối cùng, bạn sẽ triển khai một Đ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 điểm cuối PSC cho API của Google.
3. Thiết lập và 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ị của những người tham gia dự án này. Đây là một chuỗi ký tự mà các API của Google không sử dụng. Bạn luôn có thể cập nhật thông tin này.
- Mã dự án là mã duy nhất trên tất cả các dự án trên Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này 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ã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên người dùng của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi tên này sau bước này và tên này sẽ tồn tại trong suốt thời gian của dự án. - Để bạn nắm được thông tin, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 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 đám mây. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi 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í trị giá 300 USD.
Khởi động Cloud Shell
Mặc dù có thể vận hành 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 Cloud.
Trên 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 này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện mọi thao tác trong lớp học lập trình này trong trình duyệt. Bạn không cần cài đặt bất cứ thứ gì.
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
Từ Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
Tạo mạng con
Từ 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 PSC Service Attachment cho mục đích Network Address Translation. Đối với các trường hợp sử dụng trong thực tế, bạn cần điều chỉnh kích thước của mạng con này cho phù hợp để hỗ trợ số lượng điểm cuối được đính kèm. Hãy xem tài liệu về việc định cỡ mạng con NAT PSC để biết thêm thông tin.
Tạo Chính sách tường lửa mạng của nhà sản xuất và Quy tắc tường lửa
Từ 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 có:
- Áp dụng cho tất cả các phiên bản máy ảo mà bạn muốn có thể 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. Dải này chứa tất cả địa chỉ IP mà IAP sử dụng để chuyển tiếp TCP.
Từ 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 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 từ nguồn đến Cloud Run.
Trước khi triển khai dịch vụ Cloud Run, hãy đảm bảo tài khoản dịch vụ mặc định của Compute Engine có các quyền thích hợp bằng cách chạy lệnh sau.
Từ 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 tổ chức về việc chia sẻ hạn chế theo miền. Nếu đã bật chính sách này, bạn sẽ phải thực hiện các bước bổ sung để triển khai Cloud Run có xác thực, định cấu hình Màn hình xin phép bằ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.
Từ 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ó URL run.app được cung cấp. Chúng tôi sẽ không sử dụng URL cho dịch vụ này. Tính năng này vẫn đang ở giai đoạn xem trước tại thời điểm xuất bản lớp học lập trình này.
Trước khi tiếp tục, hãy chuyển về thư mục chính của Cloud Shell.
Từ Cloud Shell
cd ..
7. Hiển thị Hello World Cloud Run thông qua một Internal Application Load Balancer
Đặt trước một đị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 khu vực
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ử
Từ 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ử chương trình Hello World
Trong producer-vm
curl <loadbalancer-ip>
Kết quả đầu ra 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ụ
Từ 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 của 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 tiêu dùng
Mạng VPC
Từ Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
Tạo mạng con
Từ 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
Từ 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 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.
Từ 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ụ Hello World Cloud Run
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 Service Attachment. Bạn sẽ sử dụng URI của tệp đính kèm dịch vụ mà bạn đã ghi lại 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
Từ 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.
Từ 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 và Kiểm tra khả năng kết nối với điểm cuối
Tạo máy ảo ứng dụng khách
Từ 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
Từ 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ừ VM của ứng dụng khách
curl <cloudrun-service-ip>
Kết quả đầu ra dự kiến
Hello World!
Từ VM của ứng dụng khách
exit
13. Tạo dịch vụ lặp lại 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ụ Cloud Run HelloWorld 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 bằng 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 2, hãy sử dụng mã PHP bên dưới trong tệp index.php. Quay lại lớp học lập trình khi bạn đã sẵn sàng triển khai trê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.
Từ 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 phải thoát ra 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 Direct VPC Egress. Chúng tôi đang chuyển hướng tất cả lưu lượng truy cập để truyền dữ liệu ra ngoài thông qua mạng con Truyền dữ liệu ra ngoài trực tiếp của VPC trở lại VPC.
Từ 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 việc triển khai, dịch vụ Cloud Run sẽ cung cấp một URL dịch vụ theo định dạng https://cloudrun-loop-<projectnum>.<region>.run.app. Hãy lưu ý URL này vì bạn sẽ kiểm thử URL này ở bước tiếp theo.
14. Kiểm tra khả năng kết nối với CloudRun-Loop thông qua URL Cloud Run
Từ 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 lại ở bước trước.
Từ VM của ứng dụng khách
curl <Cloud-Run-ServiceURL>
Kết quả đầu ra dự kiến
Hello World!
Kết quả này cho thấy dịch vụ CloudRun-Loop của chúng tôi đ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ụ Hello World Cloud Run. Tuy nhiên, tại thời điểm này, VM máy khách tiêu dùng của chúng tôi đang truyền dữ liệu ra Internet thông qua Cloud NAT để gọi đến URL Cloud Run công khai. 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ừ VM của ứ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 Google API để thay đổi độ phân giải này thành riêng tư nhằm giữ lưu lượng truy cập bên ngoài Internet công cộng.
Từ VM của ứ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 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 bắt nguồn từ mộ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 thể trùng lặp với bất kỳ mạng con VPC, mạng con VPC được kết nối ngang hàng hoặc tuyến đường kết hợp nào hiện có.
Từ 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
Từ 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 DNS 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ả cá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 PSC cho điểm cuối API của Google.
Từ 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 tra quá trình phân giải DNS riêng
Chúng ta sẽ đăng nhập lại vào VM máy khách và chạy lại lệnh dig. Giờ đây, chúng ta sẽ thấy rằng URL Cloud Run sẽ phân giải thành điểm cuối PSC cho API của Google.
Từ 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 <Cloud-Run-ServiceURL> bằng URL dịch vụ mà bạn đã ghi lại trước đó.
Từ VM của ứng dụng khách
sudo resolvectl flush-caches curl <CloudRun-Loop-ServiceURL>
Lệnh curl vẫn hoạt động như trước đây.
Từ VM của ứng dụng khách
curl <CloudRun-Loop-ServiceURL>
Kết quả đầu ra dự kiến
Hello World!
Từ VM của ứng dụng khách
dig <CloudRun-Loop-ServiceURL>
Lệnh dig sẽ cho thấy dịch vụ Cloud Run Loop của chúng tôi hiện đang phân giải thành đ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
Từ 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ể việc chạy hai lệnh tiếp theo sẽ không thành công và gặp 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 bạn không xoá được, hãy bỏ qua 2 lệnh này và tiếp tục chuyển sang phần tiếp theo, sau đó quay lại phần này để xoá sau một thời gian.
Từ Cloud Shell
gcloud compute networks subnets delete cloudrun-egress --region $region -q gcloud compute networks delete consumer-vpc -q
Từ 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
- Các 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 một Internal Application Load Balancer có NEG không 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