Kết nối dịch vụ riêng tư: Di chuyển kết nối VPC ngang hàng sang kết nối dịch vụ riêng tư

1. Giới thiệu

VPC Peering là một phương thức phổ biến để nhà sản xuất cung cấp dịch vụ tiêu thụ cho người dùng. Tuy nhiên, việc sử dụng tính năng kết nối VPC ngang hàng sẽ đi kèm với nhiều điểm phức tạp về định tuyến, chẳng hạn như kết nối VPC ngang hàng không bắc cầu, mức tiêu thụ địa chỉ IP lớn và việc phơi bày quá mức các tài nguyên trong một VPC được kết nối ngang hàng.

Private Service Connect (PSC) là một phương thức kết nối cho phép nhà sản xuất cung cấp dịch vụ thông qua một điểm cuối duy nhất mà người tiêu dùng cung cấp trong VPC của khối lượng công việc. Điều này giúp loại bỏ nhiều vấn đề mà người dùng gặp phải khi sử dụng tính năng kết nối ngang hàng VPC. Mặc dù nhiều dịch vụ mới đang được tạo bằng PSC, nhưng vẫn có nhiều dịch vụ tồn tại dưới dạng dịch vụ VPC Peering.

Google Cloud rất vui mừng giới thiệu lộ trình di chuyển cho các dịch vụ mà bạn đã tạo thông qua VPC Peering để chuyển sang một cấu trúc dựa trên PSC. Khi sử dụng phương thức di chuyển này, địa chỉ IP cho dịch vụ nhà sản xuất được hiển thị thông qua tính năng kết nối ngang hàng VPC sẽ được giữ nguyên cho đến khi có cấu trúc dựa trên PSC, do đó, người dùng chỉ cần thực hiện một số thay đổi tối thiểu. Hãy làm theo lớp học lập trình này để tìm hiểu các bước kỹ thuật cần thực hiện để di chuyển.

LƯU Ý: Đường dẫn di chuyển này chỉ dành cho những dịch vụ mà nhà sản xuất và người tiêu dùng nằm trong cùng một tổ chức Google Cloud. Đối với mọi dịch vụ của Google Cloud hoặc dịch vụ của bên thứ ba sử dụng tính năng kết nối ngang VPC, các dịch vụ này sẽ tận dụng một phương thức di chuyển tương tự, nhưng phương thức này sẽ được tuỳ chỉnh cho chính dịch vụ đó. Vui lòng liên hệ với các bên liên quan để hỏi về phương thức di chuyển cho các loại dịch vụ này.

Kiến thức bạn sẽ học được

  • Cách thiết lập dịch vụ dựa trên tính năng kết nối ngang hàng VPC
  • Cách thiết lập dịch vụ dựa trên PSC
  • Sử dụng Internal-Ranges API để thực hiện quá trình di chuyển mạng con qua VPC Peering nhằm đạt được quá trình di chuyển dịch vụ VPC Peering sang PSC.
  • Tìm hiểu thời điểm cần có thời gian ngừng hoạt động để di chuyển dịch vụ
  • Các bước dọn dẹp sau khi di chuyển

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

Để đơn giản hoá, lớp học lập trình này tập trung tất cả tài nguyên vào một dự án duy nhất. Trong codelab, bạn sẽ thấy những thao tác cần thực hiện ở phía nhà sản xuất và những thao tác cần thực hiện ở phía người dùng trong trường hợp nhà sản xuất và người dùng nằm trong các dự án khác nhau.

Lớp học lập trình này sẽ có 4 trạng thái.

7dbf27cf215f9703.png

Trạng thái 1 là trạng thái VPC Peering. Sẽ có 2 VPC, consumer-vpc và producer-vpc được kết nối với nhau. Producer-vpc sẽ có một dịch vụ Apache đơn giản được hiển thị thông qua một Trình cân bằng tải chuyển tiếp mạng nội bộ. Consumer-vpc sẽ có một consumer-vm duy nhất cho mục đích kiểm thử.

