1. Giới thiệu
Với Private Service Connect, nhà sản xuất dịch vụ có thể cung cấp các dịch vụ trong môi trường VPC thông qua một Service Attachment và cho phép người dùng trong một môi trường VPC khác truy cập vào các dịch vụ đó thông qua một điểm cuối Private Service Connect. Đôi khi, các dịch vụ của nhà sản xuất này được thiết kế dưới dạng các cụm máy ảo, trong đó mỗi máy ảo cung cấp cùng một dịch vụ trên các số cổng giống hệt nhau. Trước đây, các thiết kế dịch vụ này yêu cầu người dùng triển khai nhiều điểm cuối Private Service Connect hoặc sử dụng tính năng chuyển tiếp IP ở phía nhà sản xuất để đảm bảo nhắm đến đúng VM của nhà sản xuất.
Giờ đây, Private Service Connect có thể nhắm đến đích đến chính xác một cách tự nhiên bằng cách sử dụng tính năng Ánh xạ cổng. Trong phòng thí nghiệm này, bạn sẽ tìm hiểu về các trường hợp sử dụng mà tính năng này là bắt buộc và cách triển khai một NEG Ánh xạ cổng vào một tải Private Service Connect.
Kiến thức bạn sẽ học được
- Các trường hợp sử dụng tính năng Ánh xạ cổng Private Service Connect
- Các lợi ích chính của tính năng Ánh xạ cổng PSC
- Yêu cầu về mạng
- Tạo dịch vụ nhà sản xuất Private Service Connect bằng cách sử dụng tính năng liên kết cổng.
- Tạo một điểm cuối Private Service Connect
- Thực hiện các lệnh gọi thông qua điểm cuối Kết nối dịch vụ riêng tư đến một dịch vụ nhà sản xuất
Bạn cần có
- Dự án trên Google Cloud có quyền của chủ sở hữu
2. Các trường hợp sử dụng tính năng Ánh xạ cổng Private Service Connect
Tính năng Ánh xạ cổng sử dụng một NEG (Nhóm điểm cuối mạng) Ánh xạ cổng dành riêng cho các trường hợp sử dụng PSC.
Các loại nhà sản xuất phổ biến nhất có thể hưởng lợi từ việc sử dụng tính năng Ánh xạ cổng là nhà sản xuất cơ sở dữ liệu NoSQL và nhà sản xuất Kafka. Tuy nhiên, mọi nhà sản xuất yêu cầu một cụm máy ảo cung cấp cùng một dịch vụ trên các cổng giống hệt nhau với các yêu cầu cụ thể về việc liên kết máy ảo đều có thể sử dụng tính năng này.
Producer xác định mối liên kết giữa cổng máy khách và VM của nhà sản xuất + cổng đích. Sau đó, nhà sản xuất cần chia sẻ thông tin này với người tiêu dùng. Người dùng sử dụng các cổng được xác định trước để xác định duy nhất VM nhà sản xuất + cổng đích mà họ cần truy cập. Cổng mà đối tượng tiêu thụ sử dụng là một cổng khác với cổng mà nhà sản xuất sử dụng.
Lợi ích chính của tính năng Liên kết cổng PSC
- Đơn giản: Nhà sản xuất triển khai các thành phần PSC bằng một ánh xạ cổng và người tiêu dùng triển khai một điểm cuối PSC. PSC tự động xử lý việc dịch địa chỉ mạng.
- Tiết kiệm chi phí: Không cần thêm tài nguyên PSC hoặc chu kỳ CPU VM của nhà sản xuất. Giá tương tự như các loại triển khai PSC khác
- Hiệu suất cao: Ánh xạ cổng cung cấp công suất tốc độ đường truyền và độ trễ thấp tương tự như các chế độ PSC khác
- Có thể mở rộng và hiệu quả về IP: Một địa chỉ IP từ VPC của người dùng có thể truy cập vào tối đa 1000 VM của nhà sản xuất và 1000 ánh xạ cổng
3. Yêu cầu về mạng
- Tính năng Ánh xạ cổng yêu cầu bạn phải sử dụng Trình cân bằng tải truyền qua mạng nội bộ làm trình cân bằng tải của nhà sản xuất.
- Bạn chỉ có thể sử dụng các điểm cuối PSC với tính năng Ánh xạ cổng (không phải PSC Backend hoặc Giao diện PSC).
- NEG ánh xạ cổng là các cấu trúc theo khu vực.
- Bạn chỉ có thể sử dụng NEG ánh xạ cổng thông qua một kết nối PSC. Chúng sẽ không hoạt động nếu VM máy khách gọi trực tiếp quy tắc chuyển tiếp của bộ cân bằng tải nhà sản xuất. Điều này được thể hiện trong cách dịch vụ nhà sản xuất được kiểm thử trong lớp học lập trình này.
- Điểm cuối PSC và ngăn xếp dịch vụ của nhà sản xuất phải nằm trong các VPC khác nhau.
4. Cấu trúc liên kết lớp học lập trình

