1. Giriş
Private Service Connect arayüzü, üretici Sanal Özel Bulut (VPC) ağının tüketici VPC 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, Private Service Connect arayüzünden gelen bağlantıyı kabul ederse Google Cloud, arayüze ağ eki tarafından belirtilen bir tüketici alt ağından IP adresi atar. Tüketici ve üretici ağları bağlıdır ve dahili IP adreslerini kullanarak iletişim kurabilir.
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 yapımcı ağının, tüketici ağına bağlı diğer ağlarla iletişim kurabileceği anlamına gelir.
Şekil:1
Vertex AI PSC arayüzü erişilebilirliğiyle ilgili dikkat edilmesi gereken noktalar
- Vertex AI PSC arayüzü, trafiği RFC1918 adres bloğundaki bir VPC veya şirket içi hedeflere yönlendirebilir.
- RFC-1918 olmayan adres bloklarını hedefleyen PSC arayüzü, tüketicinin VPC'sinde RFC-1918 adresiyle açık bir proxy dağıtılmasını gerektirir. Vertex AI dağıtımında, hedef uç noktanın FQDN'si ile birlikte proxy tanımlanmalıdır. Aşağıdaki RFC-1918 dışı CIDR'lere yönlendirmeyi kolaylaştırmak için tüketici VPC'sinde yapılandırılmış açık proxy modu Secure Web Proxy'yi (SWP) temsil eden Şekil 1'e bakın:
- 240.0.0.0/4
- 203.0.113.0/24
- 10.10.20.0/28 için proxy gerekmez, RFC-1918 aralığına girer.
- İnternet Çıkışı
Google tarafından yönetilen kiracı ağı için internet bağlantısı:
VPC-SC olmadan Vertex AI PSC arayüzü
- Dağıtımınızı yalnızca bir PSC arayüzüyle yapılandırdığınızda varsayılan internet erişimi korunur. Bu giden trafik, doğrudan Google tarafından yönetilen kiracı ağından çıkar.
VPC-SC ile Vertex AI PSC arayüzü
- Projeniz bir VPC Hizmet Kontrolleri çevresinin parçası olduğunda, Google tarafından yönetilen kiracının varsayılan internet erişimi, veri hırsızlığını önlemek için çevre tarafından engellenir.
- Bu senaryoda dağıtımın genel internete erişmesine izin vermek için trafiği Vertex AI'a bağlı VPC'niz üzerinden yönlendiren güvenli bir çıkış yolu açıkça yapılandırmanız gerekir. Bunu yapmanın bir yolu, RFC 1918 adresine sahip VPC ağına bir Cloud NAT ağ geçidiyle eşleştirilmiş proxy sunucusu dağıtmaktır. Trafiği internete yönlendirmek için güvenli web proxy'sini de kullanabileceğinizi unutmayın. Güvenli Web Proxy oluşturma işlemi, otomatik olarak bir Cloud NAT ağ geçidi oluşturur.
Daha fazla bilgi için aşağıdaki kaynaklara bakın:
Vertex AI kaynakları için Private Service Connect arayüzü oluşturma | Google Cloud
Ne oluşturacaksınız?
Bu eğitimde, class-e-subnet içinde RFC 1918 olmayan bir uç noktayı hedefleyerek Şekil 1'de gösterildiği gibi üreticiden tüketicinin işlemine bağlantıya izin vermek için Private Service Connect (PSC) arayüzü ile kapsamlı bir Vertex AI Pipelines dağıtımı oluşturacaksınız.
Şekil 2
Kiracı projesinde Vertex AI Training'i barındıran tüketici sanal makinelerini çözümlemek için DNS eşlemeden yararlanarak tüketici VPC'sinde tek bir psc-network-attachment oluşturursunuz. Bu da aşağıdaki kullanım alanlarını sağlar:
Vertex AI Pipelines'ı dağıtın ve güvenli web proxy'sini açık proxy modunda yapılandırarak E sınıfı alt ağındaki bir sanal makineye karşı wget işlemi gerçekleştirmesine izin verin.
Neler öğreneceksiniz?
- Ağ eki oluşturma
- Üreticinin PSC arayüzü oluşturmak için ağ eki nasıl kullanabileceği
- Google tarafından yönetilen VPC ağlarından, tüketici VPC ağında yapılandırılan özel alanları çözümlemek için DNS eşlemesi oluşturma
- Trafiği Vertex AI PSC arayüzünden Secure Web Proxy'ye yönlendirme
- Vertex AI Pipelines'dan RFC-1918 olmayan IP adresi alanıyla iletişim kurma
Gerekenler
Google Cloud projesi
IAM İzinleri
- Compute Ağ Yöneticisi (roles/compute.networkAdmin)
- Compute Örnek Yöneticisi (roles/compute.instanceAdmin)
- Compute Güvenliği Yöneticisi (roles/compute.securityAdmin)
- Güvenlik Politikası Yöneticisi(roles/compute.orgSecurityPolicyAdmin)
- DNS Yöneticisi (roles/dns.admin)
- 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)
- Hizmet Hesabı Yöneticisi (roles/iam.serviceAccountAdmin)
- Hizmet Hesabı Kullanıcısı (roles/iam.serviceAccountUser)
- Hizmet Kullanımı Yöneticisi (roles/serviceusage.serviceUsageAdmin)
2. Başlamadan önce
Projeyi, eğitimi destekleyecek şekilde güncelleme
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-ID]
projectid=YOUR-PROJECT-ID
echo $projectid
API Etkinleştirme
Cloud Shell'de aşağıdakileri yapın:
gcloud services enable "compute.googleapis.com"
gcloud services enable "aiplatform.googleapis.com"
gcloud services enable "dns.googleapis.com"
gcloud services enable "notebooks.googleapis.com"
gcloud services enable "storage.googleapis.com"
gcloud services enable "cloudresourcemanager.googleapis.com"
gcloud services enable "artifactregistry.googleapis.com"
gcloud services enable "cloudbuild.googleapis.com"
gcloud services enable "networkservices.googleapis.com"
gcloud services enable "networksecurity.googleapis.com"
gcloud services enable "certificatemanager.googleapis.com"
3. 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 class-e-subnet --project=$projectid --range=240.0.0.0/4 --network=consumer-vpc --region=us-central1
Cloud Shell'de aşağıdakileri yapın:
gcloud compute networks subnets create rfc1918-subnet1 --project=$projectid --range=10.10.10.0/28 --network=consumer-vpc --region=us-central1 --enable-private-ip-google-access
Yalnızca proxy alt ağı oluşturma
gcloud compute networks subnets create proxy-only-uscentral1 \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=us-central1 \
--network=consumer-vpc \
--range=10.10.100.0/26
Private Service Connect ağ eki alt ağını oluşturma
Cloud Shell'de aşağıdakileri yapın:
gcloud compute networks subnets create intf-subnet \
--project=$projectid \
--range=192.168.10.0/28 \
--network=consumer-vpc \
--region=us-central1 \
--enable-private-ip-google-access
Cloud Router ve NAT yapılandırması
Google Cloud Secure Web Proxy, dağıtıldığı bölgede bir Cloud NAT ağ geçidini ve ilişkili bir Cloud Router'ı otomatik olarak sağlar ve yönetir.
4. IAP'yi etkinleştirme
IAP'nin (Identity Aware Proxy) 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 tüketici sanal makine örneğini (class-e-vm) oluşturun.
gcloud compute instances create class-e-vm \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--shielded-secure-boot \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=class-e-subnet \
--private-network-ip=240.0.0.2
6. Secure Web Proxy
Güvenli Web Proxy'nin Açık Modu (veya Açık Proxy Yönlendirme Modu), istemci iş yüklerinin yönlendirme proxy'si olarak SWP'nin dahili IP adresini veya tam etki alanı adını ve bağlantı noktasını kullanacak şekilde açıkça yapılandırılması gereken bir dağıtım yöntemidir.
Aşağıdaki adımlarda YOUR-PROJECT-ID değerini proje kimliğinizle değiştirdiğinizden emin olun.
Web proxy'si oluşturma:
Cloud Shell'de bir metin düzenleyici kullanarak policy.yaml dosyasını oluşturun:
cat > policy.yaml << EOF
description: basic Secure Web Proxy policy
name: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/policy1
EOF
Cloud Shell'de Secure Web Proxy politikasını oluşturun:
gcloud network-security gateway-security-policies import policy1 \
--source=policy.yaml \
--location=us-central1
Aşağıdaki bölümde, class-e-vm'a sessionMatcher'ya göre erişime izin verecek bir kural oluşturun.
Cloud Shell'de bir metin düzenleyici kullanarak rule1.yaml dosyasını oluşturun:
cat > rule1.yaml << EOF
name: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/policy1/rules/allow-nonrfc-classe
description: Allow nonrfc class-e
enabled: true
priority: 1
basicProfile: ALLOW
sessionMatcher: host() == 'class-e-vm.demo.com'
EOF
Aşağıdaki bölümde, "class-e" VM'sine apache2 yüklenmesine izin vermek için Jupyter not defteri erişimine izin veren bir kural oluşturun.
Cloud Shell'de bir metin düzenleyici kullanarak rule2.yaml dosyasını oluşturun:
cat > rule2.yaml << EOF
name: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/policy1/rules/allow-apache2
description: Allow Apache2 install on class-e VM
enabled: true
priority: 2
basicProfile: ALLOW
sessionMatcher: inIpRange(source.ip,'240.0.0.2')
EOF
Cloud Shell'de security policy rule1'i oluşturun:
gcloud network-security gateway-security-policies rules import allow-nonrfc-classe \
--source=rule1.yaml \
--location=us-central1 \
--gateway-security-policy=policy1
Cloud Shell'de security policy rule2'yi oluşturun:
gcloud network-security gateway-security-policies rules import allow-apache2 \
--source=rule2.yaml \
--location=us-central1 \
--gateway-security-policy=policy1
Vertex AI Training'i desteklemek için Secure Web Proxy ağ geçidini şu ayarlarla yapılandırın:
- Dinleme bağlantı noktası: Vertex AI uygulamasının kod açık proxy ayarlarında yapılandırılan bağlantı noktasını kullanın (ör. 8080).
- Adres: RFC 1918 aralığından özel bir IP adresi atayın.
- Yönlendirme Modu: Bunu EXPLICIT_ROUTING_MODE olarak ayarlayın.
Cloud Shell'de, güvenli web proxy ağ geçidini tanımlamak için gateway.yaml dosyası oluşturun:
cat > gateway.yaml << EOF
name: projects/$projectid/locations/us-central1/gateways/swp1
type: SECURE_WEB_GATEWAY
addresses: ["10.10.10.5"]
ports: [8080]
gatewaySecurityPolicy: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/policy1
network: projects/$projectid/global/networks/consumer-vpc
subnetwork: projects/$projectid/regions/us-central1/subnetworks/rfc1918-subnet1
routingMode: EXPLICIT_ROUTING_MODE
EOF
Cloud Shell'de Secure Web Proxy örneğini oluşturun:
gcloud network-services gateways import swp1 \
--source=gateway.yaml \
--location=us-central1
Güvenli Web Proxy'sinin dağıtılması birkaç dakika sürebilir.

