1. Giriş
Private Service Connect arayüzü, üretici Sanal Özel Bulut (VPC) ağının tüketici ağındaki çeşitli hedeflerle bağlantı başlatmasına olanak tanıyan bir kaynaktır. Üretici ve tüketici ağları farklı projelerde ve kuruluşlarda olabilir.
Ağ eki ile Private Service Connect arayüzü arasındaki bağlantı, Private Service Connect uç noktası ile hizmet eki arasındaki bağlantıya benzer ancak iki temel farkı vardır:
- Ağ eki, üretici ağının tüketici ağına bağlantı başlatmasına (yönetilen hizmet çıkışı) olanak tanırken uç nokta, tüketici ağının üretici ağına bağlantı başlatmasına (yönetilen hizmet girişi) olanak tanır.
- Private Service Connect arayüz bağlantısı geçişlidir. Bu, bir üretici ağının, tüketici ağına bağlı diğer ağlarla iletişim kurabileceği anlamına gelir.
Ne oluşturacaksınız?
Google tarafından yönetilen bir kiracı projesinde dağıtılan Vertex AI Pipelines, üretici ve tüketici ağı arasında çoklu NIC örneği oluşturmak için PSC ağ ekinden yararlanır. PSC Ağ Eki, tüketici ağından çoklu NIC ile dağıtıldığından Vertex AI Pipelines, tüketici ağında bulunan rotalara ulaşabilir.
Bu eğitimde, üreticiden tüketicinin test örneklerine bağlantıya izin vermek veya bağlantıyı reddetmek için Cloud Firewall kurallarını kullanan, Vertex AI Pipelines için kapsamlı bir Private Service Connect (PSC) arayüzü mimarisi oluşturacaksınız. Bu mimari, Şekil 1'de gösterilmiştir.
Şekil 1

