Vertex AI Pipelines PSC Interface SWP

1. บทนำ

อินเทอร์เฟซ Private Service Connect คือทรัพยากรที่ช่วยให้เครือข่าย Virtual Private Cloud (VPC) ของผู้สร้างเริ่มการเชื่อมต่อกับปลายทางต่างๆ ในเครือข่าย VPC ของผู้บริโภคได้ เครือข่ายผู้ผลิตและผู้บริโภคสามารถอยู่ในโปรเจ็กต์และองค์กรที่แตกต่างกันได้

หากไฟล์แนบเครือข่ายยอมรับการเชื่อมต่อจากอินเทอร์เฟซ Private Service Connect Google Cloud จะจัดสรรที่อยู่ IP จากซับเน็ตของผู้ใช้ที่ระบุโดยไฟล์แนบเครือข่ายให้กับอินเทอร์เฟซ เครือข่ายผู้บริโภคและเครือข่ายผู้ผลิตเชื่อมต่อกันและสื่อสารกันได้โดยใช้ที่อยู่ IP ภายใน

การเชื่อมต่อระหว่างไฟล์แนบเครือข่ายกับอินเทอร์เฟซ Private Service Connect จะคล้ายกับการเชื่อมต่อระหว่างปลายทาง Private Service Connect กับไฟล์แนบบริการ แต่มีความแตกต่างที่สำคัญ 2 ประการดังนี้

  • ไฟล์แนบเครือข่ายช่วยให้เครือข่ายของผู้สร้างเริ่มการเชื่อมต่อกับเครือข่ายของผู้บริโภค (ขาออกของบริการที่มีการจัดการ) ในขณะที่ปลายทางช่วยให้เครือข่ายของผู้บริโภคเริ่มการเชื่อมต่อกับเครือข่ายของผู้สร้าง (ขาเข้าของบริการที่มีการจัดการ)
  • การเชื่อมต่ออินเทอร์เฟซ Private Service Connect จะเป็นแบบทรานซิทีฟ ซึ่งหมายความว่าเครือข่ายผู้ผลิตสามารถสื่อสารกับเครือข่ายอื่นๆ ที่เชื่อมต่อกับเครือข่ายผู้บริโภคได้

d7dc28d6567e6283.png **รูปที่ 1**

ข้อควรพิจารณาเกี่ยวกับความสามารถในการเข้าถึงอินเทอร์เฟซ PSC ของ Vertex AI

  • อินเทอร์เฟซ PSC ของ Vertex AI สามารถกำหนดเส้นทางการรับส่งข้อมูลไปยังปลายทางใน VPC หรือในองค์กรภายในบล็อกที่อยู่ RFC1918
  • การกำหนดเป้าหมาย PSC-Interface ที่ไม่ใช่บล็อกที่อยู่ RFC-1918 ต้องใช้พร็อกซีที่ชัดเจนซึ่งติดตั้งใช้งานใน VPC ของผู้บริโภคที่มีที่อยู่ RFC-1918 ในการติดตั้งใช้งาน Vertex AI คุณต้องกำหนดพร็อกซีพร้อมกับ FQDN ของปลายทางเป้าหมาย ดูรูปที่ 1 ซึ่งแสดงโหมดพร็อกซีที่ชัดเจน Secure Web Proxy (SWP) ที่กำหนดค่าไว้ใน VPC ของผู้บริโภคเพื่ออำนวยความสะดวกในการกำหนดเส้นทางไปยัง CIDR ที่ไม่ใช่ RFC-1918 ต่อไปนี้
  1. 240.0.0.0/4
  2. 203.0.113.0/24
  3. 10.10.20.0/28 ไม่ต้องใช้พร็อกซี อยู่ในช่วง RFC-1918
  4. การรับส่งข้อมูลขาออกจากอินเทอร์เน็ต

การเชื่อมต่ออินเทอร์เน็ตสำหรับเครือข่ายกลุ่มผู้ใช้ที่ Google จัดการ:

