1. Giới thiệu
Giao diện Private Service Connect là một tài nguyên cho phép mạng Đám mây riêng ảo (VPC) của nhà sản xuất bắt đầu kết nối với nhiều đích đến trong mạng VPC của người dùng. Mạng nhà sản xuất và mạng người tiêu dùng có thể nằm trong các dự án và tổ chức khác nhau.
Nếu một tệp đính kèm mạng chấp nhận kết nối từ một giao diện Kết nối dịch vụ riêng tư, thì Google Cloud sẽ phân bổ cho giao diện đó một địa chỉ IP từ mạng con của người dùng do tệp đính kèm mạng chỉ định. Các mạng lưới người tiêu dùng và nhà sản xuất được kết nối và có thể giao tiếp bằng cách sử dụng địa chỉ IP nội bộ.
Mối kết nối giữa một tệp đính kèm mạng và một giao diện Private Service Connect tương tự như mối kết nối giữa một điểm cuối Private Service Connect và một tệp đính kèm dịch vụ, nhưng có 2 điểm khác biệt chính:
- Tệp đính kèm mạng cho phép mạng nhà sản xuất bắt đầu kết nối với mạng người tiêu dùng (đầu ra của dịch vụ được quản lý), trong khi điểm cuối cho phép mạng người tiêu dùng bắt đầu kết nối với mạng nhà sản xuất (đầu vào của dịch vụ được quản lý).
- Kết nối giao diện Private Service Connect là kết nối bắc cầu. Điều này có nghĩa là mạng nhà sản xuất có thể giao tiếp với các mạng khác được kết nối với mạng người tiêu dùng.
Hình:1
Những điểm cần lưu ý về khả năng tiếp cận PSC-Interface của Vertex AI
- Vertex AI PSC-Interface có khả năng định tuyến lưu lượng truy cập đến các đích đến trong một VPC hoặc tại chỗ trong khối địa chỉ RFC1918.
- PSC-Interface nhắm đến các khối địa chỉ không phải RFC-1918, yêu cầu một proxy rõ ràng được triển khai trong VPC của người dùng có địa chỉ RFC-1918. Trong quá trình triển khai Vertex AI, bạn phải xác định proxy cùng với FQDN của điểm cuối mục tiêu. Xem hình 1 minh hoạ chế độ proxy rõ ràng Secure Web Proxy (SWP) được định cấu hình trong VPC của người dùng để tạo điều kiện định tuyến đến các CIDR không phải RFC-1918 sau đây:
- 240.0.0.0/4
- 203.0.113.0/24
- 10.10.20.0/28 không cần proxy, nằm trong dải RFC-1918.
- Lưu lượng ra Internet
Kết nối Internet cho Mạng người thuê nhà do Google quản lý:
Vertex AI PSC-Interface không có VPC-SC
- Khi bạn chỉ định cấu hình triển khai bằng Giao diện PSC, cấu hình đó sẽ giữ lại quyền truy cập Internet mặc định. Lưu lượng truy cập đi ra này sẽ thoát trực tiếp từ mạng lưới người thuê do Google quản lý.
Vertex AI PSC-Interface với VPC-SC
- Khi dự án của bạn nằm trong ranh giới VPC Service Controls, quyền truy cập Internet mặc định của đối tượng thuê do Google quản lý sẽ bị ranh giới này chặn để ngăn chặn việc đánh cắp dữ liệu.
- Để cho phép hoạt động triển khai truy cập vào Internet công cộng trong trường hợp này, bạn phải định cấu hình rõ ràng một đường dẫn đi ra an toàn để định tuyến lưu lượng truy cập thông qua VPC được kết nối với Vertex AI. Triển khai một Máy chủ proxy bên trong mạng VPC có địa chỉ RFC 1918, kết hợp với một cổng Cloud NAT là một cách để đạt được điều này. Xin lưu ý rằng bạn cũng có thể sử dụng Secure Web Proxy để chuyển tiếp lưu lượng truy cập đến Internet. Việc tạo Proxy web an toàn sẽ tự động tạo một cổng Cloud NAT.
Để biết thêm thông tin, hãy tham khảo các tài nguyên sau:
Thiết lập giao diện Private Service Connect cho các tài nguyên Vertex AI | Google Cloud
Sản phẩm bạn sẽ tạo ra
Trong hướng dẫn này, bạn sẽ tạo một quy trình triển khai Vertex AI Pipelines toàn diện có Giao diện Private Service Connect (PSC) để cho phép khả năng kết nối từ nhà sản xuất đến tài nguyên điện toán của người tiêu dùng như minh hoạ trong Hình 1 nhắm đến điểm cuối không phải RFC 1918 trong class-e-subnet.
Hình 2
Bạn sẽ tạo một psc-network-attachment duy nhất trong VPC của người tiêu dùng bằng cách tận dụng tính năng kết nối ngang hàng DNS để phân giải các máy ảo của người tiêu dùng trong dự án thuê bao lưu trữ Vertex AI Training, dẫn đến các trường hợp sử dụng sau:
Triển khai Vertex AI Pipelines và định cấu hình Secure Web Proxy ở chế độ proxy rõ ràng, cho phép proxy này thực hiện wget đối với một VM trong mạng con Lớp E.
Kiến thức bạn sẽ học được
- Cách tạo thiết bị lưu trữ mạng
- Cách nhà sản xuất có thể sử dụng tệp đính kèm mạng để tạo giao diện PSC
- Cách thiết lập tính năng Kết nối ngang hàng DNS để phân giải các miền riêng tư được định cấu hình trong Mạng VPC của người dùng từ Mạng VPC do Google quản lý
- Cách chuyển tiếp lưu lượng truy cập từ Giao diện PSC của Vertex AI đến Secure Web Proxy
- Cách thiết lập giao tiếp với không gian địa chỉ IP không phải RFC-1918 từ Vertex AI Pipelines
Bạn cần có
Dự án trên Google Cloud
Quyền IAM
- Quản trị viên mạng máy tính (roles/compute.networkAdmin)
- Quản trị viên thực thể Compute (roles/compute.instanceAdmin)
- Quản trị viên bảo mật điện toán (roles/compute.securityAdmin)
- Quản trị viên chính sách bảo mật(roles/compute.orgSecurityPolicyAdmin)
- Quản trị viên DNS (roles/dns.admin)
- Người dùng đường hầm được bảo mật bằng IAP (roles/iap.tunnelResourceAccessor)
- Quản trị viên ghi nhật ký (roles/logging.admin)
- Quản trị viên Notebook (roles/notebooks.admin)
- Quản trị viên IAM dự án (roles/resourcemanager.projectIamAdmin)
- Quản trị viên tài khoản dịch vụ (roles/iam.serviceAccountAdmin)
- Người dùng tài khoản dịch vụ (roles/iam.serviceAccountUser)
- Quản trị viên sử dụng dịch vụ (roles/serviceusage.serviceUsageAdmin)
2. Trước khi bắt đầu
Cập nhật dự án để hỗ trợ hướng dẫn
Hướng dẫn này sử dụng $variables để hỗ trợ việc triển khai cấu hình gcloud trong Cloud Shell.
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
projectid=YOUR-PROJECT-ID
echo $projectid
Bật API
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud services enable "compute.googleapis.com"
gcloud services enable "aiplatform.googleapis.com"
gcloud services enable "dns.googleapis.com"
gcloud services enable "notebooks.googleapis.com"
gcloud services enable "storage.googleapis.com"
gcloud services enable "cloudresourcemanager.googleapis.com"
gcloud services enable "artifactregistry.googleapis.com"
gcloud services enable "cloudbuild.googleapis.com"
gcloud services enable "networkservices.googleapis.com"
gcloud services enable "networksecurity.googleapis.com"
gcloud services enable "certificatemanager.googleapis.com"
3. Thiết lập người tiêu dùng
Tạo VPC người tiêu dùng
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom
Tạo mạng con của người tiêu dùng
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud compute networks subnets create class-e-subnet --project=$projectid --range=240.0.0.0/4 --network=consumer-vpc --region=us-central1
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud compute networks subnets create rfc1918-subnet1 --project=$projectid --range=10.10.10.0/28 --network=consumer-vpc --region=us-central1 --enable-private-ip-google-access
Tạo mạng con chỉ dành cho proxy
gcloud compute networks subnets create proxy-only-uscentral1 \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=us-central1 \
--network=consumer-vpc \
--range=10.10.100.0/26
Tạo mạng con Đính kèm mạng Kết nối dịch vụ riêng tư
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud compute networks subnets create intf-subnet \
--project=$projectid \
--range=192.168.10.0/28 \
--network=consumer-vpc \
--region=us-central1 \
--enable-private-ip-google-access
Cấu hình Cloud Router và NAT
Proxy web an toàn của Google Cloud tự động cấp phép và quản lý một cổng Cloud NAT và một Cloud Router được liên kết trong khu vực nơi cổng này được triển khai.
4. Bật IAP
Để cho phép IAP (proxy nhận biết danh tính) 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 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.
Trong Cloud Shell, hãy tạo quy tắc tường lửa IAP.
gcloud compute firewall-rules create ssh-iap-consumer \
--network consumer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
5. Tạo phiên bản máy ảo cho người tiêu dùng
Trong Cloud Shell, hãy tạo thực thể máy ảo người dùng, class-e-vm.
gcloud compute instances create class-e-vm \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--shielded-secure-boot \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=class-e-subnet \
--private-network-ip=240.0.0.2
6. Secure Web Proxy
Chế độ rõ ràng của Secure Web Proxy (hoặc Chế độ định tuyến proxy rõ ràng) là một phương thức triển khai mà các khối lượng công việc của máy khách phải được định cấu hình rõ ràng để sử dụng địa chỉ IP nội bộ hoặc Tên miền đủ điều kiện và cổng của SWP làm proxy chuyển tiếp.
Trong các bước bên dưới, hãy nhớ sửa đổi YOUR-PROJECT-ID thành mã dự án của bạn
Tạo một proxy web:
Trong Cloud Shell, hãy tạo tệp policy.yaml bằng trình chỉnh sửa văn bản:
cat > policy.yaml << EOF
description: basic Secure Web Proxy policy
name: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/policy1
EOF
Trong Cloud Shell, hãy tạo chính sách Secure Web Proxy:
gcloud network-security gateway-security-policies import policy1 \
--source=policy.yaml \
--location=us-central1
Trong phần sau, hãy tạo một quy tắc để cho phép truy cập vào class-e-vm dựa trên máy chủ lưu trữ sessionMatcher.
Trong Cloud Shell, hãy tạo tệp rule1.yaml bằng trình chỉnh sửa văn bản:
cat > rule1.yaml << EOF
name: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/policy1/rules/allow-nonrfc-classe
description: Allow nonrfc class-e
enabled: true
priority: 1
basicProfile: ALLOW
sessionMatcher: host() == 'class-e-vm.demo.com'
EOF
Trong phần sau, hãy tạo một quy tắc để cho phép sổ tay Jupyter truy cập nhằm cho phép cài đặt apache2 trên VM "class-e".
Trong Cloud Shell, hãy tạo tệp rule2.yaml bằng trình chỉnh sửa văn bản:
cat > rule2.yaml << EOF
name: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/policy1/rules/allow-apache2
description: Allow Apache2 install on class-e VM
enabled: true
priority: 2
basicProfile: ALLOW
sessionMatcher: inIpRange(source.ip,'240.0.0.2')
EOF
Trong Cloud Shell, hãy tạo quy tắc 1 của chính sách bảo mật:
gcloud network-security gateway-security-policies rules import allow-nonrfc-classe \
--source=rule1.yaml \
--location=us-central1 \
--gateway-security-policy=policy1
Trong Cloud Shell, hãy tạo quy tắc chính sách bảo mật 2:
gcloud network-security gateway-security-policies rules import allow-apache2 \
--source=rule2.yaml \
--location=us-central1 \
--gateway-security-policy=policy1
Để hỗ trợ hoạt động Huấn luyện bằng Vertex AI, hãy định cấu hình cổng Secure Web Proxy bằng các chế độ cài đặt sau:
- Cổng nghe: Sử dụng cùng một cổng được định cấu hình trong chế độ cài đặt proxy rõ ràng của mã ứng dụng Vertex AI (ví dụ: 8080).
- Địa chỉ: Chỉ định một địa chỉ IP riêng tư trong dải RFC 1918.
- Chế độ định tuyến: Đặt chế độ này thành EXPLICIT_ROUTING_MODE
Trong Cloud Shell, hãy tạo một tệp gateway.yaml để xác định cổng Secure Web Proxy:
cat > gateway.yaml << EOF
name: projects/$projectid/locations/us-central1/gateways/swp1
type: SECURE_WEB_GATEWAY
addresses: ["10.10.10.5"]
ports: [8080]
gatewaySecurityPolicy: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/policy1
network: projects/$projectid/global/networks/consumer-vpc
subnetwork: projects/$projectid/regions/us-central1/subnetworks/rfc1918-subnet1
routingMode: EXPLICIT_ROUTING_MODE
EOF
Trong Cloud Shell, hãy tạo phiên bản Secure Web Proxy:
gcloud network-services gateways import swp1 \
--source=gateway.yaml \
--location=us-central1
Có thể mất vài phút để triển khai một Secure Web Proxy.

