1. Giới thiệu
Giao diện Kết nối dịch vụ riêng tư là một tài nguyên cho phép mạng Đám mây riêng tư ả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 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.
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 (dịch vụ được quản lý xuất), 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 (dịch vụ được quản lý nhập).
- 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.
Sản phẩm bạn sẽ tạo ra
Vertex AI Pipelines, được triển khai trong một dự án đối tượng thuê do Google quản lý, sẽ tận dụng PSC Network Attachment để tạo một phiên bản nhiều NIC giữa mạng nhà sản xuất và mạng người tiêu dùng. Vì PSC Network Attachment được triển khai bằng nhiều NIC từ mạng người dùng, nên Vertex AI Pipelines có thể truy cập vào các tuyến đường có sẵn từ mạng người dùng.
Trong hướng dẫn này, bạn sẽ tạo một cấu trúc Giao diện Kết nối dịch vụ riêng tư (PSC) toàn diện cho Vertex AI Pipelines. Cấu trúc này sử dụng các quy tắc Tường lửa trên đám mây để cho phép hoặc từ chối kết nối từ nhà sản xuất đến các phiên bản thử nghiệm của người tiêu dùng như minh hoạ trong Hình 1.
Hình 1

Bạn sẽ tạo một psc-network-attachment duy nhất trong VPC của người dùng, dẫn đến các trường hợp sử dụng sau:
- Tạo một quy tắc về tường lửa cho lưu lượng truy cập vào trong consumer-vpc, cho phép mạng con Vertex AI Pipeline (192.168.10.0/28) truy cập vào test-svc-1. Xác nhận PING được tạo thành công từ Pipeline Job đến test-svc-1 bằng TCPDUMP
- Tạo một quy tắc Tường lửa cho lưu lượng truy cập vào trong consumer-vpc từ chối mạng con Vertex AI Pipeline (192.168.10.0/28) đối với test-svc-2. Xác nhận lỗi PING dựa trên nhật ký tường lửa do Log Explorer tạo.
Kiến thức bạn sẽ học được
- Cách tạo thiết bị lưu trữ mạng
- Cách Vertex AI Pipelines có thể sử dụng một tệp đính kèm mạng để tạo Giao diện PSC
- Cách thiết lập thông tin liên lạc từ nhà sản xuất đến người tiêu dùng
- Cách cho phép truy cập từ Verex AI Pipelines vào VM người dùng, test-svc-1
- Cách từ chối quyền truy cập từ Verex AI Pipelines vào VM người dùng, test-svc-2 bằng Tường lửa trên đám mây
Bạn cần có
- Dự án trên Google Cloud
- Quyền IAM
- Quản trị viên phiên bản máy tính (roles/compute.instanceAdmin)
- Quản trị viên mạng máy tính (roles/compute.networkAdmin)
- Quản trị viên bảo mật điện toán (roles/compute.securityAdmin)
- 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 hạn mức (roles/servicemanagement.quotaAdmin)
- 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 Vertex AI (roles/aiplatform.admin)
2. Trước khi bắt đầu
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-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Cập nhật dự án để hỗ trợ hướng dẫn
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud services enable notebooks.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com
3. Thiết lập người tiêu dùng
Tạo VPC 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 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 test-subnet-1 --project=$projectid --range=192.168.20.0/28 --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 test-subnet-2 --project=$projectid --range=192.168.30.0/28 --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 workbench-subnet --project=$projectid --range=192.168.40.0/28 --network=consumer-vpc --region=us-central1 --enable-private-ip-google-access
Cấu hình Cloud Router và NAT
Cloud Network Address Translation (NAT) được dùng trong hướng dẫn tải gói phần mềm sổ tay vì phiên bản sổ tay không có địa chỉ IP bên ngoài. Cloud NAT cung cấp các chức năng NAT đầu ra, tức là các máy chủ lưu trữ trên Internet không được phép bắt đầu giao tiếp với một sổ tay do người dùng quản lý, giúp tăng cường tính bảo mật.
Trong Cloud Shell, hãy tạo bộ định tuyến đám mây theo khu vực.
gcloud compute routers create cloud-router-us-central1 --network consumer-vpc --region us-central1
Trong Cloud Shell, hãy tạo cổng NAT đám mây theo khu vực.
gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1 --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
Tạo mạng con của Network Attachment cho Private Service Connect
Trong Cloud Shell, hãy tạo mạng con Network Attachment mà Vertex AI Pipelines sử dụng.
gcloud compute networks subnets create intf-subnet --project=$projectid --range=192.168.10.0/28 --network=consumer-vpc --region=us-central1
4. Bật Identity Aware Proxy (IAP)
Để 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.
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 phiên bản vm người dùng, test-svc-1.
gcloud compute instances create test-svc-1 \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=test-subnet-1 \
--shielded-secure-boot
Trong Cloud Shell, hãy tạo thực thể vm của người dùng, test-svc-2.
gcloud compute instances create test-svc-2 \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=test-subnet-2 \
--shielded-secure-boot
Lấy và lưu trữ địa chỉ IP của các phiên bản:
Trong Cloud Shell, hãy thực hiện thao tác mô tả đối với các phiên bản VM thử nghiệm.
gcloud compute instances describe test-svc-1 --zone=us-central1-a | grep networkIP:
gcloud compute instances describe test-svc-2 --zone=us-central1-a | grep networkIP:
Ví dụ:
user@cloudshell(psc-vertex)$ gcloud compute instances describe test-svc-1 --zone=us-central1-a | grep networkIP:
gcloud compute instances describe test-svc-2 --zone=us-central1-a | grep networkIP:
networkIP: 192.168.20.2
networkIP: 192.168.30.2
6. Tệp đính kèm 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 (Vertex AI Pipelines) sẽ chỉ định IP cho giao diện Private Service Connect.
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
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 URI psc-network-attachment mà nhà sản xuất sẽ dùng khi tạo Giao diện Kết nối dịch vụ riêng tư.
Trong ví dụ bên dưới, URI đính kèm mạng psc là:
projects/psc-vertex/regions/us-central1/networkAttachments/psc-network-attachment
user@cloudshell$ gcloud compute network-attachments describe psc-network-attachment --region=us-central1
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2025-01-21T12:25:25.385-08:00'
fingerprint: m9bHc9qnosY=
id: '56224423547354202'
kind: compute#networkAttachment
name: psc-network-attachment
network: https://www.googleapis.com/compute/v1/projects/psc-vertex/global/networks/consumer-vpc
region: https://www.googleapis.com/compute/v1/projects/psc-vertex/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/psc-vertex/regions/us-central1/networkAttachments/psc-network-attachment
subnetworks:
- https://www.googleapis.com/compute/v1/projects/psc-vertex/regions/us-central1/subnetworks/intf-subnet
7. Thiết lập Vertex AI Workbench
Phần sau đây 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 Công việc của quy trình gửi lệnh PING 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 thực thể sử dụng Giao diện mạng kết nối dịch vụ riêng tư.
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:
Trong Cloud Shell, hãy tạo tài khoản dịch vụ.
gcloud iam service-accounts create notebook-sa \
--display-name="notebook-sa"
Trong Cloud Shell, hãy 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"
Trong Cloud Shell, hãy cập nhật tài khoản dịch vụ bằng vai trò Người dùng Vertex AI.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
Trong Cloud Shell, hãy 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"
Trong Cloud Shell, hãy 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 để khởi tạo Công việc trong quy trình.
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"
Tạo một phiên bản Vertex AI Workbench
Trong phần sau, hãy tạo một phiên bản Vertex AI Workbench kết hợp tài khoản dịch vụ đã tạo trước đó, notebook-sa.
Tạo phiên bản ứng dụng khách riêng tư trong Cloud Shell.
gcloud workbench instances create workbench-tutorial --vm-image-project=deeplearning-platform-release --vm-image-family=common-cpu-notebooks --machine-type=n1-standard-4 --location=us-central1-a --subnet-region=us-central1 --subnet=workbench-subnet --disable-public-ip --shielded-secure-boot=true --service-account-email=notebook-sa@$projectid.iam.gserviceaccount.com
8. Vertex AI Pipelines để kiểm tra khả năng kết nối test-svc-1
Mở một thẻ Cloud Shell mới rồi cập nhật chế độ cài đặt dự án.
Trong Cloud Shell, hãy thực hiện các bước sau:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Để cho phép kết nối từ Vertex AI Pipelines đến test-svc-1, hãy tạo một quy tắc tường lửa đầu vào chỉ định PSC Network Attachment làm nguồn (192.168.10.0/28) và Địa chỉ IP test-svc-1 làm đích đến.
Trong Cloud Shell, hãy cập nhật destination-range để khớp với địa chỉ IP test-svc-1.
gcloud compute --project=$projectid firewall-rules create allow-icmp-vertex-pipelines-to-test-svc1-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=ALLOW --source-ranges=192.168.10.0/28 --destination-ranges=<your-test-svc-1-vm-ip> --rules=icmp
Ví dụ:
gcloud compute --project=$projectid firewall-rules create allow-icmp-vertex-pipelines-to-test-svc1-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=ALLOW --source-ranges=192.168.10.0/28 --destination-ranges=192.168.20.2 --rules=icmp
Đăng nhập vào phiên bản test-svc-1 bằng IAP trong Cloud Shell.
gcloud compute ssh test-svc-1 --project=$projectid --zone=us-central1-a --tunnel-through-iap
Trong hệ điều hành, hãy thực thi tcpdump để ghi lại mọi lưu lượng truy cập icmp. Phiên hệ điều hành này sẽ được dùng để xác thực thông tin liên lạc giữa Vertex AI Pipeline và VM.
sudo tcpdump -i any icmp -nn
9. Cập nhật tác nhân dịch vụ Vertex AI
Vertex AI Pipelines 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 Giao diện PSC. Để làm như vậy, Vertex AI Pipelines 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
Trong Cloud Shell, hãy lấy số dự án của bạn.
gcloud projects describe $projectid | grep projectNumber
Ví dụ:
gcloud projects describe $projectid | grep projectNumber:
projectNumber: '795057945528'
Trong Cloud Shell, hãy cập nhật tài khoản đơn vị hỗ trợ dịch vụ bằng vai trò compute.networkAdmin.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-<your-projectnumber>@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"
Ví dụ:
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-795057945528@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"
10. 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.
Trong Cloud Shell, hãy 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:<your-projectnumber>-compute@developer.gserviceaccount.com" \
--role="roles/aiplatform.user"
Ví dụ:
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:795057945528-compute@developer.gserviceaccount.com" \
--role="roles/aiplatform.user"
11. Triển khai công việc Vertex AI Pipelines
Trong phần sau, bạn sẽ tạo một sổ tay để thực hiện thành công lệnh PING đến phiên bản consumer test-svc-1.
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, hãy chuyển đến thẻ phiên bản 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 một ô sổ tay mới, hãy chạy lệnh sau để đảm bảo bạn có phiên bản pip mới nhất:
! pip3 install --upgrade --quiet google-cloud-aiplatform \
kfp \
google-cloud-pipeline-components
- Đặt các biến dự án trong ô sổ tay mới
PROJECT_ID = "<your-projectid>"
REGION = "<your-region>"
NETWORK_ATTACHMENT_NAME = "psc-network-attachment"
Ví dụ:
PROJECT_ID = "psc-vertex"
REGION = "us-central1"
NETWORK_ATTACHMENT_NAME = "psc-network-attachment"
- Xác định tên nhóm duy nhất trên toàn cầu làm biến trong một ô sổ tay mới
BUCKET_URI = f"gs://<your-bucket-name>"
Ví dụ:
BUCKET_URI = f"gs://psc-vertex-bucket"
- Tạo vùng chứa trong một ô sổ tay mới
! gsutil mb -l {REGION} -p {PROJECT_ID} {BUCKET_URI}
Trong phần sau, bạn sẽ xác định tài khoản dịch vụ Compute Engine mặc định sẽ được dùng để chạy công việc quy trình, cũng như cấp quyền phù hợp cho tài khoản đó.
shell_output = ! gcloud projects describe $PROJECT_ID
PROJECT_NUMBER = shell_output[-1].split(":")[1].strip().replace("'", "")
SERVICE_ACCOUNT = f"{PROJECT_NUMBER}-compute@developer.gserviceaccount.com"
print(f"Project Number: {PROJECT_NUMBER}")
print(f"Service Account: {SERVICE_ACCOUNT}")
Để xác nhận quá trình thực thi thành công, Tài khoản dịch vụ và Số dự án của bạn sẽ được in
- Trong một ô sổ tay mới, hãy cấp cho tài khoản dịch vụ của bạn quyền đọc và ghi các cấu phần phần mềm của quy trình trong vùng lưu trữ được tạo ở bước trước.
! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectCreator {BUCKET_URI}
! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectViewer {BUCKET_URI}
- Trong một ô sổ tay mới, hãy xác định các tham số của quy trình. Xin lưu ý rằng NETWORK_ATTACHMENT_NAME là PSC Network Attachment, do đó phải khớp.
PIPELINE_ROOT = f"{BUCKET_URI}/pipeline_root/psc_test"
NETWORK_ATTACHMENT_URI = f"projects/{PROJECT_NUMBER}/regions/{REGION}/networkAttachments/{NETWORK_ATTACHMENT_NAME}"
- Trong một ô sổ tay mới, hãy khởi chạy Vertex AI SDK
from kfp import dsl
from google.cloud import aiplatform, aiplatform_v1beta1
import time
from google.cloud.aiplatform_v1.types import pipeline_state
import yaml
from datetime import datetime
import logging
aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI)
# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
- Trong một ô sổ tay mới, hãy xác định thành phần kiểm thử
@dsl.container_component
def ping_check(network_address: str):
"""Pings a network address
Args:
network_address: The IP address to ping
"""
return dsl.ContainerSpec(
image="ubuntu:22.04",
command=["sh", "-c"],
args=[
f"""
# Use sed for regex replacement, cleaner than bash parameter expansion for this
cleaned_address=$(echo "{network_address}" | sed 's/[^0-9.]//g')
apt-get update && apt-get install inetutils-traceroute inetutils-ping -y
echo "Will ping $cleaned_address"
if ! ping -c 3 $cleaned_address; then
echo "Ping failed"
traceroute -w 1 -m 7 $cleaned_address
exit 1
fi
"""
],
)
- Trong một ô sổ tay mới, hãy xác định quy trình
@dsl.pipeline(name="check-connectivity")
def pipeline(ip_address: str):
"""Pings an IP address. Facilitated by a Private Service Connect Interface
Args:
ip_address: The IP address to ping
"""
ping_check(network_address=ip_address).set_caching_options(False)
return
- Trong một ô sổ tay mới, hãy thực thi hàm hiệu dụng, đợi quy trình hoàn tất
def wait_for_pipeline(
project_id: str,
region: str,
pipeline_job_resource_name: str,
timeout: int = 20 * 60, # Default timeout of 20 minutes (in seconds)
) -> bool:
"""
Waits for a Vertex AI pipeline to finish, with a timeout.
Args:
project_id (str): The Google Cloud project ID.
region (str): The region where the pipeline is running.
pipeline_job_resource_name (str): The resource name of the pipeline job.
timeout (int): The maximum time to wait for the pipeline to finish, in seconds.
Defaults to 20 minutes (1200 seconds).
Returns:
bool: True if the pipeline succeeded, False otherwise.
Raises:
TimeoutError: If the pipeline does not finish within the specified timeout.
"""
# Initialize the AIPlatform client
aiplatform.init(project=project_id, location=region)
# Get the pipeline job
pipeline_job = aiplatform.PipelineJob.get(resource_name=pipeline_job_resource_name)
logging.info(
f"Vertex AI Console Link: https://console.cloud.google.com/vertex-ai/pipelines/locations/{region}/runs/{pipeline_job.resource_name.split('/')[-1]}?project={project_id}"
)
start_time = time.time()
while True:
status = pipeline_job.state
logging.info(f"Pipeline Job status: {status.name}")
if status in [
pipeline_state.PipelineState.PIPELINE_STATE_SUCCEEDED,
pipeline_state.PipelineState.PIPELINE_STATE_FAILED,
pipeline_state.PipelineState.PIPELINE_STATE_CANCELLED,
]:
break # Exit the loop if the job is finished
if time.time() - start_time > timeout:
logging.error(f"Pipeline timed out after {timeout} seconds.")
raise TimeoutError(f"Pipeline timed out after {timeout} seconds.")
# Wait for a short time before checking again
time.sleep(10) # Adjust the wait time as needed
# Do something based on the final status
if status == pipeline_state.PipelineState.PIPELINE_STATE_SUCCEEDED:
logging.info("Pipeline succeeded")
return True
elif status == pipeline_state.PipelineState.PIPELINE_STATE_CANCELLED:
logging.error("Pipeline cancelled")
raise Exception("Pipeline cancelled")
elif status == pipeline_state.PipelineState.PIPELINE_STATE_FAILED:
logging.error("Pipeline failed")
raise Exception("Pipeline failed")
- Trong một ô sổ tay mới, hãy thực thi hàm hiệu dụng để chạy quy trình
def run_job_with_psc_interface_config(
project_id: str,
region: str,
pipeline_root: str,
network_attachment_name: str,
ip_address: str,
local_pipeline_file: str = "pipeline.yaml",
):
"""
Compiles, submits, and monitors a Vertex AI pipeline.
"""
parameter_values = {"ip_address": ip_address}
pipeline_root = f"{pipeline_root}/{datetime.now().strftime('%Y%m%d%H%M%S')}"
logging.info("Compiling pipeline")
try:
with open(local_pipeline_file, "r") as stream:
pipeline_spec = yaml.safe_load(stream)
logging.info(f"Pipeline Spec: {pipeline_spec}")
except yaml.YAMLError as exc:
logging.error(f"Error loading pipeline yaml file: {exc}")
raise
logging.info(f"Will use pipeline root: {pipeline_root}")
# Initialize the Vertex SDK using PROJECT_ID and LOCATION
aiplatform.init(project=project_id, location=region)
# Create the API endpoint
client_options = {"api_endpoint": f"{region}-aiplatform.googleapis.com"}
# Initialize the PipelineServiceClient
client = aiplatform_v1beta1.PipelineServiceClient(client_options=client_options)
# Construct the request
request = aiplatform_v1beta1.CreatePipelineJobRequest(
parent=f"projects/{project_id}/locations/{region}",
pipeline_job=aiplatform_v1beta1.PipelineJob(
display_name="pipeline-with-psc-interface-config",
pipeline_spec=pipeline_spec,
runtime_config=aiplatform_v1beta1.PipelineJob.RuntimeConfig(
gcs_output_directory=pipeline_root, parameter_values=parameter_values
),
psc_interface_config=aiplatform_v1beta1.PscInterfaceConfig(
network_attachment=network_attachment_name
),
),
)
# Make the API call
response = client.create_pipeline_job(request=request)
# Print the response
logging.info(f"Pipeline job created: {response.name}")
return response.name
- Trong một ô sổ tay mới, hãy biên dịch quy trình
from kfp import compiler
compiler.Compiler().compile(pipeline_func=pipeline, package_path='pipeline.yaml')
- Trong một ô sổ tay mới, hãy cập nhật TARGET_IP_ADDRESS để phản ánh Địa chỉ IP thu được ở bước trước cho test-svc-1 và theo dõi trạng thái của công việc trong quy trình
TARGET_IP_ADDRESS = "<your-test-svc-1-ip>"
try:
job_name = run_job_with_psc_interface_config(
project_id=PROJECT_ID,
region=REGION,
pipeline_root=PIPELINE_ROOT,
network_attachment_name=NETWORK_ATTACHMENT_URI,
ip_address=TARGET_IP_ADDRESS,
)
wait_for_pipeline(
project_id=PROJECT_ID,
region=REGION,
pipeline_job_resource_name=job_name,
)
except Exception as e:
logging.error(f"An error occurred: {e}")
Ví dụ:
TARGET_IP_ADDRESS = "192.168.20.2"
try:
job_name = run_job_with_psc_interface_config(
project_id=PROJECT_ID,
region=REGION,
pipeline_root=PIPELINE_ROOT,
network_attachment_name=NETWORK_ATTACHMENT_URI,
ip_address=TARGET_IP_ADDRESS,
)
wait_for_pipeline(
project_id=PROJECT_ID,
region=REGION,
pipeline_job_resource_name=job_name,
)
except Exception as e:
logging.error(f"An error occurred: {e}")
Sau khi bước 17 được thực thi, quy trình sẽ mất khoảng 8 phút để hoàn tất.
12. Xác thực khả năng kết nối với test-svc-1
Trong ô dùng để thực thi bước 17, hãy quan sát quá trình chuyển đổi Trạng thái công việc của quy trình từ PIPELINE_STATE_PENDING sang PIPELINE_STATE_RUNNING và cuối cùng là PIPELINE_STATE_SUCCEEDED. Trạng thái này cho biết đã ping thành công từ Vertex AI Pipelines và nhận được phản hồi từ test-svc-1.
Để xác thực lưu lượng truy cập ICMP giữa Vertex AI Pipeline và test-svc-1, hãy xem phiên tcpdump đã tạo trước đó được thực thi trong hệ điều hành test-svc-1. Phiên này cung cấp nhật ký cho biết lưu lượng truy cập hai chiều.
Trong ví dụ về tcpdump, Vertex AI Pipelines lấy địa chỉ IP 192.168.10.3 từ mạng con 192.168.10.0/28, 192.168.20.2 là địa chỉ IP của test-svc-1. Xin lưu ý rằng trong môi trường của bạn, địa chỉ IP có thể khác.
user@test-svc-1:~$ sudo tcpdump -i any icmp -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
18:57:54.737490 ens4 In IP 192.168.10.3 > 192.168.20.2: ICMP echo request, id 257, seq 0, length 64
18:57:54.737523 ens4 Out IP 192.168.20.2 > 192.168.10.3: ICMP echo reply, id 257, seq 0, length 64
13. Vertex AI Pipelines AI để kiểm tra kết nối test-svc-2
Trong phần sau, bạn sẽ tạo một quy tắc tường lửa đầu vào để từ chối lưu lượng truy cập từ mạng con Vertex AI Pipelines (192.168.10.0/28) đến test-svc-2, sau đó cập nhật Sổ tay để phản ánh địa chỉ IP test-svc-2 rồi cuối cùng thực thi lượt chạy Pipelines Jobs.
Trong ô Notebook, Trạng thái của công việc trong quy trình sẽ cho biết Lỗi – Quy trình không thành công. Ngoài ra, nhật ký Tường lửa sẽ cung cấp thông tin chi tiết về kết nối không thành công.
Tạo quy tắc tường lửa từ chối lưu lượng truy cập vào
Để từ chối kết nối từ Vertex AI Pipelines đến test-svc-2, hãy tạo một quy tắc tường lửa đầu vào chỉ định PSC Network Attachment làm nguồn (192.168.10.0/28) và Địa chỉ IP test-svc-2 làm đích đến.
Trong Cloud Shell, hãy cập nhật destination-range để khớp với địa chỉ IP test-svc-2.
gcloud compute --project=$projectid firewall-rules create deny-icmp-vertex-pipelines-to-test-svc2-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=DENY --source-ranges=192.168.10.0/28 --rules=ALL --destination-ranges=<your-test-svc-2-vm-ip> --rules=icmp --enable-logging
Ví dụ:
gcloud compute --project=$projectid firewall-rules create deny-icmp-vertex-pipelines-to-test-svc2-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=DENY --source-ranges=192.168.10.0/28 --rules=ALL --destination-ranges=192.168.30.2 --enable-logging
Thực thi công việc trong quy trình từ Ô sổ tay
Trong một ô sổ tay mới, hãy cập nhật TARGET_IP_ADDRESS để phản ánh Địa chỉ IP đã nhận được ở bước trước cho test-svc-2 và quan sát Trạng thái công việc của quy trình.
TARGET_IP_ADDRESS = "<your-test-svc-2-ip>"
try:
job_name = run_job_with_psc_interface_config(
project_id=PROJECT_ID,
region=REGION,
pipeline_root=PIPELINE_ROOT,
network_attachment_name=NETWORK_ATTACHMENT_URI,
ip_address=TARGET_IP_ADDRESS,
)
wait_for_pipeline(
project_id=PROJECT_ID,
region=REGION,
pipeline_job_resource_name=job_name,
)
except Exception as e:
logging.error(f"An error occurred: {e}")
Ví dụ:
TARGET_IP_ADDRESS = "192.168.30.2"
try:
job_name = run_job_with_psc_interface_config(
project_id=PROJECT_ID,
region=REGION,
pipeline_root=PIPELINE_ROOT,
network_attachment_name=NETWORK_ATTACHMENT_URI,
ip_address=TARGET_IP_ADDRESS,
)
wait_for_pipeline(
project_id=PROJECT_ID,
region=REGION,
pipeline_job_resource_name=job_name,
)
except Exception as e:
logging.error(f"An error occurred: {e}")
Sau khi thực thi, quy trình sẽ mất khoảng 8 phút để hoàn tất.
14. Xác thực kết nối không thành công với test-svc-2
Trong ô dùng để thực thi Công việc Pipelines, hãy lưu ý đến quá trình chuyển đổi trạng thái từ PIPELINE_STATE_PENDING sang PIPELINE_STATE_FAILED, cho biết một lệnh ping không thành công từ Vertex AI Pipelines và phản hồi từ test-svc-2.
Khi sử dụng Log Explorer, bạn có thể xem các mục nhập nhật ký Tường lửa khớp với quy tắc Từ chối truy cập bao gồm mạng con Vertex AI Pipelines (192.168.10.0/28) và Địa chỉ IP test-svc-2.
Chọn Show Query (Hiện truy vấn) rồi chèn bộ lọc bên dưới, 15 phút gần nhất, sau đó chọn Run Query (Chạy truy vấn).
jsonPayload.rule_details.reference:("network:consumer-vpc/firewall:deny-icmp-vertex-pipelines-to-test-svc2-vm")