อินเทอร์เฟซ PSC ของ Vertex AI ที่ไม่มี VPC-SC

  • เมื่อกำหนดค่าการติดตั้งใช้งานด้วยอินเทอร์เฟซ PSC เท่านั้น การติดตั้งใช้งานจะยังคงมีการเข้าถึงอินเทอร์เน็ตเริ่มต้น การรับส่งข้อมูลขาออกนี้จะออกจากเครือข่ายกลุ่มผู้ใช้ที่ Google จัดการโดยตรง

อินเทอร์เฟซ PSC ของ Vertex AI ที่มี VPC-SC

  • เมื่อโปรเจ็กต์เป็นส่วนหนึ่งของขอบเขตการควบคุมบริการ VPC ขอบเขตจะบล็อกการเข้าถึงอินเทอร์เน็ตเริ่มต้นของผู้เช่าที่ Google จัดการเพื่อป้องกันการกรองข้อมูล
  • หากต้องการอนุญาตให้การติดตั้งใช้งานเข้าถึงอินเทอร์เน็ตสาธารณะในสถานการณ์นี้ คุณต้องกำหนดค่าเส้นทางขาออกที่ปลอดภัยอย่างชัดเจนซึ่งกำหนดเส้นทางการรับส่งข้อมูลผ่าน VPC ที่เชื่อมต่อกับ Vertex AI การติดตั้งใช้งานพร็อกซีเซิร์ฟเวอร์ภายในเครือข่าย VPC ที่มีที่อยู่ RFC 1918 ซึ่งจับคู่กับเกตเวย์ Cloud NAT เป็นวิธีหนึ่งในการดำเนินการนี้ โปรดทราบว่าคุณยังใช้พร็อกซีเว็บที่ปลอดภัยเพื่อส่งต่อการเข้าชมไปยังอินเทอร์เน็ตได้ด้วย การสร้าง Secure Web Proxy จะสร้างเกตเวย์ Cloud NAT โดยอัตโนมัติ

โปรดดูข้อมูลเพิ่มเติมได้ที่แหล่งข้อมูลต่อไปนี้

ตั้งค่าอินเทอร์เฟซ Private Service Connect สำหรับทรัพยากร Vertex AI | Google Cloud

สิ่งที่คุณจะสร้าง

ในบทแนะนำนี้ คุณจะได้สร้างการติดตั้งใช้งาน Vertex AI Pipelines ที่ครอบคลุมด้วยอินเทอร์เฟซ Private Service Connect (PSC) เพื่ออนุญาตการเชื่อมต่อจากผู้ผลิตไปยังการประมวลผลของผู้บริโภคตามที่แสดงในรูปที่ 1 โดยกำหนดเป้าหมายไปยังปลายทางที่ไม่ใช่ RFC 1918 ใน class-e-subnet

2d095dc2f4de6b4b.pngรูปที่ 2

คุณจะสร้าง psc-network-attachment รายการเดียวใน VPC ของผู้บริโภคโดยใช้การเพียร์ DNS เพื่อแก้ปัญหา VM ของผู้บริโภคในโปรเจ็กต์กลุ่มผู้ใช้ที่โฮสต์การฝึก Vertex AI ซึ่งจะส่งผลให้เกิด Use Case ต่อไปนี้

ติดตั้งใช้งาน Vertex AI Pipelines และกำหนดค่า Secure Web Proxy ในโหมดพร็อกซีที่ชัดเจน เพื่อให้สามารถดำเนินการ wget กับ VM ในซับเน็ตคลาส E ได้

สิ่งที่คุณจะได้เรียนรู้

  • วิธีสร้างการเชื่อมต่อเครือข่าย
  • วิธีที่ผู้ให้บริการใช้การเชื่อมต่อเครือข่ายเพื่อสร้างอินเทอร์เฟซ PSC
  • วิธีสร้างการเพียร์ DNS เพื่อแก้ปัญหาโดเมนส่วนตัวที่กำหนดค่าไว้ในเครือข่าย VPC ของผู้บริโภคจากเครือข่าย VPC ที่ Google จัดการ
  • วิธีส่งต่อการรับส่งข้อมูลจากอินเทอร์เฟซ PSC ของ Vertex AI ไปยัง Secure Web Proxy
  • วิธีสร้างการสื่อสารไปยังพื้นที่ที่อยู่ IP ที่ไม่ใช่ RFC-1918 จาก Vertex AI Pipelines

