Vertex AI เข้าถึงปลายทางการคาดการณ์ออนไลน์แบบส่วนตัวโดยใช้ PSC

1. บทนำ

โฮสต์ในองค์กรสามารถเข้าถึงการคาดการณ์ออนไลน์ได้โดยตรงผ่านอินเทอร์เน็ตสาธารณะ (ตัวเลือกที่ 1) หรือโดยใช้ Cloud VPN หรือ Cloud Interconnect กับ Private Service Connect (PSC) (ตัวเลือกที่ 2) จากเครือข่ายในองค์กร ซึ่งทั้ง 2 ตัวเลือกมีการเข้ารหัส SSL/TLS การเชื่อมต่อแบบไฮบริดกับการคาดการณ์ออนไลน์ผ่านการเชื่อมต่อระหว่างกันมีประสิทธิภาพมากกว่าอินเทอร์เน็ต จึงขอแนะนำให้ใช้กับแอปพลิเคชันที่สำคัญดังที่แสดงในรูปที่ 1

ในบทแนะนำนี้ เราจะแสดงวิธีใช้ VPN ความพร้อมใช้งานสูง (HA VPN) เพื่อเข้าถึงการคาดการณ์ออนไลน์แบบส่วนตัวระหว่างเครือข่าย VPC 2 เครือข่าย ซึ่งสามารถใช้เป็นพื้นฐานสำหรับการเชื่อมต่อส่วนตัวแบบมัลติคลาวด์และภายในองค์กร

โปรดทราบว่าการคาดการณ์ออนไลน์ของ Vertex เป็นอุปกรณ์ปลายทางสาธารณะ ดังนั้นคุณจึงควรจำกัดการเข้าถึงโดยใช้การควบคุมบริการ VPC (VPC-SC) เพื่อสร้างขอบเขตที่ปลอดภัยเพื่ออนุญาตหรือปฏิเสธการเข้าถึง Vertex และ Googleapis อื่นๆ บทแนะนำนี้ไม่ได้ครอบคลุม VPC-SC โปรดดูรายละเอียดเพิ่มเติมในการควบคุมบริการ VPC กับ Vertex AI

24a07ba49a7bcb16.png

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

คุณจะตั้งค่าเครือข่าย VPC ที่ชื่อ on-prem-vpc เพื่อแสดงสภาพแวดล้อมภายในองค์กร สำหรับการติดตั้งใช้งานของคุณ on-prem-vpc จะไม่มีอยู่ แต่จะใช้การเชื่อมต่อเครือข่ายแบบไฮบริดกับศูนย์ข้อมูลภายในองค์กรหรือผู้ให้บริการคลาวด์แทน

คุณจะสร้างสถาปัตยกรรม Private Service Connect ที่ครอบคลุมซึ่งแสดงการเข้าถึงการคาดการณ์ออนไลน์แบบสาธารณะผ่าน Cloud NAT และแบบส่วนตัวโดยใช้ PSC ผ่าน VPN ความพร้อมใช้งานสูง ตามรายละเอียดด้านล่าง

b545c808b366341a.png

เมื่อติดตั้งใช้งานการคาดการณ์ออนไลน์ในโปรเจ็กต์ Google Cloud แล้ว เราจะพิจารณากรณีการใช้งานต่อไปนี้

การเข้าถึงการคาดการณ์ออนไลน์แบบสาธารณะประกอบด้วยสิ่งต่อไปนี้

  • สร้างอินสแตนซ์ GCE (nat-client) ที่ใช้ประโยชน์จาก NAT สำหรับการเข้าถึงอินเทอร์เน็ตขาออก
  • ใช้ CURL เพื่อทำการอนุมานกับโมเดล
  • ใช้ TCPDUMP เพื่อตรวจสอบว่ามีการเข้าถึงการคาดการณ์ออนไลน์ผ่าน VIP สาธารณะ

การเข้าถึงการคาดการณ์ออนไลน์แบบส่วนตัวประกอบด้วยสิ่งต่อไปนี้

  • ทำให้ใช้งานได้โมเดลไปยังปลายทางการคาดการณ์ออนไลน์ของ Vertex ในโปรเจ็กต์
  • สร้างปลายทาง Private Service Connect (Googleapis) ใน aiml-vpc
  • ส่งออกที่อยู่ IP ของ PSC ผ่าน Cloud Router เป็นการประกาศที่กำหนดเองไปยัง VPC ในองค์กร
  • สร้างอินสแตนซ์ GCE (ไคลเอ็นต์ส่วนตัว) และอัปเดตไฟล์ hosts ด้วย IP ของปลายทาง PSC
  • ใช้ CURL เพื่อทำการอนุมานกับโมเดล
  • ใช้ TCPDUMP เพื่อตรวจสอบว่ามีการเข้าถึงการคาดการณ์ออนไลน์ผ่านที่อยู่ IP ของปลายทาง PSC

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

  • วิธีสร้างปลายทาง Private Service Connect
  • วิธีโฆษณา IP ของปลายทาง PSC ผ่าน Cloud Router
  • วิธีใช้ TCPDUMP เพื่อตรวจสอบสิทธิ์เข้าถึงการคาดการณ์ออนไลน์ ทั้งแบบสาธารณะและส่วนตัว

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

  • โปรเจ็กต์ Google Cloud

สิทธิ์ IAM

ผู้ดูแลระบบเครือข่าย Compute

ผู้แก้ไข Service Directory

ผู้ดูแลระบบ DNS

ผู้ดูแลระบบเครือข่าย

ผู้ดูแลระบบโควต้า

ผู้ดูแลระบบ Notebook

ผู้ใช้บัญชีบริการ

ผู้ดูแลระบบพื้นที่เก็บข้อมูล

ผู้ใช้ Vertex AI

Service Account Admin

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

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

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

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

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

3. เปิดใช้บริการ

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

gcloud services enable dns.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable iam.googleapis.com 
gcloud services enable compute.googleapis.com 
gcloud services enable notebooks.googleapis.com

4. การตั้งค่า aiml-vpc

สร้าง aiml-vpc

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

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

สร้างซับเน็ต Notebook ที่จัดการโดยผู้ใช้

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