7f64427c0e59d417.png

Trạng thái 2 là trạng thái kiểm thử PSC. Chúng ta sẽ tạo một quy tắc chuyển tiếp mới và sử dụng quy tắc này để liên kết với Service Attachment. Sau đó, chúng ta sẽ tạo một điểm cuối PSC thử nghiệm trong consumer-vpc để kiểm thử xem dịch vụ PSC của chúng ta có hoạt động như dự kiến hay không.

98c324c59c1fbf68.png

Trạng thái 3 là trạng thái di chuyển. Chúng tôi sẽ dành riêng dải mạng con trong producer-vpc nơi dịch vụ dựa trên VPC Peering được triển khai để sử dụng trong consumer-vpc. Sau đó, chúng ta sẽ tạo một điểm cuối PSC mới có cùng địa chỉ IP với quy tắc chuyển tiếp đã có trong producer-vpc.

a64ab7b69132c722.png

Trạng thái 4 là trạng thái PSC cuối cùng. Chúng tôi sẽ dọn dẹp điểm cuối PSC thử nghiệm và xoá VPC kết nối ngang hàng giữa consumer-vpc và producer-vpc.

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

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

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 region=us-central1
export zone=$region-a
echo $projectid
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 networkconnectivity.googleapis.com
gcloud services enable dns.googleapis.com

