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 của người dùng. Mạng nhà sản xuất và mạng người dùng có thể nằm trong các dự án và tổ chức khác nhau.
Kết nối giữa tệp đính kèm mạng và giao diện Private Service Connect tương tự như kết nối giữa điểm cuối Private Service Connect và tệp đính kèm dịch vụ, nhưng có hai đ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 dùng (luồng dịch vụ được quản lý), trong khi điểm cuối cho phép mạng người dùng bắt đầu kết nối với mạng nhà sản xuất (luồng dịch vụ được quản lý).
- Kết nối giao diện Private Service Connect là 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
Quy trình Vertex AI, được triển khai trong một dự án của người thuê do Google quản lý, sẽ tận dụng Tệp đính kèm mạng PSC để tạo một thực thể nhiều nic giữa mạng nhà sản xuất và mạng người dùng. Vì Tệp đính kèm mạng PSC được triển khai bằng nhiều nic từ mạng người dùng, nên quy trình Vertex AI có thể truy cập vào các tuyến có sẵn từ mạng người dùng.
Trong hướng dẫn này, bạn sẽ xây dựng 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 quy trình Vertex AI sử dụng các quy tắc của Tường lửa trên đám mây để cho phép hoặc từ chối kết nối từ thực thể tạo đến các thực thể kiểm thử của người dùng như minh hoạ trong Hình 1.
Hình 1
Bạn sẽ tạo một tệp đính kèm psc-network-attachment trong VPC của người dùng, dẫn đến các trường hợp sử dụng sau:
- Tạo quy tắc Tường lửa truy cập vào 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 thành công được tạo từ Công việc quy trình đến test-svc-1 bằng TCPDUMP
- Tạo quy tắc Tường lửa truy cập trong consumer-vpc để từ chối mạng con Vertex AI Pipeline (192.168.10.0/28) truy cập vào test-svc-2. Xác nhận lỗi PING dựa trên nhật ký Tường lửa do Trình khám phá nhật ký tạo.
Kiến thức bạn sẽ học được
- Cách tạo tệp đính kèm mạng
- Cách Quy trình Vertex AI có thể sử dụng tệp đính kèm mạng để tạo Giao diện PSC
- Cách thiết lập giao tiếp từ nhà sản xuất đến người tiêu dùng
- Cách cho phép quyền truy cập từ Quy trình AI của Verex vào máy ảo của người dùng, test-svc-1
- Cách từ chối quyền truy cập của quy trình AI Verex vào máy ảo của người dùng, test-svc-2 bằng cách sử dụ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 Compute (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 nhật ký (roles/logging.admin)
- Quản trị viên Notebooks (roles/notebooks.admin)
- Quản trị viên IAM của 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 như 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 như 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 dùng
Tạo VPC của người dùng
Trong Cloud Shell, hãy thực hiện như sau:
gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom
Tạo mạng con của người dùng
Trong Cloud Shell, hãy thực hiện như 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 như 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 như 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
Trong hướng dẫn này, chúng tôi sử dụng tính năng Dịch địa chỉ mạng trên đám mây (NAT) để tải gói phần mềm cho máy tính xách tay xuống vì thực thể máy tính xách tay không có địa chỉ IP bên ngoài. Cloud NAT cung cấp các tính năng NAT thoát, tức là máy chủ lưu trữ Internet không được phép bắt đầu giao tiếp với máy tính xách tay do người dùng quản lý, giúp máy tính xách tay an toàn hơn.
Bên 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
Bên trong Cloud Shell, hãy tạo cổng NAT trên đá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 tệp đính kèm mạng của Private Service Connect
Bên trong Cloud Shell, hãy tạo mạng con Attachment Network (Mạng đính kèm) mà quy trình Vertex AI 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 Proxy nhận dạng (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:
- Áp dụng cho tất cả các phiên bản máy ảo mà bạn muốn truy cập bằng IAP.
- Cho phép lưu lượng truy cập vào từ dải IP 35.235.240.0/20. Phạm vi này chứa tất cả địa chỉ IP mà IAP sử dụng để chuyển tiếp TCP.
Bên 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 thực thể máy ảo của người dùng
Bên trong Cloud Shell, hãy tạo thực thể máy ảo của 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
Bên trong Cloud Shell, hãy tạo thực thể máy ảo 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 thực thể:
Bên trong Cloud Shell, hãy mô tả các thực thể máy ảo kiểm thử.
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 giao diện Private Service Connect. Bạn liên kết một mạng con với một tệp đính kèm mạng và trình tạo (Quy trình Vertex AI) sẽ chỉ định IP cho giao diện Private Service Connect.
Tạo tệp đính kèm mạng
Bên 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
Bên trong Cloud Shell, hãy liệt kê tệp đính kèm mạng.
gcloud compute network-attachments list
Mô tả tệp đính kèm mạng
Bên trong Cloud Shell, hãy mô tả tệp đính kèm mạng.
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ẽ 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 tệp đính kèm mạng psc như sau:
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 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 Công việc trong quy trình (Pipelines Job) gửi một PING từ quy trình Vertex AI đến các thực thể kiểm thử. Datapath giữa quy trình Vertex AI 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 thực thể 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"
Bên trong Cloud Shell, hãy cập nhật tài khoản dịch vụ có 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ụ có 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"
Bên trong Cloud Shell, hãy cập nhật tài khoản dịch vụ có 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"
Bên trong Cloud Shell, hãy cho phép tài khoản dịch vụ của máy tính xách tay sử dụng tài khoản dịch vụ mặc định của Compute Engine để tạo bản sao cho Công việc theo 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 thực thể 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.
Bên trong Cloud Shell, hãy tạo thực thể ứng dụng riêng tư.
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. Quy trình Vertex AI để kiểm tra khả năng kết nối với test-svc-1
Mở một thẻ Cloud Shell mới và cập nhật chế độ cài đặt dự án.
Trong Cloud Shell, hãy thực hiện như 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ừ quy trình Vertex AI đến test-svc-1, hãy tạo quy tắc tường lửa truy cập chỉ định tệp đính kèm mạng PSC làm nguồn (192.168.10.0/28) và địa chỉ IP test-svc-1 làm đích.
Bên trong Cloud Shell, hãy cập nhật dải đích để 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 hoạt động giao tiếp giữa Quy trình Vertex AI và máy ảo.
sudo tcpdump -i any icmp -nn
9. Thông tin cập nhật về Tác nhân dịch vụ Vertex AI
Quy trình 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 của Tệp đính kèm mạng PSC dùng để tạo Giao diện PSC. Để làm như vậy, quy trình Vertex AI sử dụng một trình đại diện dịch vụ (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'
Bên trong Cloud Shell, hãy cập nhật tài khoản tác nhân dịch vụ với 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 API Compute Engine 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 chú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 thực thể test-svc-1 của người dùng.
Chạy công việc huấn luyện trong phiên bản Vertex AI Workbench.
- Trong Google Cloud Console, hãy chuyển đến thẻ thực thể trên trang Vertex AI Workbench.
- Bên cạnh tên của phiên bản Vertex AI Workbench (workbench-tutorial), hãy nhấp vào Mở JupyterLab. Phiên bản Vertex AI Workbench sẽ mở trong JupyterLab.
- Chọn File (Tệp) > New (Mới) > Notebook (Sổ tay)
- Chọn Kernel (Hạt nhân) > Python 3
- Trong một ô mới của sổ tay, 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 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 bộ chứa duy nhất trên toàn cầu làm biến trong một ô mới của sổ tay
BUCKET_URI = f"gs://<your-bucket-name>"
Ví dụ:
BUCKET_URI = f"gs://psc-vertex-bucket"
- Trong một ô sổ tay mới, hãy tạo bộ chứa
! 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 để chạy công việc trong quy trình, cũng như cấp quyền thích 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 ô mới của sổ tay, hãy cấp cho tài khoản dịch vụ của bạn quyền đọc và ghi cấu phần phần mềm của quy trình trong bộ chứa đượ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 ô mới của sổ tay, hãy xác định các tham số của quy trình. Lưu ý: NETWORK_ATTACHMENT_NAME là Tệp đính kèm mạng PSC, 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 ô mới của sổ tay, hãy khởi chạy SDK Vertex AI
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 ô mới của sổ tay, 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 ô mới của sổ tay, hãy thực thi hàm tiện ích, đợ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 ô mới của sổ tay, hãy thực thi hàm tiện ích để 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 ô mới của sổ tay, 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 ô mới của sổ tay, 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à quan sát trạng thái công việc của 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 thực thi bước 17, 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 cho biết ping thành công từ quy trình Vertex AI và phản hồi từ test-svc-1.
Để xác thực lưu lượng truy cập ICMP giữa Quy trình Vertex AI 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, 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. AI trong quy trình Vertex AI để kiểm tra khả năng 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 truy cập để từ chối lưu lượng truy cập từ mạng con Vertex AI Pilelines (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, cuối cùng là thực thi các công việc của Quy trình chạy.
Trong ô Notebook, Trạng thái công việc của 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ừ chối lưu lượng truy cập vào tường lửa
Để từ chối kết nối từ quy trình Vertex AI đến test-svc-2, hãy tạo quy tắc tường lửa truy cập chỉ định tệp đính kèm mạng PSC làm nguồn (192.168.10.0/28) và địa chỉ IP test-svc-2 làm đích.
Bên trong Cloud Shell, hãy cập nhật dải đích để 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ừ ô trong Sổ tay
Trong một ô mới của sổ tay, hãy cập nhật TARGET_IP_ADDRESS để phản ánh Địa chỉ IP thu đượ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, công việc trong quy trình sẽ mất khoảng 8 phút để hoàn tất.
14. Không xác thực được kết nối với test-svc-2
Trong ô dùng để thực thi Công việc quy trình, hãy lưu ý quá trình chuyển đổi trạng thái từ PIPELINE_STATE_PENDING sang PIPELINE_STATE_FAILED cho biết ping không thành công từ quy trình Vertex AI và phản hồi từ test-svc-2.
Khi sử dụng Trình khám phá nhật ký, bạn có thể xem các mục 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 Hiển thị truy vấn rồi chèn bộ lọc bên dưới, 15 phút qua, sau đó chọn 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 Quy trình Vertex AI và Địa chỉ IP test-svc-2 xác thực quy tắc tường lửa truy cập bị từ chối.
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 Giao diện kết nối dịch vụ riêng tư 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 Ingress.
Bạn đã tạo cơ sở hạ tầng của người dùng và thêm một tệp đính kèm mạng cho phép dịch vụ Quy trình Vertex AI tạo máy ảo Giao diện PSC để kết nối 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 với các thực thể trong mạng của người dùng.
Cosmopup cho rằng các hướng dẫn này rất tuyệt vời!!