สิ่งที่คุณต้องมี

โปรเจ็กต์ Google Cloud

สิทธิ์ IAM

2. ก่อนเริ่มต้น

อัปเดตโปรเจ็กต์เพื่อรองรับบทแนะนำ

บทแนะนำนี้ใช้ $variables เพื่อช่วยในการติดตั้งใช้งานการกำหนดค่า gcloud ใน Cloud Shell

ใน Cloud Shell ให้ทำดังนี้

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
projectid=YOUR-PROJECT-ID
echo $projectid

การเปิดใช้ API

ใน Cloud Shell ให้ทำดังนี้

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. การตั้งค่าสำหรับผู้บริโภค

สร้าง VPC ของผู้ใช้

ใน Cloud Shell ให้ทำดังนี้

gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom

สร้างซับเน็ตของผู้บริโภค

ใน Cloud Shell ให้ทำดังนี้

gcloud compute networks subnets create class-e-subnet --project=$projectid --range=240.0.0.0/4 --network=consumer-vpc --region=us-central1

ใน Cloud Shell ให้ทำดังนี้

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

สร้างซับเน็ตเฉพาะพร็อกซี

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

ใน Cloud Shell ให้ทำดังนี้

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 และ NAT

Secure Web Proxy ของ Google Cloud จะจัดสรรและจัดการเกตเวย์ Cloud NAT และ Cloud Router ที่เชื่อมโยงในภูมิภาคที่มีการติดตั้งใช้งานโดยอัตโนมัติ

4. เปิดใช้ IAP

หากต้องการอนุญาตให้ IAP (Identity Aware Proxy) เชื่อมต่อกับอินสแตนซ์ VM ให้สร้างกฎไฟร์วอลล์ที่มีลักษณะดังนี้

  • มีผลกับอินสแตนซ์ VM ทั้งหมดที่คุณต้องการให้เข้าถึงได้โดยใช้ IAP
  • อนุญาตการรับส่งข้อมูลขาเข้าจากช่วง IP 35.235.240.0/20 ช่วงนี้มีที่อยู่ IP ทั้งหมดที่ IAP ใช้สำหรับการส่งต่อ TCP

สร้างกฎไฟร์วอลล์ IAP ภายใน Cloud Shell

gcloud compute firewall-rules create ssh-iap-consumer \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

5. สร้างอินสแตนซ์ VM สำหรับผู้บริโภค

สร้างอินสแตนซ์ VM ผู้บริโภค class-e-vm ภายใน Cloud Shell

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 เป็นวิธีการทำให้ใช้งานได้ที่ต้องกำหนดค่าภาระงานของไคลเอ็นต์อย่างชัดเจนเพื่อใช้ที่อยู่ IP ภายในหรือชื่อโดเมนที่สมบูรณ์ในตัวเองและพอร์ตของ SWP เป็นพร็อกซีการส่งต่อ

ในขั้นตอนด้านล่าง ให้แก้ไข YOUR-PROJECT-ID เป็นรหัสโปรเจ็กต์ของคุณ

สร้างพร็อกซีเว็บ

ใน Cloud Shell ให้สร้างไฟล์ policy.yaml โดยใช้โปรแกรมแก้ไขข้อความ

cat > policy.yaml << EOF
description: basic Secure Web Proxy policy
name: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/policy1
EOF

ใน Cloud Shell ให้สร้างนโยบายเว็บพร็อกซีที่ปลอดภัยโดยใช้คำสั่งต่อไปนี้

gcloud network-security gateway-security-policies import policy1 \
    --source=policy.yaml \
    --location=us-central1