gcloud compute networks subnets create workbench-subnet --project=$projectid --range=172.16.10.0/28 --network=aiml-vpc --region=us-central1 --enable-private-ip-google-access

การกำหนดค่า Cloud Router และ NAT

Cloud NAT ใช้ในบทแนะนำสำหรับการดาวน์โหลดแพ็กเกจซอฟต์แวร์ Notebook เนื่องจากอินสแตนซ์ Notebook ที่ผู้ใช้จัดการไม่มีที่อยู่ IP ภายนอก นอกจากนี้ Cloud NAT ยังมีความสามารถ NAT ขาออก ซึ่งหมายความว่าโฮสต์อินเทอร์เน็ตไม่ได้รับอนุญาตให้เริ่มการสื่อสารกับ Notebook ที่ผู้ใช้จัดการ ทำให้มีความปลอดภัยมากขึ้น

สร้าง Cloud Router ระดับภูมิภาคภายใน Cloud Shell

gcloud compute routers create cloud-router-us-central1-aiml-nat --network aiml-vpc --region us-central1

สร้างเกตเวย์ Cloud NAT ระดับภูมิภาคภายใน Cloud Shell

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

5. การตั้งค่า on-prem-vpc

สร้าง on-prem-vpc

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

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

สร้าง nat-subnet

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

gcloud compute networks subnets create nat-subnet --project=$projectid --range=192.168.10.0/28 --network=on-prem-vpc --region=us-central1

สร้าง private-ip-subnet

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

gcloud compute networks subnets create private-ip-subnet --project=$projectid --range=192.168.20.0/28 --network=on-prem-vpc --region=us-central1

การกำหนดค่า Cloud Router และ NAT

บทแนะนำนี้ใช้ Cloud NAT สำหรับการดาวน์โหลดแพ็กเกจซอฟต์แวร์ นอกจากนี้ Cloud NAT ยังมีความสามารถ NAT ขาออก ซึ่งหมายความว่าโฮสต์อินเทอร์เน็ตไม่ได้รับอนุญาตให้เริ่มการสื่อสารกับ Compute ทำให้มีความปลอดภัยมากขึ้น

สร้าง Cloud Router ระดับภูมิภาคภายใน Cloud Shell

gcloud compute routers create cloud-router-us-central1-on-prem-nat --network on-prem-vpc --region us-central1

สร้างเกตเวย์ Cloud NAT ระดับภูมิภาคภายใน Cloud Shell

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-on-prem-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

6. สร้างปลายทาง Private Service Connect

ในส่วนต่อไปนี้ คุณจะสร้างปลายทาง Private Service Connect (PSC) ที่จะใช้เพื่อเข้าถึง Vertex API จาก on-prem-vpc ระบบจะโฆษณาที่อยู่ IP ของ PSC 100.100.10.10 จาก aiml-vpc-cloud-router-vpn เป็นการโฆษณาเราเตอร์ที่กำหนดเองไปยังเครือข่ายในองค์กรในขั้นตอนถัดไป

จาก Cloud Shell

gcloud compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=100.100.10.10 \
    --network=aiml-vpc

สร้างปลายทาง PSC

จาก Cloud Shell

gcloud compute forwarding-rules create pscvertex \
    --global \
    --network=aiml-vpc \
    --address=psc-ip \
    --target-google-apis-bundle=all-apis

แสดงรายการปลายทาง Private Service Connect ที่กำหนดค่าไว้

จาก Cloud Shell

gcloud compute forwarding-rules list  \
--filter target="(all-apis OR vpc-sc)" --global

อธิบายปลายทาง Private Service Connect ที่กำหนดค่าไว้

จาก Cloud Shell

gcloud compute forwarding-rules describe \
    pscvertex --global

7. การเชื่อมต่อแบบผสม

ในส่วนต่อไปนี้ คุณจะสร้าง Cloud Router ที่ช่วยให้แลกเปลี่ยนเส้นทางแบบไดนามิกระหว่าง Virtual Private Cloud (VPC) กับเครือข่ายเพียร์ได้โดยใช้ Border Gateway Protocol (BGP)

Cloud Router สามารถตั้งค่าเซสชัน BGP ผ่านอุโมงค์ Cloud VPN เพื่อเชื่อมต่อเครือข่าย โดยจะเรียนรู้ช่วงที่อยู่ IP ของซับเน็ตใหม่โดยอัตโนมัติและประกาศช่วงดังกล่าวไปยังเครือข่ายเพียร์

ในบทแนะนำนี้ คุณจะได้ทำให้ใช้งานได้ VPN ความพร้อมใช้งานสูงระหว่าง aiml-vpc กับ on-prem-vpc

สร้างเกตเวย์ VPN ความพร้อมใช้งานสูงสำหรับ aiml-vpc

เมื่อสร้างเกตเวย์แต่ละรายการ ระบบจะจัดสรรที่อยู่ IPv4 ภายนอก 2 รายการโดยอัตโนมัติ ซึ่งรายการหนึ่งจะใช้กับอินเทอร์เฟซของเกตเวย์แต่ละรายการ

สร้างเกตเวย์ VPN ความพร้อมใช้งานสูง ภายใน Cloud Shell

gcloud compute vpn-gateways create aiml-vpn-gw \
   --network=aiml-vpc\
   --region=us-central1

สร้างเกตเวย์ VPN ความพร้อมใช้งานสูง สำหรับ on-prem-vpc

เมื่อสร้างเกตเวย์แต่ละรายการ ระบบจะจัดสรรที่อยู่ IPv4 ภายนอก 2 รายการโดยอัตโนมัติ ซึ่งรายการหนึ่งจะใช้กับอินเทอร์เฟซของเกตเวย์แต่ละรายการ จดที่อยู่ IP เหล่านี้ไว้เพื่อใช้ในขั้นตอนการกำหนดค่าในภายหลัง

สร้างเกตเวย์ VPN ความพร้อมใช้งานสูงใน Cloud Shell

gcloud compute vpn-gateways create on-prem-vpn-gw \
   --network=on-prem-vpc\
   --region=us-central1

ตรวจสอบการสร้างเกตเวย์ VPN ความพร้อมใช้งานสูง

ใช้คอนโซลเพื่อไปที่การเชื่อมต่อแบบไฮบริด → VPN → เกตเวย์ CLOUD VPN และตรวจสอบว่าระบบได้สร้าง IP ของเกตเวย์แล้ว

