Ánh xạ cổng kết nối dịch vụ riêng tư cho nhà sản xuất dịch vụ

1. Giới thiệu

Với Private Service Connect, nhà sản xuất dịch vụ có thể hiển thị các dịch vụ trong môi trường VPC thông qua Tệp đính kèm dịch vụ 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 điểm cuối Private Service Connect. Đôi khi, các dịch vụ nhà sản xuất này được thiết kế dưới dạng cụm máy ảo, trong đó mỗi máy ảo hiển thị 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 triển khai nhiều điểm cuối Private Service Connect ở phía người dùng 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 máy ảo nhà sản xuất.

Private Service Connect hiện có thể nhắm đến đích đến chính xác ngay từ đầu bằng cách sử dụng tính năng Liên kết cổng. Trong lớp học này, bạn sẽ tìm hiểu về các trường hợp sử dụng cần có tính năng này và cách triển khai NEG ánh xạ cổng vào một khối lượng công việc 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
  • 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 ánh xạ cổng.
  • Tạo điểm cuối Private Service Connect
  • Thực hiện lệnh gọi thông qua điểm cuối Private Service Connect đến dịch vụ nhà sản xuất

Bạn cần có

  • Dự á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 NEG Ánh xạ cổng (Nhóm điểm cuối mạ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 Liên kết cổng là nhà sản xuất cơ sở dữ liệu NoSQL và nhà sản xuất Kafka. Tuy nhiên, bất kỳ nhà sản xuất nào yêu cầu một cụm máy ảo hiển thị cùng một dịch vụ trên các cổng giống nhau với các yêu cầu liên kết máy ảo cụ thể đều có thể sử dụng tính năng này.

Trình tạo xác định mối liên kết giữa cổng ứng dụng và máy ảo trình tạo + 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. Bên tiêu thụ sử dụng các cổng được xác định trước để xác định duy nhất máy ảo nhà sản xuất + cổng đích mà họ cần kết nối. Cổng mà trình tiêu thụ sử dụng là một cổng khác mà trình tạo sử dụng.

Các 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 ánh xạ cổng và người dùng triển khai đ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 của máy ảo nhà sản xuất. Mức giá này giống với các loại triển khai PSC khác
  • Hiệu suất cao: Tính năng liên kết cổng cung cấp cùng tốc độ truyền tải theo tốc độ đường truyền và độ trễ thấp như các chế độ PSC khác
  • Có thể mở rộng và sử dụng IP hiệu quả: Một địa chỉ IP từ VPC của người dùng có thể truy cập vào tối đa 1.000 máy ảo của nhà sản xuất và 1.000 mối liên kết cổng

3. Yêu cầu về mạng

  • Tính năng Ánh xạ cổng yêu cầu 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 Liên kết cổng (không phải Phần phụ trợ PSC hoặc Giao diện PSC).
  • NEG liên kết cổng là các cấu trúc theo khu vực.
  • Bạn chỉ có thể sử dụng NEG liên kết cổng trên kết nối PSC. Các quy tắc này sẽ không hoạt động nếu máy ảo ứng dụng gọi trực tiếp quy tắc chuyển tiếp của trình cân bằng tải của nhà sản xuất. Điều này được thể hiện trong cách kiểm thử dịch vụ nhà sản xuất 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 của lớp học lập trình

ad37cfc003475b7c.png

Trong VPC của nhà sản xuất, hệ thống sẽ tạo 2 máy ảo, mỗi máy chạy 2 máy chủ web, một máy chạy trên cổng 1000 và một máy chạy trên cổng 2000. Chúng ta sẽ kiểm thử từng dịch vụ trước khi thiết lập Portmap NEG, Trình cân bằng tải truyền qua mạng nội bộ và Tệp đính kèm dịch vụ.

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 thử khả năng kết nối với dịch vụ của nhà sản xuất từ một máy ảo khách.

5. 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

  1. Đă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.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 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 luôn có thể cập nhật thông tin này.
  • 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 thông tin này sau bước này và thông tin này sẽ được giữ nguyên trong suốt thời gian diễn ra 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.
  1. 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:

55efc1aaa7a4d3ad.png

Quá trình cấp phép và kết nối với môi trường sẽ chỉ mất vài phút. Khi hoàn tất, bạn sẽ thấy như sau:

7ffe5cbb04455448.png

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ả.

6. Trước khi bắt đầu

Bật API

Trong Cloud Shell, hãy đảm bảo 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

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-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 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ỡ mạng con này cho 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ề 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 mạng và Quy tắc tường lửa

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

Quy tắc tường lửa sau đây cho phép lưu lượng truy cập trên cổng TCP 1000-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 ở các thực thể liên kết với dịch vụ nhà sản xuất cụ thể.

Trong 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ổng TCP 1000-2000. Quy tắc này sẽ được dùng để kiểm tra xem dịch vụ nhà sản xuất của chúng ta có hoạt động đúng cách hay không.

Trong 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 của nhà sản xuất

Tạo máy ảo

Trong 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 máy ảo Nhà sản xuất.

Định cấu hình máy ảo

Trong 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 thực thể bản đồ cổng. 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 thực thể kiểm thử. Trong Cloud Shell

gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project

curl [portmap-vm1 IP]:1000

Kết quả dự kiến

portmap-vm1 1000

Trong Cloud Shell

curl [portmap-vm1 IP]:2000

Kết quả dự kiến

portmap-vm1 2000

Trong Cloud Shell

curl [portmap-vm2 IP]:1000

Kết quả dự kiến

portmap-vm2 1000

Trong Cloud Shell

curl [portmap-vm2 IP]:2000

Kết quả 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 Portmap NEG

Tạo thành phần Trình cân bằng tải

Trong 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 các điểm cuối vào Portmap NEG để tạo mối liên kết từ cổng ứng dụng khách đến cổng nhà sản xuất. Phương thức 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 phương thức tiêu thụ. Việc á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 việc xây dựng 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ụ

Trong 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 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 dành cho 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-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

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

Mạng người dùng chỉ cần quyền truy cập SSH từ IAP.

11. Tạo máy ảo, Điểm cuối PSC và Kiểm thử khả năng kết nối

Lúc này, bạn sẽ thấy 3 cửa sổ Cloud Shell đang mở. Bạn phải có một phiên đang mở với portmap-vm1. Một phiên sẽ mở với portmap-vm2 và một phiên sẽ là phiên đang hoạt động.

Tạo Máy ảo thử nghiệm

Trong Cloud Shell

gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address

Tạo Điểm cuối PSC

Trong 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

Trong Cloud Shell

gcloud compute ssh --zone $zone "consumer-client-vm" --tunnel-through-iap --project $project

curl 10.0.0.10:1001

Kết quả dự kiến

portmap-vm1 1000

Trong Cloud Shell

curl 10.0.0.10:1002

Kết quả dự kiến

portmap-vm1 2000

Trong Cloud Shell

curl 10.0.0.10:1003

Kết quả dự kiến

portmap-vm2 1000

Trong Cloud Shell

curl 10.0.0.10:1004

Kết quả 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ửa sổ)

exit

Xoá các thành phần của lớp học từ 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
  • 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 ánh xạ cổng.
  • Tạo điểm cuối Private Service Connect
  • Thực hiện lệnh gọi thông qua điểm cuối Private Service Connect đến dịch vụ nhà sản xuất