5. Tạo mạng VPC của nhà sản xuất (Hoạt động 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/28 \
    --region=$region

gcloud compute networks subnets create producer-fr-subnet \
        --network=producer-vpc \
        --range=192.168.0.0/28 \
        --region=$region

Tạo Cloud Router và Cloud NAT cho nhà sản xuất

Từ Cloud Shell

gcloud compute routers create $region-cr \
   --network=producer-vpc \
   --region=$region

gcloud compute routers nats create $region-nat \
    --router=$region-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 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

Chúng ta cũng sẽ tạo thêm 2 quy tắc cho phép các quy trình kiểm tra tình trạng của Bộ cân bằng tải đối với dịch vụ, cũng như cho phép lưu lượng truy cập mạng từ các máy ảo sẽ kết nối từ consumer-vpc.

Từ Cloud Shell

gcloud compute network-firewall-policies rules create 2000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "LB healthchecks" \
    --direction INGRESS \
    --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \
    --layer4-configs tcp:80  \
    --global-firewall-policy


gcloud compute network-firewall-policies rules create 3000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access from consumer-vpc" \
    --direction INGRESS \
    --src-ip-ranges 10.0.1.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

6. Thiết lập dịch vụ nhà sản xuất (Hoạt động của nhà sản xuất)

Chúng ta sẽ tạo một dịch vụ nhà sản xuất với một máy ảo duy nhất chạy máy chủ web Apache. Máy ảo này sẽ được thêm vào một Nhóm thực thể không được quản lý có một Trình cân bằng tải truyền qua mạng nội bộ theo khu vực ở phía trước.

Tạo VM và Nhóm phiên bản không được quản lý

Từ Cloud Shell

gcloud compute instances create producer-service-vm \
    --network producer-vpc \
    --subnet producer-service-subnet \
    --zone $zone \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "I am a Producer Service." | \
    tee /var/www/html/index.html
    systemctl restart apache2'

Từ Cloud Shell

gcloud compute instance-groups unmanaged create prod-uig \
  --zone=$zone

gcloud compute instance-groups unmanaged add-instances prod-uig \
  --zone=$zone \
  --instances=producer-service-vm

Tạo Trình cân bằng tải chuyển tiếp mạng nội bộ theo khu vực

Từ Cloud Shell

gcloud compute health-checks create http producer-hc \
        --region=$region

gcloud compute backend-services create producer-bes \
  --load-balancing-scheme=internal \
  --protocol=tcp \
  --region=$region \
  --health-checks=producer-hc \
  --health-checks-region=$region

gcloud compute backend-services add-backend producer-bes \
  --region=$region \
  --instance-group=prod-uig \
  --instance-group-zone=$zone

gcloud compute addresses create producer-fr-ip\
  --region $region \
  --subnet producer-fr-subnet \
  --addresses 192.168.0.2

gcloud compute forwarding-rules create producer-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-fr-subnet \
  --address=producer-fr-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

7. Tạo mạng VPC của người tiêu dùng (Hoạt động 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-vm-subnet \
    --network=consumer-vpc \
    --range=10.0.1.0/28 \
    --region=$region

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

8. Tạo VPC ngang hàng

Hoạt động của nhà sản xuất

Từ Cloud Shell

gcloud compute networks peerings create producer-vpc-peering \
    --network=producer-vpc \
    --peer-project=$projectid \
    --peer-network=consumer-vpc

Hoạt động của người tiêu dùng

Từ Cloud Shell

gcloud compute networks peerings create consumer-vpc-peering \
    --network=consumer-vpc \
    --peer-project=$projectid \
    --peer-network=producer-vpc

Xác nhận rằng quá trình thiết lập kết nối ngang hàng đã hoàn tất bằng cách kiểm tra danh sách các tuyến đường trong consumer-vpc. Bạn sẽ thấy các tuyến cho cả consumer-vpc và producer-vpc.

Hoạt động của người tiêu dùng

Từ Cloud Shell

gcloud compute routes list --filter="network=consumer-vpc"

Kết quả đầu ra dự kiến

NAME: default-route-49dda7094977e231
NETWORK: consumer-vpc
DEST_RANGE: 0.0.0.0/0
NEXT_HOP: default-internet-gateway
PRIORITY: 1000

NAME: default-route-r-10d65e16cc6278b2
NETWORK: consumer-vpc
DEST_RANGE: 10.0.1.0/28
NEXT_HOP: consumer-vpc
PRIORITY: 0

NAME: peering-route-496d0732b4f11cea
NETWORK: consumer-vpc
DEST_RANGE: 192.168.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

NAME: peering-route-b4f9d3acc4c08d55
NETWORK: consumer-vpc
DEST_RANGE: 10.0.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

9. Tạo vùng DNS (Hoạt động của người tiêu dùng)

Chúng ta sẽ tạo một Vùng DNS riêng của Cloud DNS để gọi dịch vụ nhà sản xuất thông qua DNS thay vì thông qua địa chỉ IP riêng để minh hoạ một ví dụ thực tế hơn.

Chúng ta sẽ thêm một bản ghi A vào dịch vụ trỏ miền example.com. service.example.com đến địa chỉ IP của Quy tắc chuyển tiếp Bộ cân bằng tải truyền qua mạng mà chúng ta đã tạo trước đó. Địa chỉ IP của Quy tắc chuyển tiếp đó là 192.168.0.2.

Từ Cloud Shell

gcloud dns managed-zones create "producer-service" \
   --dns-name=example.com \
   --description="producer service dns" \
   --visibility=private \
   --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="producer-service"

gcloud dns record-sets transaction add 192.168.0.2 \
   --name=service.example.com \
   --ttl=300 \
   --type=A \
   --zone="producer-service"

gcloud dns record-sets transaction execute \
   --zone="producer-service"

10. Kiểm thử dịch vụ nhà sản xuất qua VPC ngang hàng (Hoạt động của người tiêu dùng)

Đến đây, cấu trúc Trạng thái 1 đã được tạo.

Tạo máy ảo ứng dụng khách

Từ Cloud Shell

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

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

Từ VM của ứng dụng khách

curl service.example.com

Kết quả đầu ra dự kiến

I am a Producer Service. 

Từ VM của ứng dụng khách

exit

11. Chuẩn bị dịch vụ cho Private Service Connect (Hoạt động của nhà sản xuất)

Giờ đây, sau khi hoàn tất tất cả các bước thiết lập ban đầu, chúng ta sẽ bắt đầu chuẩn bị dịch vụ được kết nối VPC để di chuyển sang Private Service Connect. Trong phần này, chúng ta sẽ thay đổi producer-vpc bằng cách định cấu hình dịch vụ để được hiển thị thông qua một Tệp đính kèm dịch vụ. Chúng ta cần tạo một mạng con mới và một quy tắc chuyển tiếp mới trong mạng con đó để có thể di chuyển mạng con hiện có sang consumer-vpc nhằm giữ nguyên địa chỉ IP hiện có của dịch vụ.

Tạo mạng con nơi sẽ lưu trữ IP quy tắc chuyển tiếp của bộ cân bằng tải mới.

Từ Cloud Shell

gcloud compute networks subnets create producer-psc-fr-subnet \
    --network=producer-vpc \
    --range=10.0.2.64/28 \
    --region=$region

Tạo địa chỉ IP nội bộ cho quy tắc chuyển tiếp của trình cân bằng tải.

Từ Cloud Shell

gcloud compute addresses create producer-psc-ip \
  --region $region \
  --subnet producer-psc-fr-subnet \
  --addresses 10.0.2.66

Tạo quy tắc chuyển tiếp của bộ cân bằng tải mới. Quy tắc này được định cấu hình để sử dụng cùng một dịch vụ phụ trợ và các quy trình kiểm tra tình trạng mà chúng ta đã định cấu hình trước đó.

Từ Cloud Shell

gcloud compute forwarding-rules create psc-service-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-psc-fr-subnet \
  --address=producer-psc-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

psc-nat-subnet 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ừ Cloud Shell

gcloud compute networks subnets create psc-nat-subnet \
    --network=producer-vpc \
    --range=10.100.100.0/28 \
    --region=$region \
    --purpose=PRIVATE_SERVICE_CONNECT

Chúng ta phải thêm một quy tắc tường lửa khác vào Chính sách tường lửa mạng để cho phép lưu lượng truy cập từ psc-nat-subnet. Khi truy cập vào dịch vụ thông qua PSC, psc-nat-subnet là nơi lưu lượng truy cập sẽ được lấy nguồn.

Từ Cloud Shell

gcloud compute network-firewall-policies rules create 2001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow PSC NAT subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.100.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

Tạo tệp đính kèm dịch vụ 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 phần tiếp theo.

Từ Cloud Shell

gcloud compute service-attachments create producer-sa \
    --region=$region \
    --producer-forwarding-rule=psc-service-fr  \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$projectid=5 \
    --nat-subnets=psc-nat-subnet

Từ Cloud Shell

gcloud compute service-attachments describe producer-sa --region=$region

Kết quả mẫu

connectionPreference: ACCEPT_MANUAL
consumerAcceptLists:
- connectionLimit: 5
  projectIdOrNum: $projectid
creationTimestamp: '2025-04-24T11:23:09.886-07:00'
description: ''
enableProxyProtocol: false
fingerprint: xxx
id: 'xxx'
kind: compute#serviceAttachment
name: producer-sa
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxx'
  low: 'xxx'
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/producer-sa
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/forwardingRules/psc-service-fr

12. Kết nối "thử nghiệm" Điểm cuối PSC của người tiêu dùng với Dịch vụ nhà sản xuất và Thử nghiệm (Hoạt động của người tiêu dùng)

Giờ đây, cấu trúc này ở Trạng thái 2.

Tại thời điểm này, dịch vụ nhà sản xuất hiện có được hiển thị qua VPC Peering vẫn đang hoạt động và hoạt động bình thường trong trường hợp Sản xuất. Chúng tôi sẽ tạo một điểm cuối PSC "thử nghiệm" để đảm bảo rằng Service Attachment được hiển thị đang hoạt động đúng cách trước khi chúng tôi bắt đầu khoảng thời gian ngừng hoạt động để di chuyển mạng con VPC Peering hiện tại sang VPC của người dùng. Khả năng kết nối ở trạng thái cuối cùng sẽ là một điểm cuối PSC có cùng địa chỉ IP với quy tắc chuyển tiếp hiện tại cho dịch vụ dựa trên VPC Peering.

Tạo điểm cuối PSC

Từ Cloud Shell

gcloud compute addresses create test-psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-vm-subnet \
    --addresses 10.0.1.3

Dịch vụ đích bên dưới sẽ là URI của Service Attachment mà bạn đã ghi lại ở bước cuối cùng.

Từ Cloud Shell

gcloud compute forwarding-rules create test-psc-endpoint \
  --region=$region \
  --network=consumer-vpc \
  --address=test-psc-endpoint-ip \
  --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

Kiểm thử Điểm cuối PSC "kiểm thử"

Từ Cloud Shell

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

Từ consumer-client

curl 10.0.1.3

Kết quả đầu ra dự kiến

I am a Producer Service. 

Từ consumer-client

exit

13. Di chuyển mạng con của quy tắc chuyển tiếp hiện có của nhà sản xuất

Việc thực hiện các bước này sẽ khiến dịch vụ Producer dựa trên VPC Peering trực tiếp bị ngừng hoạt động. Giờ đây, chúng ta sẽ di chuyển mạng con của quy tắc chuyển tiếp từ producer-vpc sang consumer-vpc bằng Internal Ranges API. Thao tác này sẽ khoá mạng con để không được sử dụng trong khoảng thời gian tạm thời khi chúng tôi xoá mạng con trong producer-vpc và chỉ định mạng con đó chỉ cho mục đích di chuyển để tạo trong consumer-vpc.

API phạm vi nội bộ yêu cầu bạn đặt trước mạng con quy tắc chuyển tiếp kết nối ngang hàng VPC hiện có (producer-fr-subnet, 192.168.0.0/28) và chỉ định tên mạng con mục tiêu trong consumer-vpc (consumer-psc-subnet). Chúng ta sẽ tạo một mạng con mới trong consumer-vpc có tên này qua vài bước.

Dành riêng mạng con producer-fr cho quá trình di chuyển

Hoạt động của nhà sản xuất

Từ Cloud Shell

gcloud network-connectivity internal-ranges create producer-peering-internal-range \
    --ip-cidr-range=192.168.0.0/28 \
    --network=producer-vpc \
    --usage=FOR_MIGRATION \
    --migration-source=projects/$projectid/regions/$region/subnetworks/producer-fr-subnet \
    --migration-target=projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

Chạy lệnh mô tả trên internal-range mà chúng ta đã tạo để xem trạng thái của mạng con.

Hoạt động của nhà sản xuất

Từ Cloud Shell

gcloud network-connectivity internal-ranges describe producer-peering-internal-range

Kết quả mẫu

createTime: '2025-04-24T19:26:10.589343291Z'
ipCidrRange: 192.168.0.0/28
migration:
  source: projects/$projectid/regions/$region/subnetworks/producer-fr-subnet
  target: projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet
name: projects/$projectid/locations/global/internalRanges/producer-peering-internal-range
network: https://www.googleapis.com/compute/v1/projects/$project/global/networks/producer-vpc
peering: FOR_SELF
updateTime: '2025-04-24T19:26:11.521960016Z'
usage: FOR_MIGRATION

Xoá Quy tắc chuyển tiếp và Mạng con dựa trên VPC Peering

Hoạt động của nhà sản xuất

Từ Cloud Shell

gcloud compute forwarding-rules delete producer-fr --region=$region

gcloud compute addresses delete producer-fr-ip --region=$region

gcloud compute networks subnets delete producer-fr-subnet --region=$region

Di chuyển mạng con

Di chuyển mạng con sang consumer-vpc bằng cách tạo một mạng con mới bằng internal-range mà chúng ta đã tạo trước đó. Tên của mạng con này phải giống với tên mà chúng ta đã nhắm đến trước đó (consumer-psc-subnet). Mục đích cụ thể của PEER_MIGRATION là ghi chú rằng mạng con được dành riêng cho việc di chuyển mạng con giữa các VPC ngang hàng. Với cờ mục đích này, mạng con này chỉ có thể chứa các địa chỉ IP tĩnh được đặt trước và các điểm cuối PSC.

Hoạt động của người tiêu dùng

Từ Cloud Shell

gcloud compute networks subnets create consumer-psc-subnet \
  --purpose=PEER_MIGRATION \
  --network=consumer-vpc \
  --range=192.168.0.0/28 \
  --region=$region

14. Tạo điểm cuối PSC trạng thái kết thúc (Hoạt động của người tiêu dùng)

Tại thời điểm này, dịch vụ Producer vẫn ngừng hoạt động. Mạng con mà chúng ta vừa tạo vẫn bị khoá và chỉ có thể dùng cho mục đích di chuyển cụ thể. Bạn có thể kiểm thử bằng cách cố gắng tạo một VM trong mạng con này. Không tạo được máy ảo.

Từ Cloud Shell

gcloud compute instances create test-consumer-vm \
    --zone=$zone \
    --subnet=consumer-psc-subnet \
    --no-address

Kết quả đầu ra dự kiến

ERROR: (gcloud.compute.instances.create) Could not fetch resource:
 - Subnetwork must have purpose=PRIVATE.

Chúng ta chỉ có thể sử dụng mạng con này để tạo một điểm cuối PSC. Xin lưu ý rằng địa chỉ IP mà chúng tôi tạo sử dụng cùng một IP với quy tắc chuyển tiếp mà dịch vụ nhà sản xuất của chúng tôi đã sử dụng qua VPC Peer.

Từ Cloud Shell

gcloud compute addresses create psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-psc-subnet \
    --addresses 192.168.0.2

Một lần nữa, bạn phải sử dụng cùng một URI Đính kèm dịch vụ mà bạn đã ghi chú trước đó và cũng được dùng để tạo Điểm cuối PSC "test".

Từ Cloud Shell

gcloud compute forwarding-rules create psc-endpoint \
    --region=$region \
    --network=consumer-vpc \
    --address=psc-endpoint-ip \
    --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/producer-sa

15. Kiểm thử Điểm cuối PSC trạng thái kết thúc (Hoạt động của người tiêu dùng)

Tại thời điểm này, bạn đang ở cấu trúc State 3.

Từ Cloud Shell

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

Từ VM của ứng dụng khách

curl service.example.com

Kết quả đầu ra dự kiến

I am a Producer Service. 

Từ VM của ứng dụng khách

exit

Tại thời điểm này, sự cố ngừng dịch vụ đã kết thúc và dịch vụ đã hoạt động trở lại. Xin lưu ý rằng chúng tôi không phải thực hiện bất kỳ thay đổi nào đối với DNS hiện có. Bạn không cần thực hiện thay đổi nào đối với ứng dụng phía người dùng. Các ứng dụng chỉ cần tiếp tục hoạt động đối với dịch vụ đã di chuyển.

16. Dọn dẹp sau khi di chuyển

Để hoàn tất quá trình di chuyển, chúng ta cần thực hiện một số bước dọn dẹp. Chúng ta phải xoá và mở khoá các tài nguyên.

Mở khoá mạng con Internal Range

Thao tác này sẽ mở khoá mạng con đã di chuyển để bạn có thể thay đổi mục đích của mạng con đó từ "PEER_MIGRATION" thành "PRIVATE".

Hoạt động của nhà sản xuất

Từ Cloud Shell

gcloud network-connectivity internal-ranges delete producer-peering-internal-range

Hoạt động của người tiêu dùng

Từ Cloud Shell

gcloud compute networks subnets update consumer-psc-subnet \
    --region=$region \
    --purpose=PRIVATE

gcloud compute networks subnets describe consumer-psc-subnet --region=$region

Kết quả mẫu

creationTimestamp: '2025-04-24T12:29:33.883-07:00'
fingerprint: xxx
gatewayAddress: 192.168.0.1
id: 'xxx'
ipCidrRange: 192.168.0.0/28
kind: compute#subnetwork
name: consumer-psc-subnet
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
privateIpGoogleAccess: false
privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS
purpose: PRIVATE
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

Xoá VPC ngang hàng

Hoạt động của nhà sản xuất

Từ Cloud Shell

gcloud compute networks peerings delete producer-vpc-peering \
    --network=producer-vpc

Hoạt động của người tiêu dùng

Từ Cloud Shell

gcloud compute networks peerings delete consumer-vpc-peering \
        --network=consumer-vpc

Xoá Điểm cuối PSC "thử nghiệm"

Consumer-Activity

Từ Cloud Shell

gcloud compute forwarding-rules delete test-psc-endpoint --region=$region
gcloud compute addresses delete test-psc-endpoint-ip --region=$region

17. Kiểm thử cuối cùng sau khi dọn dẹp quá trình di chuyển (Hoạt động của người tiêu dùng)

Tại thời điểm này, bạn đã đạt được cấu trúc Trạng thái 4 (trạng thái cuối cùng).

Kiểm tra lại khả năng kết nối của Điểm cuối PSC để đảm bảo không có tác động tiêu cực nào từ việc dọn dẹp sau khi di chuyển.

Từ Cloud Shell

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

Từ VM của ứng dụng khách

curl service.example.com

Kết quả đầu ra dự kiến

I am a Producer Service. 

Từ VM của ứng dụng khách

exit

THÀNH CÔNG!

18. Các bước dọn dẹp

Từ Cloud Shell

gcloud compute forwarding-rules delete psc-endpoint --region=$region -q

gcloud compute addresses delete psc-endpoint-ip --region=$region -q

gcloud compute instances delete consumer-client --zone=$zone --project=$projectid -q

gcloud dns record-sets delete service.example.com --zone="producer-service" --type=A -q

gcloud dns managed-zones delete "producer-service" -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-psc-subnet --region=$region -q

gcloud compute networks subnets delete consumer-vm-subnet --region=$region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute service-attachments delete producer-sa --region=$region -q

gcloud compute forwarding-rules delete psc-service-fr --region=$region -q

gcloud compute addresses delete producer-psc-ip --region=$region -q

gcloud compute backend-services delete producer-bes --region=$region -q

gcloud compute health-checks delete producer-hc --region=$region -q

gcloud compute instance-groups unmanaged delete prod-uig --zone=$zone -q

gcloud compute instances delete producer-service-vm --zone=$zone --project=$projectid -q

gcloud compute network-firewall-policies rules delete 3000 --firewall-policy producer-vpc-policy --global-firewall-policy -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 routers nats delete $region-nat --router=$region-cr --region=$region -q

gcloud compute routers delete $region-cr --region=$region -q

gcloud compute networks subnets delete psc-nat-subnet --region=$region -q

gcloud compute networks subnets delete producer-psc-fr-subnet --region=$region -q

gcloud compute networks subnets delete producer-service-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

  • Cách thiết lập dịch vụ dựa trên tính năng kết nối ngang hàng VPC
  • Cách thiết lập dịch vụ dựa trên PSC
  • Sử dụng Internal-Ranges API để thực hiện quá trình di chuyển mạng con qua VPC Peering nhằm đạt được quá trình di chuyển dịch vụ VPC Peering sang PSC.
  • Tìm hiểu thời điểm cần có thời gian ngừng hoạt động để di chuyển dịch vụ
  • Các bước dọn dẹp sau khi di chuyển