7. Thiết bị mạng Private Service Connect
Tệp đính kèm mạng là tài nguyên theo khu vực, đại diện cho phía người dùng của một giao diện Private Service Connect. Bạn liên kết một mạng con duy nhất với một tệp đính kèm mạng và nhà sản xuất sẽ chỉ định IP cho giao diện Private Service Connect từ mạng con đó. Mạng con phải nằm trong cùng khu vực với thiết bị đính kèm mạng. Thiết bị đính kèm mạng phải ở cùng khu vực với dịch vụ nhà sản xuất.
Tạo tệp đính kèm mạng
Trong Cloud Shell, hãy tạo tệp đính kèm mạng.
gcloud compute network-attachments create psc-network-attachment \
--region=us-central1 \
--connection-preference=ACCEPT_MANUAL \
--subnets=intf-subnet
Lưu ý: Bạn không cần đề cập rõ ràng đến mã dự án được chấp nhận trong tệp đính kèm này. Khi Vertex AI được định cấu hình, dự án đối tượng thuê do Google quản lý sẽ tự động được thêm như thể dự án đó được định cấu hình là "Tự động chấp nhận"
Liệt kê các tệp đính kèm mạng
Trong Cloud Shell, hãy liệt kê các tệp đính kèm mạng.
gcloud compute network-attachments list
Mô tả các tệp đính kèm mạng
Trong Cloud Shell, hãy mô tả network attachment.
gcloud compute network-attachments describe psc-network-attachment --region=us-central1
Ghi lại tên tệp đính kèm mạng PSC, psc-network-attachment, mà nhà cung cấp sẽ dùng khi tạo Giao diện Private Service Connect.
Để xem URL của Network Attachment (Tệp đính kèm mạng) PSC trong Cloud Console, hãy chuyển đến:
Network Services (Dịch vụ mạng) → Private Service Connect (Kết nối dịch vụ riêng tư) → Network Attachment (Tệp đính kèm mạng) → psc-network-attachment