Tüketici VPC'sinde tek bir psc-network-attachment oluşturursunuz. Bu da aşağıdaki kullanım alanlarını sağlar:
- Tüketici VPC'sinde, Vertex AI Pipeline alt ağının (192.168.10.0/28) test-svc-1'e bağlanmasına izin veren bir giriş güvenlik duvarı kuralı oluşturun. TCPDUMP kullanarak, test-svc-1'e Pipeline İşinden oluşturulan PING'in başarılı olduğunu doğrulayın.
- Tüketici VPC'sinde, Vertex AI Pipeline alt ağının (192.168.10.0/28) test-svc-2'ye erişimini reddeden bir giriş güvenlik duvarı kuralı oluşturun. Günlük Gezgini tarafından oluşturulan güvenlik duvarı günlüklerine göre PING hatasını onaylayın.
Neler öğreneceksiniz?
- Ağ eki oluşturma
- Vertex AI Pipelines, PSC arayüzü oluşturmak için ağ eki nasıl kullanabilir?
- Üreticiden tüketiciye iletişimi nasıl kurabilirsiniz?
- Verex AI Pipelines'ın consumer VM'ye (test-svc-1) erişmesine nasıl izin verilir?
- Cloud Firewall'ı kullanarak Verex AI Pipelines'ın tüketici VM'si olan test-svc-2'ye erişimini engelleme
Gerekenler
- Google Cloud projesi
- IAM İzinleri
- Compute Örnek Yöneticisi (roles/compute.instanceAdmin)
- Compute Ağ Yöneticisi (roles/compute.networkAdmin)
- Compute Güvenliği Yöneticisi (roles/compute.securityAdmin)
- IAP Güvenli Tünel Kullanıcısı (roles/iap.tunnelResourceAccessor)
- Logging Yöneticisi (roles/logging.admin)
- Notebooks Admin (roles/notebooks.admin)
- Project IAM Admin (Proje IAM Yöneticisi) (roles/resourcemanager.projectIamAdmin)
- Kota Yöneticisi (roles/servicemanagement.quotaAdmin)
- Hizmet Hesabı Yöneticisi (roles/iam.serviceAccountAdmin)
- Hizmet Hesabı Kullanıcısı (roles/iam.serviceAccountUser)
- Vertex AI Admin (roles/aiplatform.admin)
2. Başlamadan önce
Bu eğitimde, Cloud Shell'de gcloud yapılandırmasının uygulanmasına yardımcı olmak için $değişkenleri kullanılır.
Cloud Shell'de aşağıdakileri yapın:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Projeyi, eğitimi destekleyecek şekilde güncelleme
Cloud Shell'de aşağıdakileri yapın:
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. Tüketici Kurulumu
Tüketici VPC'sini oluşturma
Cloud Shell'de aşağıdakileri yapın:
gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom
Tüketici alt ağlarını oluşturma
Cloud Shell'de aşağıdakileri yapın:
gcloud compute networks subnets create test-subnet-1 --project=$projectid --range=192.168.20.0/28 --network=consumer-vpc --region=us-central1
Cloud Shell'de aşağıdakileri yapın:
gcloud compute networks subnets create test-subnet-2 --project=$projectid --range=192.168.30.0/28 --network=consumer-vpc --region=us-central1
Cloud Shell'de aşağıdakileri yapın:
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
Cloud Router ve NAT yapılandırması
Not defteri örneğinde harici IP adresi olmadığından, not defteri yazılım paketi indirmeleri için eğitimde Cloud Ağ Adresi Çevrimi (NAT) kullanılır. Cloud NAT, çıkış NAT özellikleri sunar. Bu nedenle, internet ana makinelerinin kullanıcı tarafından yönetilen bir not defteriyle iletişimi başlatmasına izin verilmez. Bu da not defterini daha güvenli hale getirir.
Cloud Shell'de bölgesel Cloud Router'ı oluşturun.
gcloud compute routers create cloud-router-us-central1 --network consumer-vpc --region us-central1
Cloud Shell'de bölgesel Cloud NAT ağ geçidini oluşturun.
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
Private Service Connect ağ eki alt ağını oluşturma
Cloud Shell'de, Vertex AI Pipelines tarafından kullanılan ağ eki alt ağını oluşturun.
gcloud compute networks subnets create intf-subnet --project=$projectid --range=192.168.10.0/28 --network=consumer-vpc --region=us-central1
4. Kimliğe Duyarlı Proxy'yi (IAP) etkinleştirme
IAP'nin sanal makine örneklerinize bağlanmasına izin vermek için aşağıdaki özellikleri içeren bir güvenlik duvarı kuralı oluşturun:
- IAP kullanarak erişmek istediğiniz tüm sanal makine örnekleri için geçerlidir.
- 35.235.240.0/20 IP aralığından gelen giriş trafiğine izin verir. Bu aralık, IAP'nin TCP yönlendirme için kullandığı tüm IP adreslerini içerir.
Cloud Shell'de IAP güvenlik duvarı kuralını oluşturun.
gcloud compute firewall-rules create ssh-iap-consumer \
--network consumer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
5. Tüketici sanal makine örnekleri oluşturma
Cloud Shell'de test-svc-1 adlı tüketici sanal makine örneğini oluşturun.
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
Cloud Shell'de test-svc-2 adlı tüketici sanal makinesi örneğini oluşturun.
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
Örneklerin IP adreslerini alın ve saklayın:
Cloud Shell'de test sanal makine örneklerine karşı bir açıklama işlemi gerçekleştirin.
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:
Örnek:
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. Private Service Connect ağ eki
Ağ ekleri, Private Service Connect arayüzünün tüketici tarafını temsil eden bölgesel kaynaklardır. Bir ağ ekiyle tek bir alt ağ ilişkilendirirsiniz ve üretici (Vertex AI Pipelines), Private Service Connect arayüzüne IP'ler atar.
Ağ eki oluşturma
Cloud Shell'de ağ ekini oluşturun.
gcloud compute network-attachments create psc-network-attachment \
--region=us-central1 \
--connection-preference=ACCEPT_MANUAL \
--subnets=intf-subnet
Ağ eklerini listeleme
Cloud Shell'de ağ ekini listeleyin.
gcloud compute network-attachments list
Ağ eklerini açıklama
Cloud Shell'de ağ ekini açıklayın.
gcloud compute network-attachments describe psc-network-attachment --region=us-central1
Üretici, Private Service Connect arayüzünü oluştururken kullanılacak psc-network-attachment URI'sini not edin.
Aşağıdaki örnekte psc ağ eki URI'si şöyledir:
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. Vertex AI Workbench'i ayarlama
Aşağıdaki bölümde, Jupyter Notebook oluşturma konusunda size yol gösterilecektir. Bu not defteri, Vertex AI Pipelines'dan test örneklerine PING gönderen bir Pipelines işini dağıtmak için kullanılır. Vertex AI Pipelines ile örnekleri içeren tüketici ağı arasındaki veri yolu, Private Service Connect ağ arayüzünü kullanır.
Kullanıcı tarafından yönetilen hizmet hesabı oluşturma
Aşağıdaki bölümde, eğitimde kullanılan Vertex AI Workbench örneğiyle ilişkilendirilecek bir hizmet hesabı oluşturacaksınız.
Eğitimde, hizmet hesabına aşağıdaki roller uygulanır:
Cloud Shell'de hizmet hesabını oluşturun.
gcloud iam service-accounts create notebook-sa \
--display-name="notebook-sa"
Cloud Shell'de hizmet hesabını Storage Admin rolüyle güncelleyin.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"
Cloud Shell'de hizmet hesabını Vertex AI Kullanıcısı rolüyle güncelleyin.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
Cloud Shell'de hizmet hesabını Artifact Registry Yöneticisi rolüyle güncelleyin.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"
Cloud Shell'de, not defteri hizmet hesabının Pipeline Job'u oluşturmak için varsayılan Compute Engine hizmet hesabını kullanmasına izin verin.
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"
Vertex AI Workbench örneği oluşturma
Aşağıdaki bölümde, daha önce oluşturulan hizmet hesabını (notebook-sa) içeren bir Vertex AI Workbench örneği oluşturun.
Cloud Shell'de private-client örneğini oluşturun.
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'ın test-svc-1 bağlantısı
Yeni bir Cloud Shell sekmesi açın ve proje ayarlarınızı güncelleyin.
Cloud Shell'de aşağıdakileri yapın:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Vertex AI Pipelines'dan test-svc-1'e bağlantıya izin vermek için kaynak olarak PSC Network Attachment'ı (192.168.10.0/28) ve hedef olarak test-svc-1 IP adresini belirten bir giriş güvenlik duvarı kuralı oluşturun.
Cloud Shell'de, destination-range'i test-svc-1 IP adresinizle eşleşecek şekilde güncelleyin.
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
Örnek:
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
Cloud Shell'de IAP'yi kullanarak test-svc-1 örneğine giriş yapın.
gcloud compute ssh test-svc-1 --project=$projectid --zone=us-central1-a --tunnel-through-iap
İşletim sisteminde, tüm ICMP trafiğini yakalamak için tcpdump'ı çalıştırın. Bu işletim sistemi oturumu, Vertex AI Pipeline ile sanal makine arasındaki iletişimi doğrulamak için kullanılır.
sudo tcpdump -i any icmp -nn
9. Vertex AI Service Agent Update
Vertex AI Pipelines, PSC arayüzünü oluşturmak için kullanılan PSC Network Attachment alt ağından IP adresi alma gibi işlemleri sizin adınıza gerçekleştirir. Bunu yapmak için Vertex AI Pipelines, Ağ yöneticisi izni gerektiren bir hizmet aracısı (aşağıda listelenmiştir) kullanır.
service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com
Cloud Shell'de proje numaranızı alın.
gcloud projects describe $projectid | grep projectNumber
Örnek:
gcloud projects describe $projectid | grep projectNumber:
projectNumber: '795057945528'
Cloud Shell'de, hizmet aracısı hesabını compute.networkAdmin rolüyle güncelleyin.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-<your-projectnumber>@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"
Örnek:
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-795057945528@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"
10. Varsayılan Hizmet Hesabı Güncellemesi
Compute Engine API'yi etkinleştirin ve varsayılan hizmet hesabınıza Vertex AI'ye erişim izni verin. Erişim değişikliğinin geçerlilik kazanması biraz zaman alabilir.
Cloud Shell'de varsayılan hizmet hesabını aiplatform.user rolüyle güncelleyin.
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:<your-projectnumber>-compute@developer.gserviceaccount.com" \
--role="roles/aiplatform.user"
Örnek:
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:795057945528-compute@developer.gserviceaccount.com" \
--role="roles/aiplatform.user"
11. Vertex AI Pipelines işini dağıtma
Aşağıdaki bölümde, tüketici test-svc-1 örneğine başarılı bir PING işlemi gerçekleştirmek için not defteri oluşturacaksınız.
Eğitim işini Vertex AI Workbench örneğinde çalıştırma
- Google Cloud Console'da Vertex AI Workbench sayfasındaki örnekler sekmesine gidin.
- Vertex AI Workbench örneğinizin adının (workbench-tutorial) yanındaki Open JupyterLab'i (JupyterLab'i aç) tıklayın. Vertex AI Workbench örneğiniz JupyterLab'de açılır.
- Dosya > Yeni > Not defteri'ni seçin.
- Kernel > Python 3'ü seçin.
- Yeni bir not defteri hücresinde, pip'in en son sürümüne sahip olduğunuzdan emin olmak için aşağıdaki komutu çalıştırın:
! pip3 install --upgrade --quiet google-cloud-aiplatform \
kfp \
google-cloud-pipeline-components
- Proje değişkenlerinizi yeni not defteri hücresinde ayarlayın.
PROJECT_ID = "<your-projectid>"
REGION = "<your-region>"
NETWORK_ATTACHMENT_NAME = "psc-network-attachment"
Örnek:
PROJECT_ID = "psc-vertex"
REGION = "us-central1"
NETWORK_ATTACHMENT_NAME = "psc-network-attachment"
- Yeni bir not defteri hücresinde değişken olarak küresel çapta benzersiz bir paket adı tanımlayın.
BUCKET_URI = f"gs://<your-bucket-name>"
Örnek:
BUCKET_URI = f"gs://psc-vertex-bucket"
- Yeni bir not defteri hücresinde paketi oluşturun.
! gsutil mb -l {REGION} -p {PROJECT_ID} {BUCKET_URI}
Aşağıdaki bölümde, işlem hattı işini çalıştırmak için kullanılacak varsayılan Compute Engine hizmet hesabını belirleyecek ve bu hesaba doğru izinleri vereceksiniz.
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}")
Başarılı bir yürütme işlemini onaylamak için hizmet hesabınız ve proje numaranız yazdırılır.
- Yeni bir not defteri hücresinde, hizmet hesabınıza önceki adımda oluşturulan paketteki işlem hattı yapıtlarını okuma ve yazma izni verin.
! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectCreator {BUCKET_URI}
! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectViewer {BUCKET_URI}
- Yeni bir not defteri hücresinde, işlem hattı parametrelerini tanımlayın. NETWORK_ATTACHMENT_NAME, PSC Network Attachment olduğundan eşleşmesi gerekir.
PIPELINE_ROOT = f"{BUCKET_URI}/pipeline_root/psc_test"
NETWORK_ATTACHMENT_URI = f"projects/{PROJECT_NUMBER}/regions/{REGION}/networkAttachments/{NETWORK_ATTACHMENT_NAME}"
- Yeni bir not defteri hücresinde Vertex AI SDK'sını başlatın.
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')
- Yeni bir not defteri hücresinde test bileşenini tanımlayın.
@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
"""
],
)
- Yeni bir not defteri hücresinde işlem hattını tanımlayın.
@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
- Yeni bir not defteri hücresinde hizmet işlevini yürütün ve ardışık düzenin tamamlanmasını bekleyin.
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")
- Ardışık düzeni çalıştırmak için yeni bir not defteri hücresinde hizmet işlevini yürütün.
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
- Yeni bir not defteri hücresinde işlem hattını derleyin.
from kfp import compiler
compiler.Compiler().compile(pipeline_func=pipeline, package_path='pipeline.yaml')
- Yeni bir not defteri hücresinde TARGET_IP_ADDRESS'i test-svc-1 için önceki adımda elde edilen IP adresini yansıtacak şekilde güncelleyin ve işlem hattı işinin durumunu gözlemleyin.
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}")
Örnek:
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}")
17. adım yürütüldükten sonra ardışık düzenin tamamlanması yaklaşık 8 dakika sürer.
12. test-svc-1 ile bağlantıyı doğrulayın.
17. adımı yürütmek için kullanılan hücrede, ardışık düzen işi durumunun PIPELINE_STATE_PENDING'den PIPELINE_STATE_RUNNING'e ve nihayetinde PIPELINE_STATE_SUCCEEDED'a geçişini gözlemleyin. Bu, Vertex AI Pipelines'dan başarılı bir ping ve test-svc-1'den yanıt alındığını gösterir.
Vertex AI Pipeline ile test-svc-1 arasındaki ICMP trafiğini doğrulamak için test-svc-1 işletim sisteminde yürütülen ve çift yönlü trafiği gösteren günlükler sağlayan, daha önce oluşturulmuş tcpdump oturumunu görüntüleyin.
tcpdump örneğinde, Vertex AI Pipelines, 192.168.10.3 IP adresini 192.168.10.0/28 alt ağından almıştır. 192.168.20.2, test-svc-1'in IP adresidir. Ortamınızda IP adreslerinin farklı olabileceğini unutmayın.
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 to test-svc-2 connectivity
Aşağıdaki bölümde, Vertex AI Pipelines alt ağından (192.168.10.0/28) test-svc-2'ye gelen trafiği reddetmek için bir giriş güvenlik duvarı kuralı oluşturacak, ardından Notebook'u test-svc-2 IP adresini yansıtacak şekilde güncelleyecek ve son olarak Pipelines Jobs çalıştırmasını yürüteceksiniz.
Not defteri hücresinde, işlem hattı işinin durumu "Hata - İşlem Hattı Başarısız Oldu" olarak gösterilir. Ayrıca, güvenlik duvarı günlükleri başarısız bağlantıyla ilgili bilgiler sağlar.
Girişi reddeden bir güvenlik duvarı kuralı oluşturma
Vertex AI Pipelines'dan test-svc-2'ye bağlantıyı reddetmek için kaynak olarak PSC Network Attachment'ı (192.168.10.0/28) ve hedef olarak test-svc-2 IP adresini belirten bir giriş güvenlik duvarı kuralı oluşturun.
Cloud Shell'de, destination-range değerini test-svc-2 IP adresinizle eşleşecek şekilde güncelleyin.
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
Örnek:
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
Not defteri hücresinden ardışık düzen işi yürütme
Yeni bir not defteri hücresinde TARGET_IP_ADDRESS'i test-svc-2 için önceki adımda elde edilen IP adresini yansıtacak şekilde güncelleyin ve Pipelines İş Durumu'nu gözlemleyin.
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}")
Örnek:
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}")
Yürütüldükten sonra ardışık düzen işinin tamamlanması yaklaşık 8 dakika sürer.
14. test-svc-2 ile bağlantı doğrulanamadı
Pipelines işini yürütmek için kullanılan hücrede, Vertex AI Pipelines'dan gelen ping'in ve test-svc-2'den gelen yanıtın başarısız olduğunu gösteren PIPELINE_STATE_PENDING'den PIPELINE_STATE_FAILED'a geçiş durumunu not edin.
Günlük Gezgini'ni kullanarak, Vertex AI Pipelines alt ağından (192.168.10.0/28) ve test-svc-2 IP adresinden oluşan Ingress Deny kuralıyla eşleşen güvenlik duvarı günlük kaydı girişlerini görüntüleyebilirsiniz.
Sorguyu Göster'i seçin ve aşağıdaki filtreyi ekleyin. Son 15 dakika ve ardından Sorguyu Çalıştır'ı seçin.
jsonPayload.rule_details.reference:("network:consumer-vpc/firewall:deny-icmp-vertex-pipelines-to-test-svc2-vm")


Bir günlük girişi seçin, ardından iç içe yerleştirilmiş alanları genişleterek reddedilen giriş güvenlik duvarı kuralını doğrulayan Vertex AI Pipelines ve test-svc-2 IP adresinden oluşan bilgi öğelerini gösterin.

15. Temizleme
Cloud Shell'den eğitim bileşenlerini silin.
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. Tebrikler
Tebrikler! Giriş için izin verme ve reddetme güvenlik duvarını uygulayarak Private Service Connect arayüzünü, tüketiciyi ve üretici bağlantısını başarıyla yapılandırdınız ve doğruladınız.
Tüketici altyapısını oluşturdunuz ve Vertex AI Pipelines hizmetinin tüketici ile üretici arasındaki iletişimi köprülemek için PSC arayüzü VM'si oluşturmasına olanak tanıyan bir ağ eki eklediniz. Tüketici VPC ağında, tüketici ağındaki örneklere bağlantıya izin veren ve bağlantıyı reddeden güvenlik duvarı kurallarını nasıl oluşturacağınızı öğrendiniz.
Cosmopup, eğitici içeriklerin harika olduğunu düşünüyor.