7. 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, bu alt ağdan Private Service Connect arayüzüne IP'ler atar. Alt ağ, ağ ekiyle aynı bölgede olmalıdır. Ağ eki, üretici hizmetiyle aynı bölgede olmalıdır.
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
Not: Vertex AI, Google tarafından yönetilen kiracı projesi olarak yapılandırıldığında bu ekte kabul edilen proje kimliğini açıkça belirtmeniz gerekmez. Proje, "Otomatik olarak kabul et" şeklinde yapılandırılmış gibi otomatik olarak eklenir.
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
Üreticinin Private Service Connect arayüzünü oluştururken kullanacağı PSC ağ eki adını (psc-network-attachment) not edin.
PSC ağ eki URL'sini Cloud Console'da görüntülemek için şuraya gidin:
Ağ Hizmetleri → Private Service Connect → Ağ Eki → psc-network-attachment

8. Özel DNS bölgesi
demo.com için bir Cloud DNS bölgesi oluşturacak ve bu bölgeyi sanal makinelerinizin IP adreslerini işaret eden A kayıtlarıyla dolduracaksınız. Daha sonra, Vertex AI Pipelines işinde DNS eşleme dağıtılacak. Bu sayede, tüketicinin DNS kayıtlarına erişilebilecek.
Cloud Shell'de aşağıdakileri yapın:
gcloud dns --project=$projectid managed-zones create private-dns-codelab --description="" --dns-name="demo.com." --visibility="private" --networks="https://compute.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc"
Cloud Shell'de sanal makine için kayıt kümesini oluşturun class-e-vm. IP adresini ortamınızın çıkışına göre güncellediğinizden emin olun.
gcloud dns --project=$projectid record-sets create class-e-vm.demo.com. --zone="private-dns-codelab" --type="A" --ttl="300" --rrdatas="240.0.0.2"
Cloud Shell'de, Secure Web Proxy için kayıt kümesini oluşturun. IP adresini ortamınızın çıkışına göre güncellediğinizden emin olun.
gcloud dns --project=$projectid record-sets create explicit-swp.demo.com. --zone="private-dns-codelab" --type="A" --ttl="300" --rrdatas="10.10.10.5"
PSC arayüzünden erişime izin verecek bir Cloud Firewall kuralı oluşturun
Aşağıdaki bölümde, PSC Ağ Eklentisi'nden gelen trafiğin tüketicinin VPC'sindeki RFC 1918 işlem kaynaklarına erişmesine izin veren bir güvenlik duvarı kuralı oluşturun.
Cloud Shell'de, yalnızca proxy kullanılan alt ağdan class-e alt ağına erişime izin veren girişe izin veren güvenlik duvarı kuralını oluşturun. SWP, kaynak adres olarak yalnızca proxy alt ağıyla bağlantı başlattığında.
gcloud compute firewall-rules create allow-access-to-class-e \
--network=consumer-vpc \
--action=ALLOW \
--rules=ALL \
--direction=INGRESS \
--priority=1000 \
--source-ranges="10.10.100.0/28" \
--destination-ranges="240.0.0.0/4" \
--enable-logging
9. Jupyter Notebook oluşturma
Aşağıdaki bölümde, Jupyter Notebook oluşturma konusunda size yol gösterilir. Bu not defteri, Vertex AI Pipelines'dan test örneklerine wget gönderen bir Vertex AI 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 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:
- Depolama Alanı Yöneticisi
- Vertex AI User
- Artifact Registry Yöneticisi
- Cloud Build Düzenleyicisi
- IAM Hizmet Hesabı Kullanıcısı
Cloud Shell'e giriş yapın ve aşağıdakileri uygulayın:
Hizmet hesabını oluşturun.
gcloud iam service-accounts create notebook-sa \
--display-name="notebook-sa"
Hizmet hesabını Depolama 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"
Hizmet hesabını AI Platform 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"
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"
Hizmet hesabını Cloud Build Düzenleyici rolüyle güncelleyin.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/cloudbuild.builds.editor"
Not defteri hizmet hesabının, 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"
10. Vertex AI Workbench örneği oluşturma
Aşağıdaki bölümde, daha önce oluşturulan hizmet hesabını içeren bir Vertex AI Workbench örneği oluşturun notebook-sa.
Cloud Shell'de özel istemci örneğini oluşturun.
gcloud workbench instances create workbench-tutorial --vm-image-project=cloud-notebooks-managed --vm-image-family=workbench-instances --machine-type=n1-standard-4 --location=us-central1-a --subnet-region=us-central1 --subnet=rfc1918-subnet1 --disable-public-ip --shielded-secure-boot=true --shielded-integrity-monitoring=true --shielded-vtpm=true --service-account-email=notebook-sa@$projectid.iam.gserviceaccount.com
11. Vertex AI Service Agent Update
Vertex AI, 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. Vertex AI, bu işlemi gerçekleştirmek 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
Not: Hizmet aracısı izinlerini güncellemeden önce Vertex AI API'nin etkinleştirildiğinden emin olmak için Cloud Console'da Vertex AI'a gidin.
Cloud Shell'de:
Proje numaranızı alın.
gcloud projects describe $projectid | grep projectNumber
Proje numaranızı ayarlayın.
projectnumber=YOUR-PROJECT-NUMBER
AI Platform için bir hizmet hesabı oluşturun. Projenizde mevcut bir hizmet hesabınız varsa bu adımı atlayın.
gcloud beta services identity create --service=aiplatform.googleapis.com --project=$projectnumber
Hizmet aracısı hesabını compute.networkAdmin rolüyle güncelleyin.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"
Hizmet aracısı hesabını dns.peer rolüyle güncelleme
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/dns.peer"
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.
Varsayılan hizmet hesabını aşağıdaki gibi güncellemek için Cloud Shell'i kullanın:
Varsayılan hizmet hesabını aiplatform.user rolüyle güncelleme
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
--role="roles/aiplatform.user"
Varsayılan hizmet hesabını storage.admin rolüyle güncelleme
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
--role="roles/storage.admin"
Varsayılan hizmet hesabını artifactregistry.admin rolüyle güncelleme
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
--role="roles/artifactregistry.admin"
12. "class-e-vm" üzerinde Apache2'yi yükleyin ve Tcpdump'ı etkinleştirin:
class-e-vm Secure Web Proxy üzerinden apache2'yi yükleyin:
Yeni bir Cloud Shell sekmesi açın, proje değişkeninizi güncelleyin ve class-e-vm'ye SSH ile bağlanın.
gcloud compute ssh --zone us-central1-a "class-e-vm" --tunnel-through-iap --project $projectid
sudo apt-get -o Acquire::http::Proxy="http://10.10.10.5:8080" update
sudo apt-get -o Acquire::http::Proxy="http://10.10.10.5:8080" install apache2 -y
sudo service apache2 restart
echo 'class-e Server !!' | sudo tee /var/www/html/index.html
Trafiği hedeflere yönlendirmek için Secure Web Proxy tarafından kullanılan yalnızca proxy alt ağında tcpdump filtreleme işlemini yürütün.
class-e-vm işletim sisteminden proxy-vm alt ağında tcpdump filtreleme işlemini yürütün.
sudo tcpdump -i any net 10.10.100.0/24 -nn
Not: JupyterLab oturumunun açılması için workbench-tutorial örnek alt ağında Özel Google Erişimi'ni etkinleştirdiğinizden emin olun.
13. Vertex AI Pipelines işini dağıtma
Aşağıdaki bölümde, Vertex AI Pipelines'dan açık proxy'ye başarılı bir wget işlemi gerçekleştirmek için bir not defteri oluşturacaksınız. Bu sayede, class-e-vm gibi RFC 1918 olmayan VM'lere ulaşabilirsiniz. Vertex AI Pipelines'ın rfc1918-vm adresine erişmesi için açık proxy gerekmez. Bunun nedeni, hedefin RFC 1918 IP adresi olmasıdır.
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.
JupyterLab not defterinizde yeni bir hücre oluşturun, aşağıdaki kodu güncelleyin ve çalıştırın. PROJECT_ID'yi ortamınızın ayrıntılarıyla güncellediğinizden emin olun.
import json
import requests
import pprint
PROJECT_ID = 'YOUR-PROJECT-ID' #Enter your project ID
PROJECT_NUMBER=!gcloud projects list --filter="project_id:$PROJECT_ID" --format="value(PROJECT_NUMBER)"
PROJECT_NUMBER=str(PROJECT_NUMBER).strip('[').strip(']').strip("'")
print(PROJECT_NUMBER)
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın.
# us-central1 is used for the codelab
REGION = "us-central1" #@param {type:"string"}
SERVICE_NAME = "aiplatform" #@param {type:"string"}
SERVICE ="{}.googleapis.com".format(SERVICE_NAME)
ENDPOINT="{}-{}.googleapis.com".format(REGION, SERVICE_NAME)
API_VERSION = "v1" # @param {type: "string"}
LOCATION = REGION
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdaki yapılandırmayı çalıştırın. Aşağıdaki önemli noktaları unutmayın:
- proxy_server = "http://explicit-swp.demo.com:8080"
- Tüketici VPC'sinde dağıtılan proxy VM ile bir FQDN ilişkilendirilir. FQDN'yi sonraki bir adımda çözmek için DNS eşlemesini kullanıyoruz.
%%writefile main.py
import logging
import socket
import sys
import os
def make_api_request(url: str, proxy_vm_ip: str, proxy_vm_port: str):
"""
Makes a GET request to a nonRFC-1918 API and saves the response.
Args:
url: The URL of the API to send the request to.
"""
import requests
try:
# response = requests.get(url)
proxy_server = f"http://explicit-swp.demo.com:8080" # replace it with your Secure Web proxy Ip-address and the port.
proxies = {
"http": proxy_server,
"https": proxy_server,
}
response = requests.get(url, proxies=proxies)
logging.info(response.text)
response.raise_for_status() # Raise an exception for bad status codes
logging.info(f"Successfully fetched data from {url}")
except requests.exceptions.RequestException as e:
logging.error(f"An error occurred: {e}")
raise e
if __name__ == '__main__':
# Configure logging to print clearly to the console
logging.basicConfig(
level=logging.INFO,
format='%(levelname)s: %(message)s',
stream=sys.stdout
)
url_to_test = os.environ['NONRFC_URL']
proxy_vm_ip = os.environ['PROXY_VM_IP']
proxy_vm_port = os.environ['PROXY_VM_PORT']
logging.info(f"url_to_test: {url_to_test}")
logging.info(f"proxy_vm_ip: {proxy_vm_ip}")
logging.info(f"proxy_vm_port: {proxy_vm_port}")
make_api_request(url_to_test, proxy_vm_ip, proxy_vm_port)
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın.
%%writefile Dockerfile
FROM python:3.9-slim
RUN apt-get update && \
apt-get install -y iputils-ping && \
apt-get install -y wget
RUN pip install cloudml-hypertune requests kfp
COPY main.py /main.py
ENTRYPOINT ["python3", "/main.py"]
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın.
!gcloud artifacts repositories create pipelines-test-repo-psc --repository-format=docker --location=us-central1
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın.
IMAGE_PROJECT = PROJECT_ID
IMAGE_REPO = 'pipelines-test-repo-psc'
IMAGE_NAME = 'nonrfc-ip-call'
TAG = 'v1'
IMAGE_URI= f'us-central1-docker.pkg.dev/{IMAGE_PROJECT}/{IMAGE_REPO}/{IMAGE_NAME}:{TAG}'
IMAGE_URI
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın.
!gcloud auth configure-docker us-docker.pkg.dev --quiet
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın. Varsa hatayı (gcloud.builds.submit) dikkate almayın.
!gcloud builds submit --tag {IMAGE_URI} --region=us-central1
JupyterLab not defterinizde aşağıdaki hücreyi oluşturup çalıştırın. Aşağıdaki önemli noktaları unutmayın:
- Tüketici VPC'leri ile DNS eşlemesi, demo.com alan adı için dnsPeeringConfigs (dnsPeeringConfigs) kullanılarak yapılandırılır.
- Buradaki açık yönlendirme modu web proxy'si explicit-swp.demo.com'dur. Çözümleme, tüketicinin VPC'sindeki DNS eşlemesi aracılığıyla yapılır.
- Bağlantı noktası 8080, Secure Web Proxy'de yapılandırılan dinleme bağlantı noktasıdır (varsayılan).
wgetile class-e-vm-demo.com arasındaki bağlantı DNS eşleme üzerinden çözümlenir.- Kod, Vertex için "psc-network-attachment"ı belirtir. Bu sayede, iki PSC arayüzü örneği dağıtmak için ağ eki alt ağını kullanabilir.
import json
from datetime import datetime
JOB_ID_PREFIX='test_psci-nonRFC' #@param {type:"string"}
JOB_ID = '{}_{}'.format(JOB_ID_PREFIX, datetime.now().strftime("%Y%m%d%H%M%S"))
# PSC-I configs
PRODUCER_PROJECT_ID = PROJECT_ID
DNS_DOMAIN = 'class-e-vm.demo.com' #@param {type:"string"}
NON_RFC_URL = f"http://{DNS_DOMAIN}"
PROXY_VM_IP = "explicit-swp.demo.com" #@param {type:"string"}
PROXY_VM_PORT = "8080" #@param {type:"string"}
CUSTOM_JOB = {
"display_name": JOB_ID,
"job_spec": {
"worker_pool_specs": [
{
"machine_spec": {
"machine_type": "n1-standard-4",
},
"replica_count": 1,
"container_spec": {
"image_uri": IMAGE_URI,
"env": [{
"name": "NONRFC_URL",
"value": NON_RFC_URL
},
{
"name": "PROXY_VM_IP",
"value": PROXY_VM_IP
},
{
"name": "PROXY_VM_PORT",
"value": PROXY_VM_PORT
}]
},
},
],
"enable_web_access": True,
"psc_interface_config": {
"network_attachment": "psc-network-attachment",
"dns_peering_configs": [
{
"domain": "demo.com.",
"target_project": PROJECT_ID,
"target_network": "consumer-vpc"
},
]
},
}
}
print(json.dumps(CUSTOM_JOB, indent=2))
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın.
import requests
bearer_token = !gcloud auth application-default print-access-token
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer {}'.format(bearer_token[0]),
}
request_uri = f"https://{REGION}-aiplatform.googleapis.com/{API_VERSION}/projects/{PROJECT_NUMBER}/locations/{REGION}/customJobs/"
print("request_uri: ", request_uri)
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın.
response_autopush = requests.post(request_uri, json=CUSTOM_JOB, headers=headers)
response = response_autopush
print("response:", response)
if response.reason == 'OK':
job_name = response.json()['name']
job_id = job_name.split('/')[-1]
print("Created Job: ", response.json()['name'])
else:
print(response.text)
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın.
# Print KFP SDK version (should be >= 1.6)
! python3 -c "import kfp; print('KFP SDK version: {}'.format(kfp.__version__))"
# Print AI Platform version
! python3 -c "from google.cloud import aiplatform; print('AI Platform version: {}'.format(aiplatform.__version__))"
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın.
BUCKET_URI = "your-unique-bucket" # Provide a globally unique bucket name
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın.
!gcloud storage buckets create gs://{BUCKET_URI}
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın.
# pipeline parameters
CACHE_PIPELINE = False # @param {type: "string"}
_DEFAULT_IMAGE = IMAGE_URI
BUCKET_URI = "gs://{BUCKET_URI}" # @param {type: "string"}
PIPELINE_ROOT = f"{BUCKET_URI}/pipeline_root/intro"
PIPELINE_DISPLAY_NAME = "pipeline_nonRFCIP" # @param {type: "string"}
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın.
from re import S
import kfp
from kfp import dsl
from kfp.dsl import container_component, ContainerSpec
from kfp import compiler
from google.cloud import aiplatform
# ==== Component with env variable ====
@container_component
def dns_peering_test_op(dns_domain: str, proxy_vm_ip:str, proxy_vm_port:str):
return ContainerSpec(
image=_DEFAULT_IMAGE,
command=["bash", "-c"],
args=[
"""
apt-get update && apt-get install inetutils-traceroute inetutils-ping netcat-openbsd curl -y
echo "Local IP(s): $(hostname -I)"
echo "Attempting to trace route to %s"
traceroute -w 1 -m 7 "%s"
echo "Sending curl requests to http://%s via proxy %s:%s and recording trace..."
if curl -L -v --trace-ascii /dev/stdout -x http://%s:%s "http://%s"; then
echo "Curl request succeeded!"
else
echo "Curl request failed!"
exit 1
fi
""" % (dns_domain, dns_domain, dns_domain, proxy_vm_ip, proxy_vm_port, proxy_vm_ip, proxy_vm_port, dns_domain)
]
)
# ==== Pipeline ====
@dsl.pipeline(
name="dns-peering-test-pipeline",
description="Test DNS Peering using env variable",
pipeline_root=PIPELINE_ROOT,
)
def dns_peering_test_pipeline(dns_domain: str, proxy_vm_ip:str, proxy_vm_port:str):
dns_test_task = dns_peering_test_op(dns_domain=dns_domain, proxy_vm_ip=proxy_vm_ip, proxy_vm_port=proxy_vm_port)
dns_test_task.set_caching_options(enable_caching=CACHE_PIPELINE)
# ==== Compile pipeline ====
if __name__ == "__main__":
aiplatform.init(project=PROJECT_ID, location=LOCATION)
compiler.Compiler().compile(
pipeline_func=dns_peering_test_pipeline,
package_path="dns_peering_test_pipeline.yaml",
)
print("✅ Pipeline compiled to dns_peering_test_pipeline.yaml")
JupyterLab not defterinizde yeni bir hücre oluşturun ve aşağıdakileri çalıştırın.
# Define the PipelineJob body; see API Reference https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.pipelineJobs/create
import requests, json
import datetime
bearer_token = !gcloud auth application-default print-access-token
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer {}'.format(bearer_token[0]),
}
request_uri = f"https://{REGION}-aiplatform.googleapis.com/{API_VERSION}/projects/{PROJECT_NUMBER}/locations/{REGION}/pipelineJobs/"
print("request_uri: ", request_uri)
14. PSC Arayüzü Doğrulaması
Ayrıca, aşağıdaki adrese giderek Vertex AI Pipelines tarafından kullanılan ağ ekleme IP'lerini de görüntüleyebilirsiniz:
Ağ Hizmetleri → Private Service Connect → Ağ Eki → psc-network-attachment
Kiracı projesini seçin (proje adı -tp ile biter).