66312b1b53c233d7.png

สร้าง Cloud Router สำหรับ aiml-vpc

สร้าง Cloud Router ที่อยู่ใน us-central1 ภายใน Cloud Shell

gcloud compute routers create aiml-cr-us-central1 \
   --region=us-central1 \
   --network=aiml-vpc\
   --asn=65001

สร้าง Cloud Router สำหรับ on-prem-vpc

สร้าง Cloud Router ที่อยู่ใน us-central1 ภายใน Cloud Shell

gcloud compute routers create on-prem-cr-us-central1 \
   --region=us-central1 \
   --network=on-prem-vpc \
   --asn=65002

สร้างอุโมงค์ข้อมูล VPN สำหรับ aiml-vpc

คุณจะสร้างอุโมงค์ข้อมูล VPN 2 รายการในเกตเวย์ VPN ความพร้อมใช้งานสูงแต่ละรายการ

สร้างอุโมงค์ข้อมูล VPN0

สร้าง tunnel0 ภายใน Cloud Shell โดยใช้คำสั่งต่อไปนี้

gcloud compute vpn-tunnels create aiml-vpc-tunnel0 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router aiml-cr-us-central1 \
    --vpn-gateway aiml-vpn-gw \
    --interface 0

สร้างอุโมงค์ข้อมูล VPN1

สร้าง tunnel1 ภายใน Cloud Shell โดยใช้คำสั่งต่อไปนี้

gcloud compute vpn-tunnels create aiml-vpc-tunnel1 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router aiml-cr-us-central1 \
    --vpn-gateway aiml-vpn-gw \
    --interface 1

สร้างอุโมงค์ VPN สำหรับ on-prem-vpc

คุณจะสร้างอุโมงค์ข้อมูล VPN 2 รายการในเกตเวย์ VPN ความพร้อมใช้งานสูงแต่ละรายการ

สร้างอุโมงค์ข้อมูล VPN0

สร้าง tunnel0 ภายใน Cloud Shell โดยใช้คำสั่งต่อไปนี้

gcloud compute vpn-tunnels create on-prem-tunnel0 \
    --peer-gcp-gateway aiml-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 0

สร้างอุโมงค์ข้อมูล VPN1

สร้าง tunnel1 ภายใน Cloud Shell โดยใช้คำสั่งต่อไปนี้

gcloud compute vpn-tunnels create on-prem-tunnel1 \
    --peer-gcp-gateway aiml-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 1

ตรวจสอบการสร้างอุโมงค์ข้อมูล VPN

ใช้คอนโซลเพื่อไปที่การเชื่อมต่อแบบไฮบริด → VPN → อุโมงค์ Cloud VPN

e8e13ebaed09f1.png

8. สร้างเพื่อนบ้าน BGP

สร้างเซสชัน BGP

ในส่วนนี้ คุณจะกำหนดค่าอินเทอร์เฟซ Cloud Router และเพียร์ BGP

สร้างอินเทอร์เฟซ BGP และการ Peering สำหรับ aiml-vpc

สร้างอินเทอร์เฟซ BGP ใน Cloud Shell โดยทำดังนี้

gcloud compute routers add-interface aiml-cr-us-central1 \
    --interface-name if-tunnel0-to-onprem \
    --ip-address 169.254.1.1 \
    --mask-length 30 \
    --vpn-tunnel aiml-vpc-tunnel0 \
    --region us-central1

สร้างเพียร์ BGP ใน Cloud Shell โดยทำดังนี้

gcloud compute routers add-bgp-peer aiml-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel0 \
    --interface if-tunnel1-to-onprem \
    --peer-ip-address 169.254.1.2 \
    --peer-asn 65002 \
    --region us-central1

สร้างอินเทอร์เฟซ BGP ใน Cloud Shell โดยทำดังนี้

gcloud compute routers add-interface aiml-cr-us-central1 \
    --interface-name if-tunnel1-to-onprem \
    --ip-address 169.254.2.1 \
    --mask-length 30 \
    --vpn-tunnel aiml-vpc-tunnel1 \
    --region us-central1

สร้างเพียร์ BGP ใน Cloud Shell โดยทำดังนี้

gcloud compute routers add-bgp-peer aiml-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel1 \
    --interface if-tunnel2-to-onprem \
    --peer-ip-address 169.254.2.2 \
    --peer-asn 65002 \
    --region us-central1

สร้างอินเทอร์เฟซ BGP และการ Peering สำหรับ VPC ภายในองค์กร

สร้างอินเทอร์เฟซ BGP ใน Cloud Shell โดยทำดังนี้

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel0-to-aiml-vpc\
    --ip-address 169.254.1.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel0 \
    --region us-central1

สร้างเพียร์ BGP ใน Cloud Shell โดยทำดังนี้

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-aiml-vpc-tunnel0 \
    --interface if-tunnel1-to-aiml-vpc\
    --peer-ip-address 169.254.1.1 \
    --peer-asn 65001 \
    --region us-central1

สร้างอินเทอร์เฟซ BGP ใน Cloud Shell โดยทำดังนี้

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel1-to-aiml-vpc\
    --ip-address 169.254.2.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel1 \
    --region us-central1

สร้างเพียร์ BGP ใน Cloud Shell โดยทำดังนี้

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-aiml-vpc-tunnel1\
    --interface if-tunnel2-to-aiml-vpc\
    --peer-ip-address 169.254.2.1 \
    --peer-asn 65001 \
    --region us-central1

ไปที่การเชื่อมต่อแบบไฮบริด → VPN เพื่อดูรายละเอียดอุโมงค์ข้อมูล VPN

cb91b4476a88acd3.png

ตรวจสอบเส้นทางที่ aiml-vpc เรียนรู้ผ่าน VPN ความพร้อมใช้งานสูง

ใช้คอนโซลเพื่อไปที่เครือข่าย VPC → เครือข่าย VPC → aiml-vpc → เส้นทาง → ภูมิภาค → US-CENTRAL1 → ดู

สังเกตว่า aiml-vpc ได้เรียนรู้เส้นทางจาก on-prem-vpc nat-subnet และ private-ip-subnet