ในส่วนต่อไปนี้ ให้สร้างกฎเพื่ออนุญาตการเข้าถึง class-e-vm ตามโฮสต์ sessionMatcher

ใน Cloud Shell ให้สร้างไฟล์ rule1.yaml โดยใช้โปรแกรมแก้ไขข้อความ

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

ในส่วนต่อไปนี้ ให้สร้างกฎเพื่ออนุญาตการเข้าถึง Jupyter Notebook เพื่ออนุญาตการติดตั้ง apache2 ใน "class-e" VM

ใน Cloud Shell ให้สร้างไฟล์ rule2.yaml โดยใช้โปรแกรมแก้ไขข้อความ

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 ให้สร้างกฎนโยบายความปลอดภัย 1 ดังนี้

gcloud network-security gateway-security-policies rules import allow-nonrfc-classe \
    --source=rule1.yaml \
    --location=us-central1 \
    --gateway-security-policy=policy1

ใน Cloud Shell ให้สร้างกฎนโยบายความปลอดภัย 2 ดังนี้

gcloud network-security gateway-security-policies rules import allow-apache2 \
    --source=rule2.yaml \
    --location=us-central1 \
    --gateway-security-policy=policy1

หากต้องการรองรับการฝึก Vertex AI ให้กำหนดค่าเกตเวย์ Secure Web Proxy ด้วยการตั้งค่าต่อไปนี้

  • พอร์ตที่ใช้ฟัง: ใช้พอร์ตเดียวกันที่กำหนดค่าไว้ในการตั้งค่าพร็อกซีที่ชัดเจนของโค้ดแอปพลิเคชัน Vertex AI (เช่น 8080)
  • ที่อยู่: กำหนดที่อยู่ IP ส่วนตัวจากช่วง RFC 1918
  • โหมดการกำหนดเส้นทาง: ตั้งค่าเป็น EXPLICIT_ROUTING_MODE

ใน Cloud Shell ให้สร้างไฟล์ gateway.yaml เพื่อกำหนดเกตเวย์ Secure Web Proxy ดังนี้

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 โดยทำดังนี้

gcloud network-services gateways import swp1 \
    --source=gateway.yaml \
    --location=us-central1

Secure Web Proxy อาจใช้เวลาหลายนาทีในการติดตั้งใช้งาน

e8a4cf23bfc63030.png

7. ไฟล์แนบเครือข่าย Private Service Connect

ไฟล์แนบเครือข่ายเป็นทรัพยากรระดับภูมิภาคที่แสดงฝั่งผู้บริโภคของอินเทอร์เฟซ Private Service Connect คุณจะเชื่อมโยงซับเน็ตเดียวกับการเชื่อมต่อเครือข่าย และผู้ผลิตจะกำหนด IP ให้กับอินเทอร์เฟซ Private Service Connect จากซับเน็ตนั้น ซับเน็ตต้องอยู่ในภูมิภาคเดียวกับการเชื่อมต่อเครือข่าย การเชื่อมต่อเครือข่ายต้องอยู่ในภูมิภาคเดียวกับบริการผู้ผลิต

สร้างการเชื่อมต่อเครือข่าย

สร้างการเชื่อมต่อเครือข่ายภายใน Cloud Shell

gcloud compute network-attachments create psc-network-attachment \
    --region=us-central1 \
    --connection-preference=ACCEPT_MANUAL \
    --subnets=intf-subnet

หมายเหตุ: คุณไม่จำเป็นต้องระบุรหัสโปรเจ็กต์ที่ยอมรับอย่างชัดเจนในไฟล์แนบนี้ เมื่อกำหนดค่า Vertex AI แล้ว ระบบจะเพิ่มโปรเจ็กต์ผู้เช่าที่ Google จัดการโดยอัตโนมัติราวกับว่ามีการกำหนดค่า "ยอมรับโดยอัตโนมัติ"

แสดงรายการการเชื่อมต่อเครือข่าย

ใน Cloud Shell ให้แสดงรายการการเชื่อมต่อเครือข่าย

gcloud compute network-attachments list

อธิบายการเชื่อมต่อเครือข่าย