8. Vùng DNS riêng
Bạn sẽ tạo một Vùng Cloud DNS cho demo.com và điền sẵn các bản ghi A trỏ đến địa chỉ IP của các VM. Sau đó, tính năng kết nối ngang hàng DNS sẽ được triển khai trong quy trình Vertex AI Pipelines, cho phép quy trình này truy cập vào các bản ghi DNS của người dùng.
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud dns --project=$projectid managed-zones create private-dns-codelab --description="" --dns-name="demo.com." --visibility="private" --networks="https://compute.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc"
Trong Cloud Shell, hãy tạo bộ bản ghi cho máy ảo, class-e-vm, nhớ cập nhật địa chỉ IP dựa trên đầu ra của môi trường.
gcloud dns --project=$projectid record-sets create class-e-vm.demo.com. --zone="private-dns-codelab" --type="A" --ttl="300" --rrdatas="240.0.0.2"
Trong Cloud Shell, hãy tạo bộ bản ghi cho Secure Web Proxy, nhớ cập nhật Địa chỉ IP dựa trên đầu ra của môi trường.
gcloud dns --project=$projectid record-sets create explicit-swp.demo.com. --zone="private-dns-codelab" --type="A" --ttl="300" --rrdatas="10.10.10.5"
Tạo quy tắc Tường lửa đám mây để cho phép truy cập từ Giao diện PSC
Trong phần sau, hãy tạo một quy tắc tường lửa cho phép lưu lượng truy cập bắt nguồn từ PSC Network Attachment truy cập vào tài nguyên điện toán RFC 1918 trong VPC của người dùng.
Trong Cloud Shell, hãy tạo quy tắc tường lửa cho phép lưu lượng truy cập từ mạng con chỉ có proxy đến mạng con class-e. Vì SWP bắt đầu kết nối với mạng con chỉ dùng proxy làm địa chỉ nguồn.
gcloud compute firewall-rules create allow-access-to-class-e \
--network=consumer-vpc \
--action=ALLOW \
--rules=ALL \
--direction=INGRESS \
--priority=1000 \
--source-ranges="10.10.100.0/28" \
--destination-ranges="240.0.0.0/4" \
--enable-logging
9. Tạo sổ tay Jupyter
Phần sau đây sẽ hướng dẫn bạn cách tạo một Sổ tay Jupyter. Sổ tay này sẽ được dùng để triển khai một Vertex AI Pipelines Job gửi wget từ Vertex AI Pipelines đến các phiên bản thử nghiệm. Đường dẫn dữ liệu giữa Vertex AI Pipelines và mạng người dùng chứa các phiên bản sử dụng giao diện Private Service Connect.
Tạo tài khoản dịch vụ do người dùng quản lý
Trong phần sau, bạn sẽ tạo một tài khoản dịch vụ được liên kết với phiên bản Vertex AI Workbench dùng trong hướng dẫn này.
Trong hướng dẫn này, tài khoản dịch vụ sẽ có các vai trò sau:
- Quản trị viên Bộ nhớ
- Người dùng Vertex AI
- Quản trị viên Artifact Registry
- Trình chỉnh sửa Cloud Build
- Người dùng tài khoản dịch vụ IAM
Đăng nhập vào Cloud Shell rồi thực hiện các thao tác sau:
Tạo tài khoản dịch vụ.
gcloud iam service-accounts create notebook-sa \
--display-name="notebook-sa"
Cập nhật tài khoản dịch vụ bằng vai trò Quản trị viên bộ nhớ.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"
Cập nhật tài khoản dịch vụ bằng vai trò Người dùng Nền tảng Trí tuệ nhân tạo.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
Cập nhật tài khoản dịch vụ bằng vai trò Quản trị viên Artifact Registry.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"
Cập nhật tài khoản dịch vụ bằng vai trò Người chỉnh sửa Cloud Build.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/cloudbuild.builds.editor"
Cho phép tài khoản dịch vụ sổ tay sử dụng tài khoản dịch vụ mặc định của Compute Engine.
gcloud iam service-accounts add-iam-policy-binding \
$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')-compute@developer.gserviceaccount.com \
--member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
10. Tạo một phiên bản Vertex AI Workbench
Trong phần sau, hãy tạo một thực thể Vertex AI Workbench kết hợp với tài khoản dịch vụ đã tạo trước đó, notebook-sa.
Tạo thực thể ứng dụng riêng tư trong Cloud Shell.
gcloud workbench instances create workbench-tutorial --vm-image-project=cloud-notebooks-managed --vm-image-family=workbench-instances --machine-type=n1-standard-4 --location=us-central1-a --subnet-region=us-central1 --subnet=rfc1918-subnet1 --disable-public-ip --shielded-secure-boot=true --shielded-integrity-monitoring=true --shielded-vtpm=true --service-account-email=notebook-sa@$projectid.iam.gserviceaccount.com
11. Cập nhật tác nhân dịch vụ Vertex AI
Vertex AI thay mặt bạn thực hiện các thao tác như lấy địa chỉ IP từ mạng con PSC Network Attachment dùng để tạo PSC Interface. Để làm như vậy, Vertex AI sử dụng một tác nhân dịch vụ (được liệt kê bên dưới) yêu cầu quyền Quản trị viên mạng.
service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com
Lưu ý: Trước khi cập nhật quyền của tác nhân dịch vụ, hãy chuyển đến Vertex AI trong bảng điều khiển Cloud để đảm bảo bạn đã bật Vertex AI API.
Trong Cloud Shell:
Lấy số dự án của bạn.
gcloud projects describe $projectid | grep projectNumber
Đặt số dự án.
projectnumber=YOUR-PROJECT-NUMBER
Tạo tài khoản dịch vụ cho Nền tảng Trí tuệ nhân tạo. Bỏ qua bước này nếu bạn đã có tài khoản dịch vụ trong dự án của mình.
gcloud beta services identity create --service=aiplatform.googleapis.com --project=$projectnumber
Cập nhật tài khoản tác nhân dịch vụ bằng vai trò compute.networkAdmin.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"
Cập nhật tài khoản tác nhân dịch vụ bằng vai trò dns.peer
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/dns.peer"
Cập nhật tài khoản dịch vụ mặc định
Bật Compute Engine API và cấp cho tài khoản dịch vụ mặc định của bạn quyền truy cập vào Vertex AI. Xin lưu ý rằng có thể mất một thời gian để thay đổi về quyền truy cập có hiệu lực.
Sử dụng Cloud Shell để cập nhật tài khoản dịch vụ mặc định như sau:
Cập nhật tài khoản dịch vụ mặc định bằng vai trò aiplatform.user
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
--role="roles/aiplatform.user"
Cập nhật tài khoản dịch vụ mặc định bằng vai trò storage.admin
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
--role="roles/storage.admin"
Cập nhật tài khoản dịch vụ mặc định bằng vai trò artifactregistry.admin
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
--role="roles/artifactregistry.admin"
12. Cài đặt Apache2 và bật Tcpdump trên "class-e-vm":
Từ class-e-vm, hãy cài đặt apache2 thông qua Secure Web Proxy:
Mở một thẻ Cloud Shell mới, cập nhật biến dự án và ssh vào class-e-vm
gcloud compute ssh --zone us-central1-a "class-e-vm" --tunnel-through-iap --project $projectid
sudo apt-get -o Acquire::http::Proxy="http://10.10.10.5:8080" update
sudo apt-get -o Acquire::http::Proxy="http://10.10.10.5:8080" install apache2 -y
sudo service apache2 restart
echo 'class-e Server !!' | sudo tee /var/www/html/index.html
Thực thi hoạt động lọc tcpdump trên mạng con chỉ dành cho proxy, được Secure Web Proxy dùng để chuyển tiếp lưu lượng truy cập đến các mục tiêu.
Từ hệ điều hành class-e-vm, hãy thực thi tính năng lọc tcpdump trên mạng con proxy-vm.
sudo tcpdump -i any net 10.10.100.0/24 -nn
Lưu ý: Đảm bảo rằng bạn đang bật chế độ Truy cập riêng tư vào Google trên mạng con của thực thể hướng dẫn trên bàn làm việc để mở Phiên JupyterLab.
13. Triển khai Vertex AI Pipelines Job
Trong phần sau, bạn sẽ tạo một sổ tay để thực hiện thành công wget từ Vertex AI Pipelines đến proxy rõ ràng. Điều này cho phép bạn truy cập vào các VM không phải RFC 1918, chẳng hạn như class-e-vm. Vertex AI Pipelines không cần có một proxy rõ ràng để truy cập vào rfc1918-vm, vì mục tiêu của proxy này là một địa chỉ IP RFC 1918.
Chạy quy trình huấn luyện trong phiên bản Vertex AI Workbench.
- Trong bảng điều khiển Cloud của Google, hãy chuyển đến thẻ thực thể trên trang Vertex AI Workbench.
- Bên cạnh tên phiên bản Vertex AI Workbench (workbench-tutorial), hãy nhấp vào Open JupyterLab (Mở JupyterLab). Phiên bản Vertex AI Workbench của bạn sẽ mở ra trong JupyterLab.
- Chọn File > New > Notebook (Tệp > Mới > Sổ tay)
- Chọn Kernel > Python 3
Trong sổ tay JupyterLab, hãy tạo một ô mới, cập nhật và chạy nội dung sau. Đảm bảo bạn cập nhật PROJECT_ID bằng thông tin chi tiết về môi trường của mình.
import json
import requests
import pprint
PROJECT_ID = 'YOUR-PROJECT-ID' #Enter your project ID
PROJECT_NUMBER=!gcloud projects list --filter="project_id:$PROJECT_ID" --format="value(PROJECT_NUMBER)"
PROJECT_NUMBER=str(PROJECT_NUMBER).strip('[').strip(']').strip("'")
print(PROJECT_NUMBER)
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau.
# us-central1 is used for the codelab
REGION = "us-central1" #@param {type:"string"}
SERVICE_NAME = "aiplatform" #@param {type:"string"}
SERVICE ="{}.googleapis.com".format(SERVICE_NAME)
ENDPOINT="{}-{}.googleapis.com".format(REGION, SERVICE_NAME)
API_VERSION = "v1" # @param {type: "string"}
LOCATION = REGION
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy cấu hình bên dưới, lưu ý những điểm nổi bật sau:
- proxy_server = "http://explicit-swp.demo.com:8080"
- FQDN được liên kết với VM proxy được triển khai trong VPC của người tiêu dùng. Chúng ta sẽ sử dụng tính năng kết nối ngang DNS để phân giải FQDN ở bước sau.
%%writefile main.py
import logging
import socket
import sys
import os
def make_api_request(url: str, proxy_vm_ip: str, proxy_vm_port: str):
"""
Makes a GET request to a nonRFC-1918 API and saves the response.
Args:
url: The URL of the API to send the request to.
"""
import requests
try:
# response = requests.get(url)
proxy_server = f"http://explicit-swp.demo.com:8080" # replace it with your Secure Web proxy Ip-address and the port.
proxies = {
"http": proxy_server,
"https": proxy_server,
}
response = requests.get(url, proxies=proxies)
logging.info(response.text)
response.raise_for_status() # Raise an exception for bad status codes
logging.info(f"Successfully fetched data from {url}")
except requests.exceptions.RequestException as e:
logging.error(f"An error occurred: {e}")
raise e
if __name__ == '__main__':
# Configure logging to print clearly to the console
logging.basicConfig(
level=logging.INFO,
format='%(levelname)s: %(message)s',
stream=sys.stdout
)
url_to_test = os.environ['NONRFC_URL']
proxy_vm_ip = os.environ['PROXY_VM_IP']
proxy_vm_port = os.environ['PROXY_VM_PORT']
logging.info(f"url_to_test: {url_to_test}")
logging.info(f"proxy_vm_ip: {proxy_vm_ip}")
logging.info(f"proxy_vm_port: {proxy_vm_port}")
make_api_request(url_to_test, proxy_vm_ip, proxy_vm_port)
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau.
%%writefile Dockerfile
FROM python:3.9-slim
RUN apt-get update && \
apt-get install -y iputils-ping && \
apt-get install -y wget
RUN pip install cloudml-hypertune requests kfp
COPY main.py /main.py
ENTRYPOINT ["python3", "/main.py"]
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau.
!gcloud artifacts repositories create pipelines-test-repo-psc --repository-format=docker --location=us-central1
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau.
IMAGE_PROJECT = PROJECT_ID
IMAGE_REPO = 'pipelines-test-repo-psc'
IMAGE_NAME = 'nonrfc-ip-call'
TAG = 'v1'
IMAGE_URI= f'us-central1-docker.pkg.dev/{IMAGE_PROJECT}/{IMAGE_REPO}/{IMAGE_NAME}:{TAG}'
IMAGE_URI
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau.
!gcloud auth configure-docker us-docker.pkg.dev --quiet
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau. Bỏ qua lỗi (gcloud.builds.submit) nếu có.
!gcloud builds submit --tag {IMAGE_URI} --region=us-central1
Trong sổ tay JupyterLab, hãy tạo và chạy ô bên dưới, lưu ý những điểm nổi bật sau:
- Tính năng Kết nối ngang hàng DNS với VPC của người dùng được định cấu hình bằng dnsPeeringConfigs (dnsPeeringConfigs) cho tên miền demo.com.
- Proxy web ở chế độ định tuyến rõ ràng ở đây là explicit-swp.demo.com. Quá trình phân giải được xử lý thông qua tính năng kết nối ngang hàng DNS trong VPC của người dùng.
- Cổng 8080 là cổng nghe (mặc định) được định cấu hình trong Secure Web Proxy
wgetđến class-e-vm-demo.com được phân giải thông qua tính năng kết nối ngang hàng DNS- Mã này chỉ định "psc-network-attachment" cho Vertex, cho phép Vertex sử dụng mạng con đính kèm mạng để triển khai 2 phiên bản Giao diện PSC.
import json
from datetime import datetime
JOB_ID_PREFIX='test_psci-nonRFC' #@param {type:"string"}
JOB_ID = '{}_{}'.format(JOB_ID_PREFIX, datetime.now().strftime("%Y%m%d%H%M%S"))
# PSC-I configs
PRODUCER_PROJECT_ID = PROJECT_ID
DNS_DOMAIN = 'class-e-vm.demo.com' #@param {type:"string"}
NON_RFC_URL = f"http://{DNS_DOMAIN}"
PROXY_VM_IP = "explicit-swp.demo.com" #@param {type:"string"}
PROXY_VM_PORT = "8080" #@param {type:"string"}
CUSTOM_JOB = {
"display_name": JOB_ID,
"job_spec": {
"worker_pool_specs": [
{
"machine_spec": {
"machine_type": "n1-standard-4",
},
"replica_count": 1,
"container_spec": {
"image_uri": IMAGE_URI,
"env": [{
"name": "NONRFC_URL",
"value": NON_RFC_URL
},
{
"name": "PROXY_VM_IP",
"value": PROXY_VM_IP
},
{
"name": "PROXY_VM_PORT",
"value": PROXY_VM_PORT
}]
},
},
],
"enable_web_access": True,
"psc_interface_config": {
"network_attachment": "psc-network-attachment",
"dns_peering_configs": [
{
"domain": "demo.com.",
"target_project": PROJECT_ID,
"target_network": "consumer-vpc"
},
]
},
}
}
print(json.dumps(CUSTOM_JOB, indent=2))
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau.
import requests
bearer_token = !gcloud auth application-default print-access-token
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer {}'.format(bearer_token[0]),
}
request_uri = f"https://{REGION}-aiplatform.googleapis.com/{API_VERSION}/projects/{PROJECT_NUMBER}/locations/{REGION}/customJobs/"
print("request_uri: ", request_uri)
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau.
response_autopush = requests.post(request_uri, json=CUSTOM_JOB, headers=headers)
response = response_autopush
print("response:", response)
if response.reason == 'OK':
job_name = response.json()['name']
job_id = job_name.split('/')[-1]
print("Created Job: ", response.json()['name'])
else:
print(response.text)
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau.
# Print KFP SDK version (should be >= 1.6)
! python3 -c "import kfp; print('KFP SDK version: {}'.format(kfp.__version__))"
# Print AI Platform version
! python3 -c "from google.cloud import aiplatform; print('AI Platform version: {}'.format(aiplatform.__version__))"
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau.
BUCKET_URI = "your-unique-bucket" # Provide a globally unique bucket name
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau.
!gcloud storage buckets create gs://{BUCKET_URI}
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau.
# pipeline parameters
CACHE_PIPELINE = False # @param {type: "string"}
_DEFAULT_IMAGE = IMAGE_URI
BUCKET_URI = "gs://{BUCKET_URI}" # @param {type: "string"}
PIPELINE_ROOT = f"{BUCKET_URI}/pipeline_root/intro"
PIPELINE_DISPLAY_NAME = "pipeline_nonRFCIP" # @param {type: "string"}
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau.
from re import S
import kfp
from kfp import dsl
from kfp.dsl import container_component, ContainerSpec
from kfp import compiler
from google.cloud import aiplatform
# ==== Component with env variable ====
@container_component
def dns_peering_test_op(dns_domain: str, proxy_vm_ip:str, proxy_vm_port:str):
return ContainerSpec(
image=_DEFAULT_IMAGE,
command=["bash", "-c"],
args=[
"""
apt-get update && apt-get install inetutils-traceroute inetutils-ping netcat-openbsd curl -y
echo "Local IP(s): $(hostname -I)"
echo "Attempting to trace route to %s"
traceroute -w 1 -m 7 "%s"
echo "Sending curl requests to http://%s via proxy %s:%s and recording trace..."
if curl -L -v --trace-ascii /dev/stdout -x http://%s:%s "http://%s"; then
echo "Curl request succeeded!"
else
echo "Curl request failed!"
exit 1
fi
""" % (dns_domain, dns_domain, dns_domain, proxy_vm_ip, proxy_vm_port, proxy_vm_ip, proxy_vm_port, dns_domain)
]
)
# ==== Pipeline ====
@dsl.pipeline(
name="dns-peering-test-pipeline",
description="Test DNS Peering using env variable",
pipeline_root=PIPELINE_ROOT,
)
def dns_peering_test_pipeline(dns_domain: str, proxy_vm_ip:str, proxy_vm_port:str):
dns_test_task = dns_peering_test_op(dns_domain=dns_domain, proxy_vm_ip=proxy_vm_ip, proxy_vm_port=proxy_vm_port)
dns_test_task.set_caching_options(enable_caching=CACHE_PIPELINE)
# ==== Compile pipeline ====
if __name__ == "__main__":
aiplatform.init(project=PROJECT_ID, location=LOCATION)
compiler.Compiler().compile(
pipeline_func=dns_peering_test_pipeline,
package_path="dns_peering_test_pipeline.yaml",
)
print("✅ Pipeline compiled to dns_peering_test_pipeline.yaml")
Trong sổ tay JupyterLab, hãy tạo một ô mới và chạy nội dung sau.
# Define the PipelineJob body; see API Reference https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.pipelineJobs/create
import requests, json
import datetime
bearer_token = !gcloud auth application-default print-access-token
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer {}'.format(bearer_token[0]),
}
request_uri = f"https://{REGION}-aiplatform.googleapis.com/{API_VERSION}/projects/{PROJECT_NUMBER}/locations/{REGION}/pipelineJobs/"
print("request_uri: ", request_uri)
14. Xác thực giao diện PSC
Bạn cũng có thể xem các IP đính kèm mạng mà Vertax AI Pipelines sử dụng bằng cách chuyển đến phần sau:
Network Services (Dịch vụ mạng) → Private Service Connect (Kết nối dịch vụ riêng tư) → Network Attachment (Tệp đính kèm mạng) → psc-network-attachment
Chọn dự án người thuê nhà (tên dự án kết thúc bằng -tp)

