Á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ể 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

ad37cfc003475b7c.png

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

  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ị 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.
  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 đá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:

55efc1aaa7a4d3ad.png

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:

7ffe5cbb04455448.png

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