อธิบายไฟล์แนบเครือข่ายภายใน Cloud Shell

gcloud compute network-attachments describe psc-network-attachment --region=us-central1

จดชื่อการเชื่อมต่อเครือข่าย PSC, psc-network-attachment ซึ่งผู้ผลิตจะใช้เมื่อสร้างอินเทอร์เฟซ Private Service Connect

หากต้องการดู URL ของการเชื่อมต่อเครือข่าย PSC ใน Cloud Console ให้ไปที่

บริการเครือข่าย → Private Service Connect → ไฟล์แนบเครือข่าย → psc-network-attachment

b969cca5242d9c8a.png

8. โซน DNS ส่วนตัว

คุณจะสร้างโซน Cloud DNS สำหรับ demo.com และป้อนระเบียน A ที่ชี้ไปยังที่อยู่ IP ของ VM จากนั้นจะมีการติดตั้งใช้งานการ Peering DNS ในงาน Vertex AI Pipelines ซึ่งจะช่วยให้เข้าถึงระเบียน DNS ของผู้บริโภคได้

ใน Cloud Shell ให้ทำดังนี้

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 ให้สร้างชุดระเบียนสำหรับ VM class-e-vm ตรวจสอบว่าได้อัปเดตที่อยู่ IP ตามเอาต์พุตของสภาพแวดล้อมแล้ว

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 และตรวจสอบว่าได้อัปเดตที่อยู่ IP ตามเอาต์พุตของสภาพแวดล้อมแล้ว

gcloud dns --project=$projectid record-sets create explicit-swp.demo.com. --zone="private-dns-codelab" --type="A" --ttl="300" --rrdatas="10.10.10.5"

สร้างกฎไฟร์วอลล์ของ Cloud เพื่ออนุญาตการเข้าถึงจากอินเทอร์เฟซ PSC

ในส่วนต่อไปนี้ ให้สร้างกฎไฟร์วอลล์ที่อนุญาตให้การรับส่งข้อมูลที่มาจาก PSC Network Attachment เข้าถึงทรัพยากรการคำนวณ RFC 1918 ใน VPC ของผู้ใช้

ใน Cloud Shell ให้สร้างกฎไฟร์วอลล์ขาเข้าที่อนุญาตการเข้าถึงจากซับเน็ตเฉพาะพร็อกซีไปยังซับเน็ตคลาส E เนื่องจาก SWP เริ่มต้นการเชื่อมต่อกับซับเน็ตเฉพาะพร็อกซีเป็นที่อยู่ต้นทาง

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

ส่วนต่อไปนี้จะแนะนำวิธีสร้างสมุดบันทึก Jupyter Notebook นี้จะใช้ในการติดตั้งใช้งานงาน Vertex AI Pipelines ที่ส่ง wget จาก Vertex AI Pipelines ไปยังอินสแตนซ์ทดสอบ เส้นทางข้อมูลระหว่าง Vertex AI Pipelines กับเครือข่ายผู้บริโภคที่มีอินสแตนซ์จะใช้อินเทอร์เฟซ Private Service Connect

สร้างบัญชีบริการที่ผู้ใช้จัดการ

ในส่วนต่อไปนี้ คุณจะสร้างบัญชีบริการที่จะเชื่อมโยงกับอินสแตนซ์ Vertex AI Workbench ที่ใช้ในบทแนะนำ

ในบทแนะนำ บัญชีบริการจะมีบทบาทต่อไปนี้

เข้าสู่ระบบ Cloud Shell แล้วทำดังนี้

สร้างบัญชีบริการ

gcloud iam service-accounts create notebook-sa \
    --display-name="notebook-sa"

อัปเดตบัญชีบริการด้วยบทบาทผู้ดูแลระบบพื้นที่เก็บข้อมูล

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"

อัปเดตบัญชีบริการด้วยบทบาทผู้ใช้ AI Platform

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

อัปเดตบัญชีบริการด้วยบทบาทผู้ดูแลระบบ Artifact Registry

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"