Vurgulanan alan, PSC Ağ Eki'nden Vertex AI Pipelines tarafından kullanılan IP adresini gösterir.

15. Cloud Logging Validation
Vertex AI Pipelines işinin ilk kez çalıştırılması yaklaşık 14 dakika sürer. Sonraki çalıştırmalar çok daha kısa sürer. Başarılı bir sonucu doğrulamak için aşağıdakileri yapın:
Vertex AI → Eğitim → Özel işler'e gidin.
Yürütülen özel işi seçin.

Günlükleri Görüntüle'yi seçin.

Cloud Logging kullanıma sunulduktan sonra, Vertex AI Pipelines'dan wget'a başarılı bir class-e-vm geçişini onaylayan aşağıdaki vurgulanmış seçimi oluşturan sorguyu çalıştırın.


16. TCPDump Doğrulaması
TCPDUMP çıkışını inceleyerek işlem örneklerine bağlantının daha da doğrulandığını görelim:
class-e-vm adresinden HTTP GET ve 200 OK'u gözlemleyin.
XXXXXXXXX@class-e-vm:~$ sudo tcpdump -i any net 10.10.100.0/28 -nn tcpdump: data link type LINUX_SLL2 tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes 05:51:14.173641 ens4 In IP 10.10.100.8.55306 > 240.0.0.2.80: Flags [S], seq 1747181041, win 65535, options [mss 1420,sackOK,TS val 3942828403 ecr 0,nop,wscale 8], length 0 05:51:14.173668 ens4 Out IP 240.0.0.2.80 > 10.10.100.8.55306: Flags [S.], seq 3013226100, ack 1747181042, win 64768, options [mss 1420,sackOK,TS val 1886125065 ecr 3942828403,nop,wscale 7], length 0 05:51:14.174977 ens4 In IP 10.10.100.8.55306 > 240.0.0.2.80: Flags [.], ack 1, win 1054, options [nop,nop,TS val 3942828405 ecr 1886125065], length 0 05:51:14.175066 ens4 In IP 10.10.100.8.55306 > 240.0.0.2.80: Flags [P.], seq 1:223, ack 1, win 1054, options [nop,nop,TS val 3942828405 ecr 1886125065], length 222: HTTP: GET / HTTP/1.1 05:51:14.175096 ens4 Out IP 240.0.0.2.80 > 10.10.100.8.55306: Flags [.], ack 223, win 505, options [nop,nop,TS val 1886125066 ecr 3942828405], length 0 05:51:14.239042 ens4 Out IP 240.0.0.2.80 > 10.10.100.8.55306: Flags [P.], seq 1:246, ack 223, win 505, options [nop,nop,TS val 1886125130 ecr 3942828405], length 245: HTTP: HTTP/1.1 200 OK
17. Temizleme
Cloud Shell'den eğitim bileşenlerini silin.
gcloud workbench instances delete workbench-tutorial --project=$projectid --location=us-central1-a
gcloud network-security gateway-security-policies rules delete allow-nonrfc-classe \
--gateway-security-policy=policy1 \
--location=us-central1
gcloud network-security gateway-security-policies rules delete allow-apache2 \
--gateway-security-policy=policy1 \
--location=us-central1
gcloud network-security gateway-security-policies delete policy1 \
--location=us-central1
gcloud network-services gateways delete swp1 \
--location=us-central1
gcloud compute network-attachments delete psc-network-attachment --region=us-central1 --quiet
gcloud compute networks subnets delete intf-subnet rfc1918-subnet1 --region=us-central1 --quiet
gcloud dns record-sets delete class-e-vm.demo.com --zone=private-dns-codelab --type=A
gcloud dns record-sets delete explicit-swp.demo.com --zone=private-dns-codelab --type=A
gcloud dns managed-zones delete private-dns-codelab
gcloud computeinstances delete class-e-vm --project=$projectid --zone=us-central1-a --quiet
gcloud compute networks delete consumer-vpc --quiet
18. Tebrikler
Tebrikler! Vertex AI Pipelines Private Service Connect arayüzü ile güvenli web proxy üzerinden RFC olmayan IP aralıkları arasında bağlantıyı başarıyla yapılandırdınız ve doğruladınız.
Tüketici altyapısını oluşturdunuz ve üreticinin tüketici ile üretici arasındaki iletişimi köprülemek için çok NIC'li bir sanal makine oluşturmasına olanak tanıyan bir ağ eki eklediniz. Tüketici VPC ağında, Vertex'ten doğrudan yönlendirilemeyen class-e-vm örneğine bağlantı sağlayan açık bir proxy dağıtırken DNS eşlemesi oluşturmayı öğrendiniz.

Yapabilecekleriniz
Daha fazla bilgi ve videolar
Referans belgeler
- Vertex AI ağ erişimine genel bakış | Google Cloud
- Private Service Connect arayüzleri üzerinden Vertex AI hizmetlerine erişme hakkında | Google Cloud
- Vertex AI Training için Private Service Connect arayüzünü kullanma | Google Cloud
- Vertex AI kaynakları için Private Service Connect arayüzü oluşturma | Google Cloud
- Ayrıca, trafiği açık yönlendirme modunda SWP'ye yönlendirmek için barındırıcı adresi veya IP adresi vb. ile birlikte bir hizmet hesabı da ilişkilendirebilirsiniz. Daha fazla örnek için lütfen CEL Language belgesini inceleyin.