1. Giriş
Özel Service Connect arayüzü, bir üretici Sanal Özel Bulut (VPC) ağının tüketici ağındaki çeşitli hedeflere bağlantı başlatmasına olanak tanıyan bir kaynaktır. Üretici ve tüketici ağları farklı projelerde ve kuruluşlarda olabilir.
Bir 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 önemli farkı vardır:
- Ağ eki, bir üretici ağının tüketici ağına bağlantı başlatmasına (yönetilen hizmet çıkışı) olanak tanır. Bitiş noktası ise bir 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 çok NIC'li bir örnek oluşturmak için PSC ağ bağlantısından yararlanır. PSC ağ eki, tüketici ağından bir çok NIC ile dağıtıldığı için Vertex AI ardışık düzenleri, tüketici ağından kullanılabilen rotalara ulaşabilir.
Bu eğitimde, Şekil 1'de gösterildiği gibi üreticiden tüketicinin test örneklerine bağlantıya izin vermek veya bağlantıyı reddetmek için Cloud Güvenlik Duvarı kurallarını kullanan Vertex AI ardışık düzenleri için kapsamlı bir Private Service Connect (PSC) arayüzü mimarisi oluşturacaksınız.
Şekil 1
Tüketici VPC'sinde tek bir psc-network-attachment oluşturursunuz. Bu, aşağıdaki kullanım alanlarına neden olur:
- consumer-vpc'de, Vertex AI ardışık düzeni alt ağının (192.168.10.0/28) test-svc-1'e erişmesine izin veren bir giriş güvenlik duvarı kuralı oluşturun. TCPDUMP'ı kullanarak test-svc-1 için ardışık düzen işinden oluşturulan başarılı PING'i onaylama
- Tüketici VPC'sinde, test-svc-2 için Vertex AI ardışık düzeni alt ağını (192.168.10.0/28) 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ğ ekini nasıl kullanabilir?
- Üretici ile tüketici arasında iletişim kurma
- Vertex AI Pipelines'den tüketici sanal makinesine (test-svc-1) erişime izin verme
- Cloud Firewall'u kullanarak Verex AI Pipelines'den tüketici sanal makinesine (test-svc-2) erişimi reddetme
Gerekenler
- Google Cloud projesi
- IAM İzinleri
- Compute Örnek Yöneticisi (roles/compute.instanceAdmin)
- Compute Ağ Yöneticisi (roles/compute.networkAdmin)
- Compute Güvenlik Yöneticisi (roles/compute.securityAdmin)
- IAP Güvenli Tünel Kullanıcısı (roles/iap.tunnelResourceAccessor)
- Günlük Yöneticisi (roles/logging.admin)
- Not Defterleri Yöneticisi (roles/notebooks.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 Yöneticisi (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 $variables değişkenleri kullanılmaktadı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ğitim için 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ğinin harici IP adresi olmadığından, not defteri yazılımı paketi indirmeleriyle ilgili eğitici içerikte Cloud Ağ Adresi Çevrimi (NAT) kullanılır. Cloud NAT, çıkış NAT özellikleri sunar. Bu sayede, internet ana makinelerinin kullanıcı tarafından yönetilen bir dizüstü bilgisayarla iletişim başlatmasına izin verilmez. Bu da dizüstü bilgisayarı daha güvenli hale getirir.
Cloud Shell'de bölgesel bulut yönlendiricisini 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ğ bağlantısı alt ağını oluşturma
Cloud Shell'de, Vertex AI ardışık düzenlerinin kullandığı 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ğıdakileri yapan bir güvenlik duvarı kuralı oluşturun:
- IAP kullanılarak erişilmesini 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 makinesi ö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ıp saklayın:
Cloud Shell'de, test sanal makine örnekleri için describe komutunu çalıştırın.
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. Tek bir alt ağı bir ağ eki ile ilişkilendirirsiniz ve üretici (Vertex AI Pipelines), IP'leri Private Service Connect arayüzüne atar.
Ağ ekini 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ğ eklerinin listesini çıkarma
Cloud Shell'de ağ eki listelenir.
gcloud compute network-attachments list
Ağ eklerinin açıklanması
Cloud Shell'de ağ eki hakkında bilgi verin.
gcloud compute network-attachments describe psc-network-attachment --region=us-central1
Private Service Connect arayüzünü oluştururken üretici tarafından kullanılacak psc-network-attachment URI'sini not edin.
Aşağıdaki örnekte psc ağ eki URI'si şudur:
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 Kurulumu
Aşağıdaki bölümde, Jupyter Notebook oluşturma işleminde size yol gösterilmektedir. Bu not defteri, Vertex AI Pipelines'den test örneklerine PING gönderen bir Pipelines işi dağıtmak için kullanılır. Vertex AI ardışık düzenleri ile örnekleri içeren tüketici ağı arasındaki veri yolu, özel bir Service Connect ağ arayüzü 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 Yöneticisi 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 ardışık düzen işini örneklemek için Compute Engine varsayılan 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 notebook-sa hizmet hesabını 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. test-svc-1 bağlantısını test etmek için Vertex AI Pipelines
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 ardışık düzenlerinden test-svc-1'e bağlantıya izin vermek için kaynak olarak PSC ağ bağlantısını (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 parametresini 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
OS'de, icmp trafiğini yakalamak için tcpdump'u çalıştırın. Bu işletim sistemi oturumu, Vertex AI ardışık düzeni ile sanal makine arasındaki iletişimi doğrulamak için kullanılır.
sudo tcpdump -i any icmp -nn
9. Vertex AI Hizmet Aracısı Güncellemesi
Vertex AI Pipelines, PSC Arayüzü oluşturmak için kullanılan PSC Ağ Eki alt ağından IP adresi alma gibi işlemleri sizin adınıza gerçekleştirir. Vertex AI Pipelines bunu yapmak için 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'ya erişim izni verin. Erişim değişikliğinin geçerlilik kazanmasının biraz zaman alabileceğini unutmayın.
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'ni dağıtma
Aşağıdaki bölümde, tüketici test-svc-1 örneğine başarılı bir PING göndermek için bir not defteri oluşturacaksınız.
Eğitim işini Vertex AI Workbench örneğinde çalıştırın.
- Google Cloud Console'da Vertex AI Workbench sayfasındaki örnekler sekmesine gidin.
- Vertex AI Workbench örneğinizin adının (workbench-tutorial) yanındaki JupyterLab'i aç'ı tıklayın. Vertex AI Workbench örneğiniz JupyterLab'de açılır.
- Dosya > Yeni > Not Defteri'ni seçin.
- Çekirdek > 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
- Yeni not defteri hücresinde proje değişkenlerinizi ayarlama
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 küresel olarak benzersiz bir paket adı değişkeni tanımlama
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, ardışık düzen 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 havuzda ardışık düzen yapıları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 ardışık düzen parametrelerini tanımlayın. NETWORK_ATTACHMENT_NAME'in PSC Network Attachment olduğunu ve bu nedenle eşleşmesi gerektiğini unutmayın.
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şlatma
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 ardışık düzeni 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 yardımcı program işlevini yürütün, 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")
- Yeni bir not defteri hücresinde, ardışık düzeni çalıştırmak için yardımcı program 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 kanal oluşturma
from kfp import compiler
compiler.Compiler().compile(pipeline_func=pipeline, package_path='pipeline.yaml')
- Yeni bir not defteri hücresinde, TARGET_IP_ADDRESS değerini test-svc-1 için önceki adımda elde edilen IP adresini yansıtacak şekilde güncelleyin ve ardışık düzen iş 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 uygulandıktan sonra ardışık düzenin tamamlanması yaklaşık 8 dakika sürer.
12. test-svc-1 ile bağlantıyı doğrulama
17. adımı yürütmek için kullanılan hücrede, ardışık düzen iş durumunun PIPELINE_STATE_PENDING (beklemede) durumundan PIPELINE_STATE_RUNNING (çalışır) durumuna ve nihayetinde Vertex AI Pipelines'den gelen başarılı bir ping'i ve test-svc-1'den gelen yanıtı belirten PIPELINE_STATE_SUCCEEDED (başarılı) durumuna geçişini gözlemleyin.
Vertex AI ardışık düzeni ile test-svc-1 arasındaki ICMP trafiğini doğrulamak için test-svc-1 işletim sisteminde çalıştırılan ve iki yönlü trafiği gösteren günlükler sağlayan önceden 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, 192.168.20.2 ise test-svc-1'in IP adresini aldı. Ortamınızdaki 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 bağlantısı
Aşağıdaki bölümde, Vertex AI Pilelines alt ağındaki (192.168.10.0/28) test-svc-2'ye giden trafiği reddetmek için bir giriş güvenlik duvarı kuralı oluşturacak, ardından not defterini 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, ardışık düzen iş durumu Hata - Ardışık düzen başarısız olarak gösterilir. Ayrıca, güvenlik duvarı günlükleri başarısız bağlantıyla ilgili analizler sağlar.
Girişi reddetme güvenlik duvarı kuralı oluşturma
Vertex AI ardışık düzenlerinden test-svc-2'ye bağlantıyı reddetmek için kaynak olarak PSC ağ bağlantısını (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 parametresini 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
Ardışık düzen işini not defteri hücresinden yürütme
Yeni bir not defteri hücresinde, TARGET_IP_ADDRESS değerini test-svc-2 için önceki adımda elde edilen IP adresini yansıtacak şekilde güncelleyin ve Hattı İşlemleri İş 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}")
Ardışık düzen işinin yürütülmesi yaklaşık 8 dakika sürer.
14. test-svc-2 ile bağlantının başarısız olduğunu doğrulama
Pipelines işini yürütmek için kullanılan hücrede, Vertex AI Pipelines'den gelen başarısız ping'i ve test-svc-2'den gelen yanıtı belirten PIPELINE_STATE_PENDING durumundan PIPELINE_STATE_FAILED durumuna geçişi not edin.
Günlük Gezgini'ni kullanarak, Vertex AI Pipelines alt ağı (192.168.10.0/28) ve test-svc-2 IP adresinden oluşan Giriş Engelleme 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, ardından Sorguyu Çalıştır'ı tıklayın.
jsonPayload.rule_details.reference:("network:consumer-vpc/firewall:deny-icmp-vertex-pipelines-to-test-svc2-vm")
Bir günlük girişi seçin ve 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ş izni ve reddi güvenlik duvarını uygulayarak Private Service Connect arayüzünü ve tüketici ile üretici bağlantısını başarıyla yapılandırıp doğruladınız.
Tüketici altyapısını oluşturdunuz ve Vertex AI Pipelines hizmetinin, tüketici ile üretici iletişimini köprülemek için PSC arayüzü sanal makinesi 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ğitimlerin harika olduğunu düşünüyor.