f407ed6e1a6233db.png

ตรวจสอบว่า VPC ภายในองค์กรได้เรียนรู้ซับเน็ตของ workbench ผ่าน VPN ความพร้อมใช้งานสูง

ใช้คอนโซลเพื่อไปที่เครือข่าย VPC → เครือข่าย VPC → on-prem-vpc → เส้นทาง → ภูมิภาค → US-CENTRAL1 → ดู

7957e5d898a9e7e0.png

9. สร้างการประกาศเส้นทางที่กำหนดเอง aiml-vpc

เราเตอร์ระบบคลาวด์ aiml-cr-us-central1 จะไม่โฆษณา IP ของปลายทาง Private Service Connect โดยอัตโนมัติเนื่องจากไม่ได้กำหนดค่าเครือข่ายย่อยใน VPC

แต่คุณจะต้องสร้างการแนะนำเส้นทางที่กำหนดเองจาก Cloud Router aiml-cr-us-central สำหรับที่อยู่ IP ของอุปกรณ์ปลายทาง 100.100.10.10 ซึ่งจะได้รับการแนะนำไปยังสภาพแวดล้อมภายในองค์กรผ่าน BGP ไปยัง on-prem-vpc

จากคอนโซล ให้ไปที่การเชื่อมต่อแบบไฮบริด → เราเตอร์ระบบคลาวด์ → aiml-cr-us-central1 แล้วเลือกแก้ไข

c8fb02ed59a5b068.png

ในส่วนเส้นทางที่โฆษณา ให้เลือกตัวเลือกสร้างเส้นทางที่กำหนดเอง อัปเดตช่องตามตัวอย่างด้านล่าง เลือกเสร็จสิ้น แล้วคลิกบันทึก

5996464e3aae0665.png

f799082ab2cd7e31.png

การตรวจสอบความถูกต้อง

ตรวจสอบว่า on-prem-vpc ได้เรียนรู้ที่อยู่ IP ของปลายทาง PSC ผ่าน HA-VPN

ใช้คอนโซลเพื่อไปที่เครือข่าย VPC → เครือข่าย VPC → on-prem-vpc → เส้นทาง → ภูมิภาค → US-CENTRAL1 → ดู

1b42673e6f940bf2.png

10. สร้างการประกาศเส้นทางที่กำหนดเองใน on-prem-vpc

Cloud Router ในองค์กร-VPC จะโฆษณาซับเน็ตทั้งหมดโดยค่าเริ่มต้น แต่คุณต้องการเพียง private-ip-subnet เท่านั้น

ในส่วนต่อไปนี้ ให้อัปเดตการแนะนำเส้นทางจาก Cloud Router ภายในองค์กร on-prem-cr-us-central1

จากคอนโซล ให้ไปที่ HYBRID CONNECTIVITY → CLOUD ROUTERS → on-prem-cr-us-central1 แล้วเลือกแก้ไข

bd96bde9550d516a.png

ในส่วนเส้นทางที่โฆษณา ให้เลือกตัวเลือกสร้างเส้นทางที่กำหนดเอง อัปเดตช่องตามตัวอย่างด้านล่าง เลือกเสร็จสิ้น แล้วคลิกบันทึก

f8b61f669a9cfeef.png

การตรวจสอบความถูกต้อง

ตรวจสอบว่า aiml-vpc ได้เรียนรู้เส้นทาง private-ip-subnet จาก on-prem-vpc แล้ว

ใช้คอนโซลเพื่อไปที่เครือข่าย VPC → เครือข่าย VPC → aiml-vpc → เส้นทาง → ภูมิภาค → US-CENTRAL1 → ดู

2b1a7a5f918e9f50.png

11. สร้างบัญชีบริการที่มีการจัดการโดยผู้ใช้ (อินสแตนซ์ GCE)

หากต้องการให้การควบคุม Vertex API มีความละเอียดสูง ผู้ใช้จะต้องมีบัญชีบริการที่จัดการเอง ซึ่งจะใช้กับอินสแตนซ์ไคลเอ็นต์ NAT และไคลเอ็นต์ส่วนตัว เมื่อสร้างแล้ว คุณจะแก้ไขสิทธิ์ของบัญชีบริการได้ตามข้อกำหนดทางธุรกิจ ในบทแนะนำ บัญชีบริการที่มีการจัดการโดยผู้ใช้ vertex-sa จะมีบทบาทต่อไปนี้

คุณต้อง Service Account API ก่อนดำเนินการต่อ

สร้างบัญชีบริการภายใน Cloud Shell

gcloud iam service-accounts create gce-vertex-sa \
    --description="service account for vertex" \
    --display-name="gce-vertex-sa"

ใน Cloud Shell ให้อัปเดตบัญชีบริการด้วยบทบาทผู้ดูแลระบบอินสแตนซ์ Compute

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:gce-vertex-sa@$projectid.iam.gserviceaccount.com" --role="roles/compute.instanceAdmin.v1"

ใน Cloud Shell ให้อัปเดตบัญชีบริการด้วยบทบาทผู้ใช้ Vertex AI

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

12. สร้างบัญชีบริการที่มีการจัดการโดยผู้ใช้ (Notebook)

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

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

สร้างบัญชีบริการภายใน Cloud Shell

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

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

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

ใน Cloud Shell ให้อัปเดตบัญชีบริการด้วยบทบาทผู้ใช้ Vertex AI

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

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

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

ใน Cloud Shell ให้แสดงรายการบัญชีบริการและจดที่อยู่อีเมลที่จะใช้เมื่อสร้าง Notebook ที่ผู้ใช้จัดการ

gcloud iam service-accounts list

13. สร้างอินสแตนซ์ทดสอบ

ในส่วนต่อไปนี้ คุณจะสร้างอินสแตนซ์ทดสอบเพื่อตรวจสอบวิธีต่างๆ ในการเข้าถึง Vertex AI API โดยเฉพาะ

  • อินสแตนซ์ nat-client, จะใช้ Cloud NAT เพื่อแก้ไข Vertex AI จึงเข้าถึงอุปกรณ์ปลายทางการคาดการณ์ออนไลน์ผ่านอินเทอร์เน็ตได้
  • อินสแตนซ์ private-client จะใช้ IP ของ Private Service Connect 100.100.10.10 เพื่อเข้าถึงปลายทางการคาดการณ์ออนไลน์ผ่าน HA-VPN