อัปเดตบัญชีบริการด้วยบทบาทผู้แก้ไข Cloud Build

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/cloudbuild.builds.editor"

อนุญาตให้บัญชีบริการของ Notebook ใช้บัญชีบริการเริ่มต้นของ Compute Engine

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

ในส่วนต่อไปนี้ ให้สร้างอินสแตนซ์ Vertex AI Workbench ที่รวมบัญชีบริการที่สร้างไว้ก่อนหน้านี้ notebook-sa

สร้างอินสแตนซ์ไคลเอ็นต์ส่วนตัวภายใน Cloud Shell

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

Vertex AI จะดำเนินการในนามของคุณเพื่อดำเนินการต่างๆ เช่น การขอที่อยู่ IP จากซับเน็ตไฟล์แนบเครือข่าย PSC ที่ใช้สร้างอินเทอร์เฟซ PSC โดย Vertex AI จะใช้ตัวแทนบริการ (แสดงอยู่ด้านล่าง) ที่ต้องมีสิทธิ์ผู้ดูแลระบบเครือข่าย

service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com

หมายเหตุ: ก่อนอัปเดตสิทธิ์ของตัวแทนบริการ ให้ไปที่ Vertex AI ใน Cloud Console เพื่อให้แน่ใจว่าได้เปิดใช้ Vertex AI API แล้ว

ภายใน Cloud Shell

รับหมายเลขโปรเจ็กต์

gcloud projects describe $projectid | grep projectNumber

ตั้งค่าหมายเลขโปรเจ็กต์

projectnumber=YOUR-PROJECT-NUMBER

สร้างบัญชีบริการสำหรับ AI Platform ข้ามขั้นตอนนี้หากคุณมีบัญชีบริการในโปรเจ็กต์อยู่แล้ว

gcloud beta services identity create --service=aiplatform.googleapis.com --project=$projectnumber

อัปเดตบัญชีตัวแทนบริการด้วยบทบาท compute.networkAdmin

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"

อัปเดตบัญชีตัวแทนบริการด้วยบทบาท dns.peer

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/dns.peer"

การอัปเดตบัญชีบริการเริ่มต้น

เปิดใช้ Compute Engine API และให้สิทธิ์เข้าถึง Vertex AI แก่บัญชีบริการเริ่มต้น โปรดทราบว่าระบบอาจใช้เวลาสักครู่ในการเผยแพร่การเปลี่ยนแปลงสิทธิ์เข้าถึง

ใช้ Cloud Shell เพื่ออัปเดตบัญชีบริการเริ่มต้นดังนี้

อัปเดตบัญชีบริการเริ่มต้นด้วยบทบาท aiplatform.user

gcloud projects add-iam-policy-binding $projectid \
  --member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
    --role="roles/aiplatform.user"

อัปเดตบัญชีบริการเริ่มต้นด้วยบทบาท storage.admin

gcloud projects add-iam-policy-binding $projectid \
  --member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
    --role="roles/storage.admin"

อัปเดตบัญชีบริการเริ่มต้นด้วยบทบาท artifactregistry.admin

gcloud projects add-iam-policy-binding $projectid \
  --member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
    --role="roles/artifactregistry.admin"

12. ติดตั้ง Apache2 และเปิดใช้ Tcpdump ใน "class-e-vm"

จาก class-e-vm ติดตั้ง Apache2 ผ่านเว็บพร็อกซีที่ปลอดภัย:

เปิดแท็บ Cloud Shell ใหม่ อัปเดตตัวแปรโปรเจ็กต์ แล้ว SSH ไปยัง class-e-vm

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

ดำเนินการกรอง tcpdump ในซับเน็ตเฉพาะพร็อกซีที่ Secure Web Proxy ใช้เพื่อส่งต่อการรับส่งข้อมูลไปยังเป้าหมาย

จากระบบปฏิบัติการของคลาส-e-vm ให้เรียกใช้การกรอง tcpdump ในเครือข่ายย่อยของ proxy-vm