Trong VPC của nhà sản xuất, 2 VM sẽ được tạo để chạy 2 máy chủ web, mỗi máy chủ chạy trên cổng 1000 và một máy chủ chạy trên cổng 2000. Chúng tôi sẽ kiểm thử từng dịch vụ trước khi thiết lập NEG Portmap, Internal Network Passthrough Load Balancer và Service Attachment.
Trong VPC của người dùng, chúng ta sẽ thiết lập một điểm cuối PSC và kiểm tra khả năng kết nối với dịch vụ nhà sản xuất từ một máy ảo khách.
5. 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ì.
6. Trước khi bắt đầu
Bật API
Trong Cloud Shell, hãy đảm bảo rằng bạn đã thiết lập mã dự án
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone
Bật tất cả các dịch vụ cần thiết
gcloud services enable compute.googleapis.com
7. 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-service-subnet --network producer-vpc --range 10.0.0.0/24 --region $region --enable-private-ip-google-access gcloud compute networks subnets create psc-nat-subnet --network producer-vpc --range 10.100.100.0/24 --region $region --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 môi môi trường phát hành công khai, mạng con này cần có kích thước phù hợp để hỗ trợ lượng lưu lượng truy cập đến từ tất cả các điểm cuối PSC đượ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 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
Quy tắc tường lửa sau đây cho phép lưu lượng truy cập trên các cổng TCP từ 1000 đến 2000 từ mạng con PSC đến tất cả các thực thể trong mạng. Trong môi trường sản xuất, quy tắc tường lửa này chỉ nên giới hạn ở những phiên bản được liên kết với dịch vụ nhà sản xuất cụ thể.
Từ Cloud Shell
gcloud compute network-firewall-policies rules create 2000 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 10.100.100.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
Quy tắc tường lửa sau đây cho phép tất cả lưu lượng truy cập trong mạng con dịch vụ trên các cổng TCP từ 1000 đến 2000. Quy tắc này sẽ được dùng để kiểm thử xem dịch vụ nhà sản xuất của chúng ta có hoạt động phù hợp hay không.
Từ Cloud Shell
gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic within the service subnet" --direction INGRESS --src-ip-ranges 10.0.0.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
Tạo và định cấu hình máy ảo Producer
Tạo máy ảo
Từ Cloud Shell
gcloud compute instances create portmap-vm1 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create portmap-vm2 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create test-client-vm --zone=$zone --subnet=producer-service-subnet --no-address
Trong phần sau, hãy khởi động máy chủ http trên cổng 1000 và 2000 trên mỗi VM Producer.
Định cấu hình máy ảo
Từ Cloud Shell
gcloud compute ssh --zone $zone "portmap-vm1" --tunnel-through-iap --project $project
Trong Cloud Shell từ phiên portmap-vm1
mkdir 1000 cd 1000 echo "portmap-vm1 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm1 2000">index.html sudo python3 -m http.server 2000 &
Mở một cửa sổ Cloud Shell mới
Bắt đầu bằng cách đặt lại các biến. Trong Cloud Shell
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute ssh --zone $zone "portmap-vm2" --tunnel-through-iap --project $project
Trong Cloud Shell từ phiên portmap-vm2
mkdir 1000 cd 1000 echo "portmap-vm2 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm2 2000">index.html sudo python3 -m http.server 2000 &
8. Dịch vụ Nhà sản xuất kiểm thử
Trước tiên, chúng ta cần lấy địa chỉ IP của các phiên bản portmap. Ghi lại cả hai địa chỉ IP này.
Mở một cửa sổ Cloud Shell mới
Bắt đầu bằng cách đặt lại các biến. Trong Cloud Shell
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute instances describe portmap-vm1 \ --format='get(networkInterfaces[0].networkIP)' --zone $zone gcloud compute instances describe portmap-vm2\ --format='get(networkInterfaces[0].networkIP)' --zone $zone
Đăng nhập vào phiên bản thử nghiệm. Trong Cloud Shell
gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project curl [portmap-vm1 IP]:1000
Kết quả đầu ra dự kiến
portmap-vm1 1000
Trong Cloud Shell
curl [portmap-vm1 IP]:2000
Kết quả đầu ra dự kiến
portmap-vm1 2000
Trong Cloud Shell
curl [portmap-vm2 IP]:1000
Kết quả đầu ra dự kiến
portmap-vm2 1000
Trong Cloud Shell
curl [portmap-vm2 IP]:2000
Kết quả đầu ra dự kiến
portmap-vm2 2000
Thoát khỏi test-client-vm
9. Tạo Dịch vụ nhà sản xuất bằng NEG Portmap
Tạo các thành phần của trình cân bằng tải
Từ Cloud Shell
gcloud compute network-endpoint-groups create portmap-neg --region=$region --network=producer-vpc --subnet=producer-service-subnet --network-endpoint-type=GCE_VM_IP_PORTMAP
Thêm điểm cuối vào NEG Portmap để tạo mối liên kết từ cổng ứng dụng đến cổng nhà sản xuất. Nhà sản xuất tạo mối liên kết này và sẽ có phương thức riêng để truyền đạt thông tin này cho người tiêu dùng. Thông tin ánh xạ cổng cụ thể không được chia sẻ thông qua PSC.
Trong Cloud Shell
gcloud compute network-endpoint-groups update portmap-neg --region=$region --add-endpoint=client-destination-port=1001,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=1000 --add-endpoint=client-destination-port=1002,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=2000 --add-endpoint=client-destination-port=1003,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=1000 --add-endpoint=client-destination-port=1004,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=2000
Hoàn tất quá trình tạo trình cân bằng tải.
Trong Cloud Shell
gcloud compute backend-services create portmap-bes --load-balancing-scheme=internal --region=$region --network=producer-vpc gcloud compute backend-services add-backend portmap-bes --network-endpoint-group=portmap-neg --network-endpoint-group-region=$region gcloud compute forwarding-rules create portmap-fr --load-balancing-scheme=INTERNAL --network=producer-vpc --subnet=producer-service-subnet --ports=ALL --region=$region --backend-service=portmap-bes
Tạo tệp đính kèm dịch vụ
Từ Cloud Shell
gcloud compute service-attachments create portmap-service-attachment --region=$region --producer-forwarding-rule=portmap-fr --connection-preference=ACCEPT_AUTOMATIC --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 portmap-service-attachment --region=$region
Ví dụ về kết quả đầu ra dự kiến
connectionPreference: ACCEPT_AUTOMATIC creationTimestamp: '2024-07-19T10:02:29.432-07:00' description: '' enableProxyProtocol: false fingerprint: LI8D6JNQsLA= id: '6207474793859982026' kind: compute#serviceAttachment name: portmap-service-attachment natSubnets: - https://www.googleapis.com/compute/v1/projects/$project/regions/$zone/subnetworks/psc-nat-subnet pscServiceAttachmentId: high: '94288091358954472' low: '6207474793859982026' reconcileConnections: false region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/portmap-service-attachment targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/portmap-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-client-subnet --network consumer-vpc --range=10.0.0.0/24 --region $region --enable-private-ip-google-access
Tạo chính sách tường lửa mạng và quy tắc tường lửa
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
Mạng người dùng chỉ cần có quyền truy cập SSH từ IAP.
11. Tạo máy ảo, điểm cuối PSC và kiểm tra khả năng kết nối
Lúc này, sẽ có 3 cửa sổ Cloud Shell mở ra. Bạn nên có một phiên mở với portmap-vm1. Một phiên phải là phiên đang mở với portmap-vm2 và một phiên phải là phiên đang hoạt động.
Tạo Test VM
Từ Cloud Shell
gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address
Tạo Điểm cuối PSC
Từ Cloud Shell
gcloud compute addresses create psc-endpoint-ip --region=$region --subnet=consumer-client-subnet --addresses 10.0.0.10 gcloud compute forwarding-rules create psc-portmap-endpoint --region=$region --network=consumer-vpc --address=psc-endpoint-ip --target-service-attachment=[SERVICE ATTACHMENT URI]
Kiểm thử khả năng kết nối
Từ Cloud Shell
gcloud compute ssh --zone $zone "consumer-client-vm" --tunnel-through-iap --project $project curl 10.0.0.10:1001
Kết quả đầu ra dự kiến
portmap-vm1 1000
Từ Cloud Shell
curl 10.0.0.10:1002
Kết quả đầu ra dự kiến
portmap-vm1 2000
Từ Cloud Shell
curl 10.0.0.10:1003
Kết quả đầu ra dự kiến
portmap-vm2 1000
Từ Cloud Shell
curl 10.0.0.10:1004
Kết quả đầu ra dự kiến
portmap-vm2 2000
12. Các bước dọn dẹp
Thoát khỏi phiên bản máy ảo (tất cả các cửa sổ)
exit
Xoá các thành phần trong phòng thí nghiệm khỏi một thiết bị đầu cuối Cloud Shell
gcloud compute forwarding-rules delete psc-portmap-endpoint --region=$region -q gcloud compute addresses delete psc-endpoint-ip --region=$region -q gcloud compute instances delete consumer-client-vm --zone=$zone -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 networks subnets delete consumer-client-subnet --region=$region -q gcloud compute networks delete consumer-vpc -q gcloud compute service-attachments delete portmap-service-attachment --region=$region -q gcloud compute forwarding-rules delete portmap-fr --region=$region -q gcloud compute backend-services delete portmap-bes --region=$region -q gcloud compute network-endpoint-groups delete portmap-neg --region=$region -q gcloud compute instances delete test-client-vm --zone=$zone -q gcloud compute instances delete portmap-vm2 --zone=$zone -q gcloud compute instances delete portmap-vm1 --zone=$zone -q gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -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 psc-nat-subnet --region $region -q gcloud compute networks subnets delete producer-service-subnet --region $region -q gcloud compute networks delete producer-vpc -q
13. 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
- Các trường hợp sử dụng tính năng Ánh xạ cổng Private Service Connect
- Các lợi ích chính của tính năng Ánh xạ cổng PSC
- Yêu cầu về mạng
- Tạo dịch vụ nhà sản xuất Private Service Connect bằng cách sử dụng tính năng liên kết cổng.
- Tạo một điểm cuối Private Service Connect
- Thực hiện các lệnh gọi thông qua điểm cuối Kết nối dịch vụ riêng tư đến một dịch vụ nhà sản xuất