Chọn một mục nhập nhật ký, sau đó mở rộng các trường lồng nhau để hiển thị các phần tử thông tin bao gồm Vertex AI Pipelines và Địa chỉ IP test-svc-2 xác thực quy tắc tường lửa từ chối lưu lượng truy cập.

15. Dọn dẹp
Trong Cloud Shell, hãy xoá các thành phần hướng dẫn.
gcloud compute instances delete test-svc-1 test-svc-2 --zone=us-central1-a --quiet
gcloud workbench instances delete workbench-tutorial --location=us-central1-a --quiet
gcloud compute firewall-rules delete deny-icmp-vertex-pipelines-to-test-svc2-vm allow-icmp-vertex-pipelines-to-test-svc1-vm ssh-iap-consumer --quiet
gcloud compute routers nats delete cloud-nat-us-central1 --router=cloud-router-us-central1 --region us-central1 --quiet
gcloud compute routers delete cloud-router-us-central1 --region=us-central1 --quiet
16. 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 Giao diện Private Service Connect cũng như khả năng kết nối của người dùng và nhà sản xuất bằng cách triển khai tường lửa cho phép và từ chối lưu lượng truy cập.
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 dịch vụ Vertex AI Pipelines tạo VM Giao diện PSC để 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 các quy tắc tường lửa trong mạng VPC của người dùng cho phép và từ chối kết nối đến các phiên bản trong mạng của người dùng.
Cosmopup cho rằng các hướng dẫn rất hữu ích!!