สร้างnat-clientอินสแตนซ์ภายใน Cloud Shell

gcloud compute instances create nat-client \
    --zone=us-central1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=nat-subnet \
    --service-account=vertex-sa@$projectid.iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

สร้างprivate-clientอินสแตนซ์ภายใน Cloud Shell

gcloud compute instances create private-client \
    --zone=us-central1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=private-ip-subnet \
    --service-account=vertex-sa@$projectid.iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

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

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

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

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

14. สร้าง Notebook ที่ผู้ใช้จัดการ

Notebook API

ในส่วนต่อไปนี้ ให้สร้าง Notebook ที่ผู้ใช้จัดการซึ่งรวมบัญชีบริการที่สร้างไว้ก่อนหน้านี้ นั่นคือ user-managed-notebook-sa

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

gcloud notebooks 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 \
      --no-public-ip    --service-account=user-managed-notebook-sa@$projectid.iam.gserviceaccount.com

15. ทำให้โมเดลและการคาดการณ์ออนไลน์ใช้งานได้

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

ee68b7ba0cfd2746.png

16. ตรวจสอบสิทธิ์เข้าถึง Vertex API ผ่านอินเทอร์เน็ต

ในส่วนต่อไปนี้ คุณจะเข้าสู่ระบบอินสแตนซ์ nat-client และตรวจสอบการเชื่อมต่อกับ Vertex AI โดยใช้ dig และ tcpdump กับโดเมน us-central1-aiplatform.googleapis.com ที่ใช้ในการแก้ไข Vertex API

เข้าสู่ระบบ nat-client โดยใช้ IAP ใน Cloud Shell เพื่อตรวจสอบการเชื่อมต่อกับ Vertex API โดยการเรียกใช้ dig กับโดเมน Vertex us-central1-aiplatform.googleapis.com

gcloud compute ssh nat-client --project=$projectid --zone=us-central1-a --tunnel-through-iap

เรียกใช้ dig

dig us-central1-aiplatform.googleapis.com

ตัวอย่างเช่น ให้สังเกตที่อยู่ IP สาธารณะในการตอบกลับ DNS

user@nat-client:~$ dig us-central1-aiplatform.googleapis.com

; <<>> DiG 9.16.42-Debian <<>> us-central1-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56761
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-aiplatform.googleapis.com. IN A

;; ANSWER SECTION:
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.111.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.250.1.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.121.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.250.103.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.120.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.171.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.250.159.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.120.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.161.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.172.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.126.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.70.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.132.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.201.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.202.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.69.95

;; Query time: 4 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Thu Jun 29 01:35:57 UTC 2023
;; MSG SIZE  rcvd: 322

จากระบบปฏิบัติการไคลเอ็นต์ NAT ให้เรียกใช้ tcpdump เพื่อตรวจสอบการแปลง DNS เมื่อเรียกใช้ curl กับการคาดการณ์ออนไลน์

 sudo tcpdump -i any port 53 -n

ตัวอย่าง

user@nat-client:~$ sudo tcpdump -i any port 53 -n 
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

เปิดเทอร์มินัล Cloud Shell ใหม่โดยเลือก "+" เมื่อเปิดแท็บใหม่แล้ว ให้อัปเดตตัวแปรชื่อโปรเจ็กต์

ใน Cloud Shell ให้อัปเดตตัวแปรชื่อโปรเจ็กต์

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

ใน Cloud Shell 2 ให้ใช้ SSH ไปยังอินสแตนซ์ nat-client

gcloud compute ssh --zone "us-central1-a" "nat-client" --project "$projectid"

ในส่วนต่อไปนี้ คุณจะสร้างไฟล์ instances.json โดยใช้โปรแกรมแก้ไข sudo VI หรือ nano และแทรกสตริงข้อมูลที่ใช้เพื่อรับการคาดการณ์จากโมเดลที่ทำให้ใช้งานได้

จากระบบปฏิบัติการไคลเอ็นต์ NAT ให้สร้างไฟล์ instances.json ที่มีสตริงข้อมูลด้านล่าง

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

ตัวอย่าง

user@nat-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@nat-client:$

รับรหัสปลายทางการคาดการณ์ออนไลน์จาก Cloud Console ซึ่งจะใช้ในขั้นตอนถัดไป

ไปที่ VERTEX AI → การคาดการณ์ออนไลน์

237d413ccde1e95b.png

สร้างตัวแปรต่อไปนี้จากระบบปฏิบัติการไคลเอ็นต์ NAT

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

ตัวอย่าง

ENDPOINT_ID="3328226095324463104"

จากระบบปฏิบัติการ nat-client ให้เรียกใช้ curl เพื่อรับการตอบกลับจากโมเดล

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

ตัวอย่าง โปรดสังเกตการคาดการณ์ที่สำเร็จ

user@nat-client$ curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "1949163636186415104",
  "model": "projects/234086459238/locations/us-central1/models/947543727654567936",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}

17. การตรวจสอบ - การเข้าถึงอินเทอร์เน็ตไปยัง Vertex API

ตอนนี้คุณได้ดำเนินการคาดการณ์แล้ว มาดูผลลัพธ์ของ TCPDUMP (เทอร์มินัล 1) ที่ระบุอินสแตนซ์ nat-client (192.168.10.2) ที่ทำการคำขอ DNS ไปยังเซิร์ฟเวอร์ DNS ในเครื่อง 169.254.169.254 สำหรับโดเมน Vertex AI us-central1-aiplatform.googleapis.com กัน ผลลัพธ์ของคำขอ DNS คือที่อยู่ IP เสมือน (VIP) สาธารณะสำหรับ Vertex API ดังที่ระบุไว้ด้านล่าง