Trường được đánh dấu biểu thị địa chỉ IP mà Vertex AI Pipelines sử dụng từ PSC Network Attachment.

15. Xác thực Cloud Logging
Lần đầu tiên, công việc Vertex AI Pipelines sẽ mất khoảng 14 phút để chạy, những lần chạy tiếp theo sẽ ngắn hơn nhiều. Để xác thực kết quả thành công, hãy thực hiện những thao tác sau:
Chuyển đến Vertex AI → Training (Huấn luyện) → Custom jobs (Công việc tuỳ chỉnh)
Chọn công việc tuỳ chỉnh đã thực thi

Chọn Xem nhật ký

Sau khi Cloud Logging có sẵn, hãy chọn Run Query (Chạy truy vấn) để tạo lựa chọn được đánh dấu bên dưới nhằm xác nhận wget thành công từ Vertex AI Pipelines đến class-e-vm.


16. Xác thực TCPDump
Hãy xem xét đầu ra TCPDUMP để xác thực thêm khả năng kết nối với các phiên bản điện toán:
Từ class-e-vm, hãy quan sát HTTP GET và 200 OK
XXXXXXXXX@class-e-vm:~$ sudo tcpdump -i any net 10.10.100.0/28 -nn tcpdump: data link type LINUX_SLL2 tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes 05:51:14.173641 ens4 In IP 10.10.100.8.55306 > 240.0.0.2.80: Flags [S], seq 1747181041, win 65535, options [mss 1420,sackOK,TS val 3942828403 ecr 0,nop,wscale 8], length 0 05:51:14.173668 ens4 Out IP 240.0.0.2.80 > 10.10.100.8.55306: Flags [S.], seq 3013226100, ack 1747181042, win 64768, options [mss 1420,sackOK,TS val 1886125065 ecr 3942828403,nop,wscale 7], length 0 05:51:14.174977 ens4 In IP 10.10.100.8.55306 > 240.0.0.2.80: Flags [.], ack 1, win 1054, options [nop,nop,TS val 3942828405 ecr 1886125065], length 0 05:51:14.175066 ens4 In IP 10.10.100.8.55306 > 240.0.0.2.80: Flags [P.], seq 1:223, ack 1, win 1054, options [nop,nop,TS val 3942828405 ecr 1886125065], length 222: HTTP: GET / HTTP/1.1 05:51:14.175096 ens4 Out IP 240.0.0.2.80 > 10.10.100.8.55306: Flags [.], ack 223, win 505, options [nop,nop,TS val 1886125066 ecr 3942828405], length 0 05:51:14.239042 ens4 Out IP 240.0.0.2.80 > 10.10.100.8.55306: Flags [P.], seq 1:246, ack 223, win 505, options [nop,nop,TS val 1886125130 ecr 3942828405], length 245: HTTP: HTTP/1.1 200 OK
17. Dọn dẹp
Trong Cloud Shell, hãy xoá các thành phần hướng dẫn.
gcloud workbench instances delete workbench-tutorial --project=$projectid --location=us-central1-a
gcloud network-security gateway-security-policies rules delete allow-nonrfc-classe \
--gateway-security-policy=policy1 \
--location=us-central1
gcloud network-security gateway-security-policies rules delete allow-apache2 \
--gateway-security-policy=policy1 \
--location=us-central1
gcloud network-security gateway-security-policies delete policy1 \
--location=us-central1
gcloud network-services gateways delete swp1 \
--location=us-central1
gcloud compute network-attachments delete psc-network-attachment --region=us-central1 --quiet
gcloud compute networks subnets delete intf-subnet rfc1918-subnet1 --region=us-central1 --quiet
gcloud dns record-sets delete class-e-vm.demo.com --zone=private-dns-codelab --type=A
gcloud dns record-sets delete explicit-swp.demo.com --zone=private-dns-codelab --type=A
gcloud dns managed-zones delete private-dns-codelab
gcloud computeinstances delete class-e-vm --project=$projectid --zone=us-central1-a --quiet
gcloud compute networks delete consumer-vpc --quiet
18. Xin chúc mừng
Xin chúc mừng, bạn đã định cấu hình và xác thực thành công một kết nối giữa Giao diện Private Service Connect của Vertex AI Pipelines với các dải IP không phải RFC thông qua Secure Web Proxy.
Bạn đã tạo cơ sở hạ tầng người dùng và thêm một tệp đính kèm mạng cho phép nhà sản xuất tạo một VM có nhiều NIC để kết nối thông tin liên lạc giữa người dùng và nhà sản xuất. Bạn đã tìm hiểu cách tạo mối quan hệ kết nối ngang hàng DNS trong khi triển khai một proxy rõ ràng trong mạng VPC của người dùng, cho phép kết nối với thực thể class-e-vm không thể định tuyến trực tiếp từ Vertex.

Tiếp theo là gì?
Tài liệu đọc thêm và video
Tài liệu tham khảo
- Thông tin tổng quan về quyền truy cập vào mạng Vertex AI | Google Cloud
- Giới thiệu về cách truy cập các dịch vụ của Vertex AI thông qua giao diện Private Service Connect | Google Cloud
- Sử dụng giao diện Private Service Connect cho Vertex AI Training | Google Cloud
- Thiết lập giao diện Private Service Connect cho các tài nguyên Vertex AI | Google Cloud
- Bạn cũng có thể liên kết một tài khoản dịch vụ cùng với địa chỉ máy chủ lưu trữ hoặc địa chỉ IP, v.v. để chuyển tiếp lưu lượng truy cập đến SWP ở chế độ định tuyến rõ ràng. Vui lòng tham khảo tài liệu về Ngôn ngữ CEL để xem thêm ví dụ.