sudo tcpdump -i any net 10.10.100.0/24 -nn

หมายเหตุ: ตรวจสอบว่าคุณได้เปิดการเข้าถึง Google แบบส่วนตัวในเครือข่ายย่อยของอินสแตนซ์ workbench-tutorial เพื่อให้เซสชัน JupyterLab เปิดขึ้น

13. ทำให้งาน Vertex AI Pipelines ใช้งานได้

ในส่วนต่อไปนี้ คุณจะสร้าง Notebook เพื่อดำเนินการ wget จาก Vertex AI Pipelines ไปยังพร็อกซีที่ชัดเจนให้สำเร็จ ซึ่งจะช่วยให้คุณเข้าถึง VM ที่ไม่ใช่ RFC 1918 ได้ เช่น class-e-vm Vertex AI Pipelines ไม่จำเป็นต้องใช้พร็อกซีแบบระบุตัวตนเพื่อเข้าถึง rfc1918-vm เนื่องจากเป้าหมายคือที่อยู่ IP ของ RFC 1918

เรียกใช้งานการฝึกในอินสแตนซ์ Vertex AI Workbench

  1. ในคอนโซล Google Cloud ให้ไปที่แท็บอินสแตนซ์ในหน้า Vertex AI Workbench
  2. คลิก Open JupyterLab ข้างชื่ออินสแตนซ์ Vertex AI Workbench (workbench-tutorial) อินสแตนซ์ Vertex AI Workbench จะเปิดขึ้นใน JupyterLab
  3. เลือกไฟล์ > ใหม่ > Notebook
  4. เลือก Kernel > Python 3

ในสมุดบันทึก JupyterLab ให้สร้างเซลล์ใหม่ อัปเดตและเรียกใช้รายการต่อไปนี้ อย่าลืมอัปเดต PROJECT_ID ด้วยรายละเอียดของสภาพแวดล้อม

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 ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้

# 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 ให้สร้างเซลล์ใหม่และเรียกใช้การกำหนดค่าด้านล่าง โดยสังเกตไฮไลต์ต่อไปนี้

  • proxy_server = "http://explicit-swp.demo.com:8080"
  • FQDN เชื่อมโยงกับ VM พร็อกซีที่ติดตั้งใช้งานใน VPC ของผู้บริโภค เราใช้การเชื่อมต่อ DNS เพื่อแก้ไข FQDN ในขั้นตอนถัดไป
%%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 ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้

%%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 ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้

!gcloud artifacts repositories create pipelines-test-repo-psc --repository-format=docker --location=us-central1

ในสมุดบันทึก JupyterLab ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้

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 ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้

!gcloud auth configure-docker us-docker.pkg.dev --quiet

ในสมุดบันทึก JupyterLab ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้ ไม่สนใจข้อผิดพลาด (gcloud.builds.submit) หากมี

!gcloud builds submit --tag {IMAGE_URI} --region=us-central1

ใน Notebook ของ JupyterLab ให้สร้างและเรียกใช้เซลล์ด้านล่าง โดยสังเกตไฮไลต์ต่อไปนี้

  • การ Peering DNS กับ VPC ของผู้บริโภคได้รับการกำหนดค่าโดยใช้ dnsPeeringConfigs (dnsPeeringConfigs) สำหรับชื่อโดเมน demo.com
  • พร็อกซีเว็บในโหมดการกำหนดเส้นทางที่ชัดเจนในที่นี้คือ explicit-swp.demo.com ระบบจะจัดการการแปลงผ่านการเพียร์ DNS ภายใน VPC ของผู้บริโภค
  • พอร์ต 8080 คือพอร์ตที่ใช้รับฟัง (ค่าเริ่มต้น) ซึ่งกำหนดค่าไว้ใน Secure Web Proxy
  • wget ไปยัง class-e-vm-demo.com จะได้รับการแก้ไขผ่านการ Peering DNS
  • โค้ดจะระบุ "psc-network-attachment" สำหรับ Vertex เพื่อให้ใช้ซับเน็ตการเชื่อมต่อเครือข่ายในการติดตั้งใช้งานอินสแตนซ์อินเทอร์เฟซ PSC 2 รายการ
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 ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้

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 ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้

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 ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้