user@nat-client:~$ sudo tcpdump -i any port 53 -n
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
20:05:09.260937 ens4  Out IP 192.168.10.2.40782 > 169.254.169.254.53: 47190+ A? oauth2.googleapis.com. (39)
20:05:09.260946 ens4  Out IP 192.168.10.2.40782 > 169.254.169.254.53: 28075+ AAAA? oauth2.googleapis.com. (39)
20:05:09.263556 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.40782: 28075 4/0/0 AAAA 2607:f8b0:4001:c34::5f, AAAA 2607:f8b0:4001:c54::5f, AAAA 2607:f8b0:4001:c16::5f, AAAA 2607:f8b0:4001:c17::5f (151)
20:05:09.265018 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.40782: 47190 16/0/0 A 74.125.201.95, A 74.125.202.95, A 74.125.69.95, A 64.233.183.95, A 173.194.193.95, A 173.194.194.95, A 173.194.195.95, A 173.194.196.95, A 173.194.197.95, A 64.233.191.95, A 173.194.74.95, A 173.194.192.95, A 209.85.145.95, A 209.85.146.95, A 209.85.147.95, A 142.250.125.95 (295)
20:05:09.474478 ens4  Out IP 192.168.10.2.57356 > 169.254.169.254.53: 36008+ A? us-central1-aiplatform.googleapis.com. (55)
20:05:09.474488 ens4  Out IP 192.168.10.2.57356 > 169.254.169.254.53: 47020+ AAAA? us-central1-aiplatform.googleapis.com. (55)
20:05:09.477190 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.57356: 36008 16/0/0 A 173.194.194.95, A 173.194.195.95, A 173.194.196.95, A 173.194.197.95, A 173.194.74.95, A 173.194.192.95, A 209.85.145.95, A 209.85.146.95, A 209.85.147.95, A 142.250.125.95, A 142.250.136.95, A 142.250.148.95, A 209.85.200.95, A 209.85.234.95, A 142.250.152.95, A 142.250.128.95 (311)
20:05:09.478607 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.57356: 47020 4/0/0 AAAA 2607:f8b0:4001:c1b::5f, AAAA 2607:f8b0:4001:c0c::5f, AAAA 2607:f8b0:4001:c0e::5f, AAAA 2607:f8b0:4001:c1e::5f (167)

18. เปิดใช้การเข้าถึงแบบส่วนตัวไปยัง Vertex AI API

ในส่วนต่อไปนี้ คุณจะเข้าถึง Vertex API โดยใช้ Private Service Connect ผ่านระบบเครือข่ายแบบไฮบริด (VPN ความพร้อมใช้งานสูง) เพื่อเข้าถึงการคาดการณ์ออนไลน์แบบส่วนตัว ในตัวอย่างที่ใช้ในบทแนะนำ คุณจะอัปเดตไฟล์ /etc/hosts ในอินสแตนซ์ไคลเอ็นต์ส่วนตัว

ในสภาพแวดล้อมในองค์กร การอัปเดตไฟล์โฮสต์ /etc/hosts ของเครื่องเดียวหรือ 2-3 เครื่องเพื่อการทดสอบเป็นเรื่องที่เหมาะสม แต่สำหรับสภาพแวดล้อมขนาดใหญ่และสภาพแวดล้อมการใช้งานจริง การสร้างโซนการส่งต่อใหม่โดยใช้ FQDN ของปลายทาง PSC เป็นสิ่งที่พึงประสงค์มากกว่า

ตัวอย่างเช่น ปลายทาง PSC ที่สร้างในบทแนะนำมีชื่อว่า pscvertex ซึ่งจะแปลเป็น pscvertex.p.googleapis.com เมื่อใช้ปลายทางสำหรับ Vertex ให้ต่อท้าย FQDN ด้วยบริการ เช่น us-central1-aiplatform-pscvertex.p.googleapis.com

การอัปเดต DNS ในองค์กรด้วยอุปกรณ์ปลายทาง PSC ยังต้องมีการเปลี่ยนโครงสร้างภายในโค้ดแอปพลิเคชันในเครื่องเพื่อเรียกใช้ FQDN เช่น us-central1-aiplatform-pscvertex.p.googleapis.com แทนที่จะใช้ปลายทางสาธารณะดั้งเดิม us-central1-aiplatform.googleapis.com

ไคลเอ็นต์ที่กำหนดค่าให้ใช้ปลายทางที่กำหนดเองได้จะใช้ชื่อ DNS ของ p.googleapis.com เพื่อส่งคำขอไปยังปลายทางได้

โปรดดูเอกสารประกอบสำหรับไคลเอ็นต์หรือไลบรารีของไคลเอ็นต์เพื่อดูข้อมูลเกี่ยวกับการกำหนดค่าให้ใช้ปลายทางที่กำหนดเอง เช่น

เปิดเทอร์มินัล Cloud Shell ใหม่โดยเลือก "+" เมื่อเปิดแท็บใหม่แล้ว ให้อัปเดตตัวแปรชื่อโปรเจ็กต์

จาก Cloud Shell

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

เข้าสู่ระบบไคลเอ็นต์ส่วนตัวโดยใช้ IAP ใน Cloud Shell ใหม่เพื่อตรวจสอบการเชื่อมต่อกับ Vertex API โดยการเรียกใช้ dig กับโดเมน Vertex us-central1-aiplatform.googleapis.com

จาก Cloud Shell ให้เข้าสู่ระบบอินสแตนซ์ระบบปฏิบัติการของไคลเอ็นต์ส่วนตัว

gcloud compute ssh private-client --project=$projectid --zone=us-central1-a --tunnel-through-iap

เรียกใช้ dig

dig us-central1-aiplatform.googleapis.com

ตัวอย่างเช่น ให้จดบันทึก IP สาธารณะตามการตอบกลับ DNS

user@private-client:~$ dig us-central1-aiplatform.googleapis.com

; <<>> DiG 9.16.42-Debian <<>> us-central1-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33311
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-aiplatform.googleapis.com. IN A

;; ANSWER SECTION:
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.132.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.201.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.202.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.69.95
us-central1-aiplatform.googleapis.com. 300 IN A 64.233.182.95
us-central1-aiplatform.googleapis.com. 300 IN A 64.233.183.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.193.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.194.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.195.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.196.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.197.95
us-central1-aiplatform.googleapis.com. 300 IN A 64.233.191.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.74.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.192.95
us-central1-aiplatform.googleapis.com. 300 IN A 209.85.145.95
us-central1-aiplatform.googleapis.com. 300 IN A 209.85.146.95

;; Query time: 4 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Sun Jul 02 20:5

อัปเดตอินสแตนซ์ไคลเอ็นต์ส่วนตัว /etc/hosts โดยใช้โปรแกรมแก้ไข sudo VI หรือ nano เพื่อสร้างระเบียนของ FQDN ของ Vertex AI us-central1-aiplatform.googleapis.com ที่ชี้ไปยังปลายทาง PSC 100.100.10.10 โดยไม่ต้องทำการเปลี่ยนแปลงเพิ่มเติม

ตัวอย่าง

user@private-client:~$ more /etc/hosts
127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

100.100.10.10 us-central1-aiplatform.googleapis.com
192.168.20.2 private-client.c.$projectid.internal private-client  # Added by Google
169.254.169.254 metadata.google.internal  # Added by Google

จากระบบปฏิบัติการไคลเอ็นต์ส่วนตัว ให้ใช้คำสั่ง ping ไปยังปลายทาง Vertex API

ping us-central1-aiplatform.googleapis.com

ตัวอย่างเช่น PING จะแสดง IP ของปลายทาง PSC แต่ไม่คาดหวังการตอบกลับ

user@private-client:~$ ping us-central1-aiplatform.googleapis.com
PING us-central1-aiplatform.googleapis.com (100.100.10.10) 56(84) bytes of data.

จากระบบปฏิบัติการไคลเอ็นต์ส่วนตัว ให้เรียกใช้ tcpdump เพื่อตรวจสอบการแปลง DNS และเส้นทางข้อมูล IP ไปยังปลายทาง PSC เมื่อเรียกใช้ curl กับการคาดการณ์ออนไลน์

 sudo tcpdump -i any port 53 -n or host 100.100.10.10

เปิดเทอร์มินัล Cloud Shell ที่ 4 โดยเลือก "+" เมื่อเปิดแท็บใหม่แล้ว ให้อัปเดตตัวแปรชื่อโปรเจ็กต์

อัปเดตตัวแปรชื่อโปรเจ็กต์ภายใน Cloud Shell

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

ใน Cloud Shell 4 ให้ใช้ ssh ไปยังอินสแตนซ์ไคลเอ็นต์ส่วนตัว

gcloud compute ssh --zone "us-central1-a" "private-client" --project "$projectid"

ในส่วนต่อไปนี้ คุณจะสร้างไฟล์ instances.json โดยใช้โปรแกรมแก้ไข sudo VI หรือ nano และแทรกสตริงข้อมูลที่ใช้เพื่อรับการคาดการณ์จากโมเดลที่ทำให้ใช้งานได้

จากระบบปฏิบัติการของไคลเอ็นต์ส่วนตัว ให้สร้างไฟล์ instances.json ที่มีสตริงข้อมูลด้านล่าง

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

ตัวอย่าง

user@private-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@private-client:$

สร้างตัวแปรต่อไปนี้จากระบบปฏิบัติการไคลเอ็นต์ส่วนตัว

gcloud config list project
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

ตัวอย่าง

ENDPOINT_ID="3328226095324463104"

จากระบบปฏิบัติการไคลเอ็นต์ส่วนตัวใน Cloud Shell 4 ให้เรียกใช้ curl เพื่อรับการตอบกลับจากโมเดล

curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

19. การตรวจสอบ - การเข้าถึง Vertex API แบบส่วนตัว

จากระบบปฏิบัติการไคลเอ็นต์ส่วนตัวใน Cloud Shell 4 โปรดทราบว่ามีการใช้ IP ของปลายทาง PSC (100.100.10.10) เพื่อเข้าถึง Vertex API