# 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 ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้

BUCKET_URI = "your-unique-bucket" # Provide a globally unique bucket name

ในสมุดบันทึก JupyterLab ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้

!gcloud storage buckets create gs://{BUCKET_URI}

ในสมุดบันทึก JupyterLab ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้

# 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 ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้

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 ให้สร้างเซลล์ใหม่แล้วเรียกใช้คำสั่งต่อไปนี้

# 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

นอกจากนี้ คุณยังดู IP การแนบเครือข่ายที่ไปป์ไลน์ Vertax AI ใช้ได้โดยไปที่

บริการเครือข่าย → Private Service Connect → ไฟล์แนบเครือข่าย → psc-network-attachment

เลือกโปรเจ็กต์ผู้เช่า (ชื่อโปรเจ็กต์ที่ลงท้ายด้วย -tp)

a2e0b6d6243f26f1.png

ฟิลด์ที่ไฮไลต์แสดงถึงที่อยู่ IP ที่ Vertex AI Pipelines ใช้จากไฟล์แนบเครือข่าย PSC

11e411ea919d3bad.png

15. การตรวจสอบ Cloud Logging

งาน Vertex AI Pipelines จะใช้เวลาประมาณ 14 นาทีในการเรียกใช้ครั้งแรก ส่วนการเรียกใช้ครั้งต่อๆ ไปจะใช้เวลาน้อยกว่ามาก หากต้องการตรวจสอบว่าผลลัพธ์เป็นไปตามที่ต้องการ ให้ทำดังนี้

ไปที่ Vertex AI → การฝึก → งานที่กำหนดเอง

เลือกงานที่กำหนดเองที่ดำเนินการแล้ว

2f467254aa0c2e3a.png

เลือกดูบันทึก

8d525d3b152bcc61.png

เมื่อ Cloud Logging พร้อมใช้งานแล้ว ให้เลือก "เรียกใช้การค้นหา" ที่สร้างการเลือกที่ไฮไลต์ไว้ด้านล่าง ซึ่งยืนยันว่า wget จาก Vertex AI Pipelines ไปยัง class-e-vm สำเร็จ

a4f9e9167f4ce1ae.png38972f834aa2bd1d.png

16. การตรวจสอบความถูกต้องของ TCPDump

มาดูเอาต์พุต TCPDUMP ที่ตรวจสอบการเชื่อมต่อกับอินสแตนซ์ Compute เพิ่มเติมกัน

จาก class-e-vm ให้สังเกต HTTP GET และ 200 OK

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. ล้างข้อมูล

ลบคอมโพเนนต์ของบทแนะนำจาก Cloud Shell

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. ขอแสดงความยินดี

ขอแสดงความยินดี คุณกำหนดค่าและตรวจสอบการเชื่อมต่อระหว่างอินเทอร์เฟซ Private Service Connect ของ Vertex AI Pipelines กับช่วง IP ที่ไม่ใช่ RFC ผ่าน Secure Web Proxy เรียบร้อยแล้ว

คุณสร้างโครงสร้างพื้นฐานของผู้บริโภค และเพิ่มการเชื่อมต่อเครือข่ายที่อนุญาตให้ผู้ผลิตสร้าง VM แบบหลาย NIC เพื่อเชื่อมต่อการสื่อสารของผู้บริโภคและผู้ผลิต คุณได้เรียนรู้วิธีสร้างการเพียร์ DNS ขณะติดตั้งใช้งานพร็อกซีที่ชัดเจนในเครือข่าย VPC ของผู้บริโภค ซึ่งอนุญาตให้เชื่อมต่อกับอินสแตนซ์ class-e-vm ที่กำหนดเส้นทางจาก Vertex โดยตรงไม่ได้

678ba30d64a76795.png

สิ่งต่อไปที่ควรทำ

อ่านเพิ่มเติมและวิดีโอ

เอกสารอ้างอิง