user@private-client$ curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 100.100.10.10:443...
* Connected to us-central1-aiplatform.googleapis.com (100.100.10.10) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=upload.video.google.com
*  start date: May 29 08:21:36 2023 GMT
*  expire date: Aug 21 08:21:35 2023 GMT
*  subjectAltName: host "us-central1-aiplatform.googleapis.com" matched cert's "*.googleapis.com"
*  issuer: C=US; O=Google Trust Services LLC; CN=GTS CA 1C3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x55f2ab65c2c0)
> POST /v1/projects/$projectid/locations/us-central1/endpoints/3328226095324463104:predict HTTP/2
> Host: us-central1-aiplatform.googleapis.com
> user-agent: curl/7.74.0
> accept: */*
> authorization: Bearer ya29.a0AbVbY6NdCbIJYj0mQROeq-xYgQCw534TTtjRc1kBAEOimKCFxb3gqgD5AvhfefJatSNr33eW1YJirfQVMptFoqfjRoB-i8zEJJ_GGCVqhsVnpSOjK0hzJQSuo2YGjIiSe1o1zdo7lWmh1Px-vLe8FImieGkrQ1hqVaa6aCgYKAXgSARESFQFWKvPlUQ_FuKB2hrDJRyFDjupL1g0171
> content-type: application/json
> content-length: 154
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
* We are completely uploaded and fine
< HTTP/2 200 
< content-type: application/json; charset=UTF-8
< x-vertex-ai-internal-prediction-backend: harpoon
< date: Mon, 03 Jul 2023 22:13:35 GMT
< vary: X-Origin
< vary: Referer
< vary: Origin,Accept-Encoding
< server: scaffolding on HTTPServer2
< cache-control: private
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< accept-ranges: none
< 
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "1949163636186415104",
  "model": "projects/234086459238/locations/us-central1/models/947543727654567936",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}
* Connection #0 to host us-central1-aiplatform.googleapis.com left intact

จากเทอร์มินัล TCPDUMP ใน Cloud Shell 3 เราสามารถตรวจสอบได้ว่าไม่มีการค้นหา DNS ไปยัง us-central1-aiplatform.googleapis.com เนื่องจากไฟล์ /etc/host มีลำดับความสำคัญสูงกว่า แต่มีการใช้ที่อยู่ IP ของ PSC 100.100.10.10 ในเส้นทางข้อมูล

user@private-client:~$ sudo tcpdump -i any port 53 -n or host 100.100.10.10
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
22:13:35.507625 ens4  Out IP 192.168.20.2.37004 > 169.254.169.254.53: 58585+ A? oauth2.googleapis.com. (39)
22:13:35.507631 ens4  Out IP 192.168.20.2.37004 > 169.254.169.254.53: 15580+ AAAA? oauth2.googleapis.com. (39)
22:13:35.511796 ens4  In  IP 169.254.169.254.53 > 192.168.20.2.37004: 58585 16/0/0 A 142.251.6.95, A 108.177.112.95, A 74.125.124.95, A 172.217.212.95, A 172.217.214.95, A 172.253.114.95, A 172.253.119.95, A 108.177.111.95, A 142.250.1.95, A 108.177.121.95, A 142.250.103.95, A 108.177.120.95, A 142.251.171.95, A 142.250.159.95, A 142.251.120.95, A 142.251.161.95 (295)
22:13:35.512002 ens4  In  IP 169.254.169.254.53 > 192.168.20.2.37004: 15580 4/0/0 AAAA 2607:f8b0:4001:c2b::5f, AAAA 2607:f8b0:4001:c18::5f, AAAA 2607:f8b0:4001:c5f::5f, AAAA 2607:f8b0:4001:c58::5f (151)
22:13:35.722145 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [S], seq 1951267724, win 65320, options [mss 1420,sackOK,TS val 1371205990 ecr 0,nop,wscale 7], length 0
22:13:35.730727 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [S.], seq 3198878726, ack 1951267725, win 65535, options [mss 1366,sackOK,TS val 67847676 ecr 1371205990,nop,wscale 8], length 0
22:13:35.730760 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [.], ack 1, win 511, options [nop,nop,TS val 1371205999 ecr 67847676], length 0
22:13:35.738339 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 1:518, ack 1, win 511, options [nop,nop,TS val 1371206006 ecr 67847676], length 517
22:13:35.739922 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [.], ack 518, win 261, options [nop,nop,TS val 67847688 ecr 1371206006], length 0
22:13:35.740860 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [.], seq 1:2709, ack 518, win 261, options [nop,nop,TS val 67847689 ecr 1371206006], length 2708
22:13:35.740863 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [P.], seq 2709:4699, ack 518, win 261, options [nop,nop,TS val 67847689 ecr 1371206006], length 1990
22:13:35.740874 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [.], ack 2709, win 497, options [nop,nop,TS val 1371206009 ecr 67847689], length 0
22:13:35.740886 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [.], ack 4699, win 485, options [nop,nop,TS val 1371206009 ecr 67847689], length 0
22:13:35.742709 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 518:598, ack 4699, win 501, options [nop,nop,TS val 1371206011 ecr 67847689], length 80
22:13:35.743996 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 598:644, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 46
22:13:35.744011 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 644:693, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 49
22:13:35.744082 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 693:728, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 35
22:13:35.744165 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 728:1069, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 341

คุณตรวจสอบการเชื่อมต่อกับการคาดการณ์ออนไลน์ผ่านปลายทางสาธารณะทางอินเทอร์เน็ต และแบบส่วนตัวโดยใช้เครือข่ายแบบไฮบริดและ Private Service Connect (googleapis) เรียบร้อยแล้ว ออกจากระบบปฏิบัติการเพื่อกลับไปที่พรอมต์ของ Cloud Shell

20. ล้างข้อมูล

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

gcloud compute forwarding-rules delete pscvertex --global --quiet

gcloud compute instances delete workbench-tutorial --zone=us-central1-a --quiet 

gcloud compute addresses delete psc-ip --global --quiet

gcloud compute networks subnets delete workbench-subnet --region=us-central1 --quiet 

gcloud compute vpn-tunnels delete aiml-vpc-tunnel0 aiml-vpc-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=us-central1 --quiet

gcloud compute vpn-gateways delete aiml-vpn-gw on-prem-vpn-gw --region=us-central1 --quiet 

gcloud compute routers delete aiml-cr-us-central1 cloud-router-us-central1-aiml-nat --region=us-central1 --quiet 

gcloud compute routers delete cloud-router-us-central1-on-prem-nat on-prem-cr-us-central1 --region=us-central1 --quiet

gcloud compute instances delete nat-client private-client --zone=us-central1-a --quiet

gcloud compute firewall-rules delete ssh-iap-on-prem-vpc --quiet

gcloud compute networks subnets delete nat-subnet  private-ip-subnet --region=us-central1 --quiet

gcloud compute networks delete on-prem-vpc --quiet

gcloud compute networks delete aiml-vpc --quiet

ลบคอมโพเนนต์ Vertex

หากต้องการลบอิมเมจคอนเทนเนอร์ ให้ไปที่ Artifact Registry เลือกที่เก็บที่คุณสร้างขึ้น แล้วเลือกลบ

616a3108bc2e48c8.png

หากต้องการลบ Storage Bucket ให้ใช้เมนูการนำทางใน Cloud Console ไปที่ Storage เลือก Bucket แล้วคลิกลบ:

eddd1f9fdfaede8.png

ยกเลิกการทำให้โมเดลใช้งานได้จากปลายทาง ไปที่ Vertex AI → การคาดการณ์ออนไลน์ → เลือก diamonds-cpr_endpoint → ยกเลิกการทำให้โมเดลใช้งานได้จากปลายทาง → ยกเลิกการทำให้ใช้งานได้

bc95f092d21d4698.png

ลบโมเดล ไปที่ Vertex AI → Model Registry → ลบโมเดล

ec4afff091e11606.png

ลบปลายทางการคาดการณ์ออนไลน์ ไปที่ VertexAI → การคาดการณ์ออนไลน์ → เลือก diamonds-cpr_endpoint → ลบปลายทาง

7453760299bdfb9a.png

21. ขอแสดงความยินดี

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

คุณสร้าง nat-client และ private-client แล้วใช้ TCPDUMP เพื่อตรวจสอบที่อยู่ IP ที่ใช้ในการเข้าถึง Vertex API นอกจากนี้ คุณยังได้เรียนรู้เกี่ยวกับ Private Service Connect (googleapis) และวิธีใช้เพื่อแยกแอปพลิเคชันภายในองค์กรและมัลติคลาวด์โดยใช้ประโยชน์จากปลายทาง PSC ของลูกค้า

Cosmopup คิดว่าบทแนะนำนั้นยอดเยี่ยมมาก!!

e6d3675ca7c6911f.jpeg

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

ดูบทแนะนำเหล่านี้

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

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