Private Service Connect für Google APIs verwenden, um über eine Hybridverbindung auf Gemini zuzugreifen

1. Einführung

Private Service Connect für Google APIs (PSC) ist eine Google Cloud-Netzwerkfunktion, mit der Nutzer privaten Zugriff über einen globalen Endpunkt mit privater IP-Adresse in einer VPC konfigurieren können. Für Nutzer, die Code oder clientseitige Anwendungen in einer hybriden Umgebung ausführen, die über ein VPN oder Interconnect mit Google Cloud verbunden ist, wird PSC verwendet, um Google APIs über diese private hybride Verbindung aufzulösen.

PSC für Google APIs kann viele verschiedene Domains auflösen. Die vollständige Liste finden Sie hier. Die Domain, die von den meisten Google-APIs verwendet wird, ist <API>.googleapis.com. Neben dieser Domain bietet PSC Nutzern auch eine Version von googleapis.com, die <API>-<PSC-ENDPOINT-NAME>.**p.**googleapis.com lautet. Mit dieser Domain können Nutzer Anwendungen für die Verwendung bestimmter PSC-Endpunkte konfigurieren. Im häufigsten Anwendungsfall können Nutzer auswählen, welche Anwendungen den PSC-Endpunkt verwenden, um Google API-Traffic über die Hybridverbindung weiterzuleiten. Andere Anwendungen können weiterhin Traffic an den öffentlichen API-Endpunkt weiterleiten.

Gemini gehört zur Vertex AI-Produktfamilie von Google Cloud und ist in der Liste der Google-APIs enthalten, die mit PSC für Google-APIs aufgelöst werden können.

In diesem Codelab erstellen Sie eine simulierte Hybridumgebung, in der eine Workbench-Instanz lokal gehostet wird und Gemini-Python-Code ausgeführt wird, der privat über ein HA VPN auf die Gemini API zugreift und eine Verbindung zu einem PSC-Endpunkt für Google APIs herstellt.

Lerninhalte

  • Erstellen Sie einen NCC Hub.
  • VPC-Spokes in einem NCC-Hub konfigurieren
  • Erstellen Sie ein Cloud HA VPN.
  • Hybrid-Spokes in einem NCC-Hub konfigurieren
  • Erstellen Sie einen PSC-Endpunkt für Google APIs.
  • Benutzerdefinierte Route über HA VPN konfigurieren
  • DNS-Peering-Zone konfigurieren
  • Vertex Workbench-Instanz konfigurieren
  • Konfigurieren Sie Gemini-Python-Code für die Verwendung eines PSC für Google APIs API-Endpunkts.

Voraussetzungen

  • Ein Google Cloud-Projekt mit der Rolle „Inhaber“ oder vollständigen „Bearbeiter“-Berechtigungen.

2. Codelab-Topologie

74f1027c8c8085f6.png

In diesem Codelab verwenden Sie Google Cloud, um eine Hybridumgebung zu simulieren. Einige Schritte in diesem Codelab sind spezifisch für Google Cloud und würden sich unterscheiden, wenn sie in einer echten On-Premise-Umgebung konfiguriert würden. Diese Schritte werden hervorgehoben.

Sie erstellen einen NCC-Hub mit einer Routing-VPC als VPC-Spoke. In dieser VPC wird ein HA VPN für die On-Premise-VPC konfiguriert, die eine On-Premise-Umgebung simuliert. Das HA VPN wird als Hybrid-Spoke im NCC-Hub konfiguriert. In der lokalen VPC erstellen Sie ein Subnetz, in dem eine Workbench-Instanz gehostet wird. Außerdem erstellen Sie eine Cloud NAT-Instanz, die zum Herunterladen von Paketen auf die Workbench-Instanz verwendet wird.

Schließlich erstellen Sie eine DNS-Peering-Zone für die lokale VPC, damit Sie die private Service Directory-Zone für p.googleapis.com verwenden können, die von PSC für Google APIs automatisch erstellt wird.

3. Einrichtung und Anforderungen

Einrichtung der Umgebung im eigenen Tempo

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eins erstellen.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen Namen versuchen. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs kostet wenig oder gar nichts. Wenn Sie Ressourcen herunterfahren möchten, um Kosten zu vermeiden, die über diese Anleitung hinausgehen, können Sie die erstellten Ressourcen oder das Projekt löschen. Neue Google Cloud-Nutzer können am Programm Kostenlose Testversion mit einem Guthaben von 300$ teilnehmen.

Cloud Shell starten

Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Klicken Sie in der Google Cloud Console in der Symbolleiste oben rechts auf das Cloud Shell-Symbol:

55efc1aaa7a4d3ad.png

Die Bereitstellung und Verbindung mit der Umgebung dauert nur einen Moment. Anschließend sehen Sie in etwa Folgendes:

7ffe5cbb04455448.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Alle Aufgaben in diesem Codelab können in einem Browser ausgeführt werden. Sie müssen nichts installieren.

4. VorbereitungDauer: 2:00

APIs aktivieren

Prüfen Sie in Cloud Shell, ob Ihr Projekt richtig konfiguriert ist, und legen Sie Ihre Umgebungsvariablen fest.

Über Cloud Shell

gcloud config list project
gcloud config set project <project-id>
export project=$(gcloud config get-value project)
export region=us-central1
export zone=$region-a
echo $project
echo $region
echo $zone

Aktivieren Sie alle erforderlichen Google APIs im Projekt.

Über Cloud Shell

gcloud services enable compute.googleapis.com
gcloud services enable networkconnectivity.googleapis.com
gcloud services enable dns.googleapis.com
gcloud services enable notebooks.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable aiplatform.googleapis.com

5. VPCs und Subnetze erstellenDauer: 5:00

Netzwerke erstellen

Über Cloud Shell

gcloud compute networks create routing-vpc \
    --subnet-mode=custom

Über Cloud Shell

gcloud compute networks create onprem-vpc \
    --subnet-mode=custom

gcloud compute networks subnets create onprem-$region-subnet \
    --network=onprem-vpc \
    --range=10.0.0.0/24 \
    --region=$region
    --enable-private-ip-google-access

Cloud Router und Cloud NAT erstellen

Erstellen Sie einen Cloud Router, der in Verbindung mit dem HA VPN in der Routing-VPC verwendet wird.

Über Cloud Shell

gcloud compute routers create routing-$region-cr \
    --network=routing-vpc \
    --region=$region \
    --asn=64512

Erstellen Sie einen Cloud Router, der in Verbindung mit dem HA VPN in der onprem-vpc verwendet wird.

Über Cloud Shell

gcloud compute routers create onprem-$region-cr \
    --network=onprem-vpc \
    --region=$region \
    --asn=64513

Erstellen Sie einen Cloud Router, der in Verbindung mit Cloud NAT in der onprem-vpc verwendet wird.

Über Cloud Shell

gcloud compute routers create onprem-$region-cr-4nat \
    --network=onprem-vpc \
    --region=$region

Das Cloud NAT in der onprem-vpc wird zum Herunterladen von Paketen auf die Vertex AI Workbench-Instanz verwendet, die in einem späteren Schritt konfiguriert wird.

Über Cloud Shell

gcloud compute routers nats create onprem-$region-nat \
    --router=onprem-$region-cr-4nat \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

6. Cloud HA VPN erstellenDuration: 7:00

Erstellen Sie die VPN-Gateways.

Über Cloud Shell

gcloud compute vpn-gateways create routing-gateway \
   --network=routing-vpc \
   --region=$region \
   --stack-type=IPV4_ONLY

Über Cloud Shell

gcloud compute vpn-gateways create onprem-gateway \
   --network=onprem-vpc \
   --region=$region \
   --stack-type=IPV4_ONLY

Erstellen Sie die VPN-Tunnel, die von der routing-vpc ausgehen.

Über Cloud Shell

gcloud compute vpn-tunnels create routing-to-onprem-tunnel0 \
    --peer-gcp-gateway=onprem-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=routing-$region-cr \
    --vpn-gateway=routing-gateway \
    --interface=0

gcloud compute vpn-tunnels create routing-to-onprem-tunnel1 \
    --peer-gcp-gateway=onprem-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=routing-$region-cr \
    --vpn-gateway=routing-gateway \
    --interface=1

Erstellen Sie die VPN-Tunnel, die von der onprem-vpc ausgehen.

Über Cloud Shell

gcloud compute vpn-tunnels create onprem-to-routing-tunnel0 \
    --peer-gcp-gateway=routing-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=onprem-$region-cr \
    --vpn-gateway=onprem-gateway \
    --interface=0

    gcloud compute vpn-tunnels create onprem-to-routing-tunnel1 \
    --peer-gcp-gateway=routing-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=onprem-$region-cr \
    --vpn-gateway=onprem-gateway \
    --interface=1

Richten Sie BGP-Sitzungen für die beiden Tunnel ein, die von der routing-vpc ausgehen.

Über Cloud Shell

gcloud compute routers add-interface routing-$region-cr \
    --interface-name=routing-interface0 \
    --ip-address=169.254.0.1 \
    --mask-length=30 \
    --vpn-tunnel=routing-to-onprem-tunnel0 \
    --region=$region

gcloud compute routers add-bgp-peer routing-$region-cr \
    --peer-name=routingtoonprem-bgp0 \
    --interface=routing-interface0 \
    --peer-ip-address=169.254.0.2 \
    --peer-asn=64513 \
    --region=$region

gcloud compute routers add-interface routing-$region-cr \
  --interface-name=routing-interface1 \
  --ip-address=169.254.1.1 \
  --mask-length=30 \
  --vpn-tunnel=routing-to-onprem-tunnel1 \
  --region=$region

gcloud compute routers add-bgp-peer routing-$region-cr \
    --peer-name=routingtoonprem-bgp1 \
    --interface=routing-interface1 \
    --peer-ip-address=169.254.1.2 \
    --peer-asn=64513 \
    --region=$region

Richten Sie BGP-Sitzungen für die beiden Tunnel ein, die von der onprem-vpc ausgehen.

Über Cloud Shell

gcloud compute routers add-interface onprem-$region-cr \
    --interface-name=onprem-interface0 \
    --ip-address=169.254.0.2 \
    --mask-length=30 \
    --vpn-tunnel=onprem-to-routing-tunnel0 \
    --region=$region

gcloud compute routers add-bgp-peer onprem-$region-cr \
    --peer-name=onpremtorouting-bgp0 \
    --interface=onprem-interface0 \
    --peer-ip-address=169.254.0.1 \
    --peer-asn=64512 \
    --region=$region

gcloud compute routers add-interface onprem-$region-cr \
  --interface-name=onprem-interface1 \
  --ip-address=169.254.1.2 \
  --mask-length=30 \
  --vpn-tunnel=onprem-to-routing-tunnel1 \
  --region=$region

gcloud compute routers add-bgp-peer onprem-$region-cr \
    --peer-name=onpremtorouting-bgp1 \
    --interface=onprem-interface1 \
    --peer-ip-address=169.254.1.1 \
    --peer-asn=64512 \
    --region=$region

Rufen Sie in der Konsole die Seite „Network Connectivity“ > „VPN“ auf und prüfen Sie, ob Ihre HA VPN-Tunnel und BGP-Sitzungen richtig konfiguriert sind.

7. NCC-Hub und Spokes konfigurierenDuration:10:00

NCC-Hub erstellen

Über Cloud Shell

gcloud network-connectivity hubs create ncc-hub \
    --project="$project" \
    --preset-topology="mesh"

NCC-Spokes erstellen

Für NCC gcloud müssen alle Spokes mit vollständigen Pfadnamen oder URIs konfiguriert werden.

Über Cloud Shell

gcloud compute networks describe routing-vpc

Notieren Sie sich den vollständigen Pfad (URI) der Routing-VPC für den folgenden Befehl.

Beispielausgabe

autoCreateSubnetworks: false
creationTimestamp: '2025-08-20T11:13:42.233-07:00'
id: 'xxx'
kind: compute#network
name: routing-vpc
networkFirewallPolicyEnforcementOrder: AFTER_CLASSIC_FIREWALL
routingConfig:
  bgpBestPathSelectionMode: LEGACY
  routingMode: REGIONAL
selfLink: https://www.googleapis.com/compute/v1/projects/$project/global/networks/routing-vpc
selfLinkWithId: https://www.googleapis.com/compute/v1/projects/$project/global/networks/355666541188722361
x_gcloud_bgp_routing_mode: REGIONAL
x_gcloud_subnet_mode: CUSTOM

Routing-VPC-Spoke konfigurieren

Über Cloud Shell

gcloud network-connectivity spokes linked-vpc-network create routing-vpc \
    --hub=ncc-hub \
    --vpc-network=projects/$project/global/networks/routing-vpc \
    --global

Über Cloud Shell

gcloud compute vpn-tunnels describe routing-to-onprem-tunnel0 --region=$region
gcloud compute vpn-tunnels describe routing-to-onprem-tunnel1 --region=$region

Notieren Sie sich die vollständigen Pfade (URIs) für die VPN-Tunnel, die von der Routing-VPC stammen.

Beispielausgabe

creationTimestamp: '2025-08-20T11:33:37.494-07:00'
description: ''
detailedStatus: Tunnel is up and running.
id: 'xxx'
ikeVersion: 2
kind: compute#vpnTunnel
labelFingerprint: xxx
localTrafficSelector:
- 0.0.0.0/0
name: routing-to-onprem-tunnel0
peerGcpGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/onprem-gateway
peerIp: 34.153.54.166
region: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1
remoteTrafficSelector:
- 0.0.0.0/0
router: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/routers/routing-us-central1-cr
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnTunnels/routing-to-onprem-tunnel0
sharedSecret: '*************'
sharedSecretHash: xxx
status: ESTABLISHED
vpnGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/routing-gateway

vpnGatewayInterface: 0
creationTimestamp: '2025-08-20T11:33:41.829-07:00'
description: ''
detailedStatus: Tunnel is up and running.
id: 'xxx'
ikeVersion: 2
kind: compute#vpnTunnel
labelFingerprint: xxx
localTrafficSelector:
- 0.0.0.0/0
name: routing-to-onprem-tunnel1
peerGcpGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/onprem-gateway
peerIp: 34.153.246.117
region: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1
remoteTrafficSelector:
- 0.0.0.0/0
router: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/routers/routing-us-central1-cr
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnTunnels/routing-to-onprem-tunnel1
sharedSecret: '*************'
sharedSecretHash: xxx
status: ESTABLISHED
vpnGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/routing-gateway
vpnGatewayInterface: 1

Über Cloud Shell

gcloud network-connectivity spokes linked-vpn-tunnels create $region-vpn-spoke \
    --hub=ncc-hub \
  --vpn-tunnels=projects/$project/regions/$region/vpnTunnels/routing-to-onprem-tunnel0,projects/$project/regions/$region/vpnTunnels/routing-to-onprem-tunnel1 \
    --region=$region 

Prüfen Sie, ob alle Spokes richtig konfiguriert sind, bevor Sie fortfahren.

Über Cloud Shell

gcloud network-connectivity hubs list-spokes ncc-hub

Beispielausgabe

NAME: routing-vpc
GROUP: default
PROJECT: $project
LOCATION: global
TYPE: VPC_NETWORK
STATE: ACTIVE
STATE REASON: 
ETAG: 2

NAME: us-central1-vpn-spoke
GROUP: default
PROJECT: $project
LOCATION: us-central1
TYPE: VPN_TUNNEL
STATE: ACTIVE
STATE REASON: 
ETAG: 

8. Private Service Connect für Google APIs einrichtenDauer: 5:00

PSC-Endpunkte für Google APIs werden aus globalen IP-Adressen erstellt, die sich nicht in einem regionalen VPC-Subnetz befinden. Die globale IP-Adresse muss speziell für PRIVATE_SERVICE_CONNECT reserviert werden.

Über Cloud Shell

gcloud compute addresses create psc-ip \
  --global \
  --purpose=PRIVATE_SERVICE_CONNECT \
  --addresses=10.100.100.0 \
  --network=routing-vpc

Über Cloud Shell

gcloud compute forwarding-rules create psc4googep \
  --global \
  --network=routing-vpc \
  --address=psc-ip \
  --target-google-apis-bundle=all-apis \
  --service-directory-registration=projects/$project/locations/$region

Über Cloud Shell

gcloud compute routers update routing-$region-cr \
   --project=$project \
   --region=$region \
   --advertisement-mode custom \
   --set-advertisement-groups=ALL_SUBNETS \
   --set-advertisement-ranges=10.100.100.0/32

Über Cloud Shell

gcloud dns managed-zones create peeringzone \
    --description="dns peer onprem to routing" \
    --dns-name=p.googleapis.com \
    --networks=onprem-vpc \
    --target-network=routing-vpc \
    --target-project=$project \
    --visibility=private

9. Vertex Workbench-Instanz einrichten – Dauer: 5:00

Erstellen Sie ein Dienstkonto, das als Identität für die Workbench-Instanz verwendet werden soll.

Über Cloud Shell

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

Notieren Sie sich den vollständigen Namen Ihres Dienstkontos und gewähren Sie ihm die Berechtigung „aiplatform.admin“, um Aufrufe an Vertex AI/Gemini auszuführen.

Über Cloud Shell

gcloud iam service-accounts list

Beispielausgabe

DISPLAY NAME: Compute Engine default service account
EMAIL: xxx-compute@developer.gserviceaccount.com
DISABLED: False

DISPLAY NAME: workbench-sa
EMAIL: workbench-sa@$project.iam.gserviceaccount.com
DISABLED: False

Ersetzen Sie <your-project-id> durch Ihre tatsächliche Projekt-ID. Die Variable $project kann hier aufgrund der erforderlichen Anführungszeichen nicht verwendet werden.

Über Cloud Shell

gcloud projects add-iam-policy-binding $project --member='serviceAccount:workbench-sa@<your-project-id>.iam.gserviceaccount.com' --role='roles/aiplatform.admin' --condition=None

Über Cloud Shell

gcloud workbench instances create workbench-$region --vm-image-project=cloud-notebooks-managed --vm-image-family=workbench-instances --location=$region-a --network=projects/$project/global/networks/onprem-vpc --subnet=projects/$project/regions/$region/subnetworks/onprem-$region-subnet --subnet-region=$region --disable-public-ip --service-account-email=workbench-sa@$project.iam.gserviceaccount.com

Die Bereitstellung der Workbench-Instanz kann länger dauern als die Ausführung des gcloud-Befehls.

10. Test Gemini CodeDuration: 7:00

Klicken Sie in der Benutzeroberfläche auf „JupyterLab öffnen“.

1b7ff959f1072aaa.png

Öffnen Sie in JupyterLab ein neues Python 3-Notebook.

18c26d06183faca1.png

Führen Sie den folgenden Code im Notebook aus. Achten Sie darauf, dass Sie den Code so aktualisieren, dass er Ihr spezifisches Projekt und Ihre Regionsinformationen enthält.

Über ein JupyterLab-Notebook

pip install --upgrade google-genai

Starten Sie den Notebook-Kernel neu.

fe7911ce8b54ff8a.png

Notieren Sie sich den API-Endpunkt. Hier verwenden wir den API-Endpunkt <YOUR_REGION>-aiplatform.googleapis.com. Dies ist der Standard-API-Endpunkt für Vertex AI.

Über ein JupyterLab-Notebook

PROJECT_ID="YOUR_PROJECT_ID" # Google Cloud Project ID
LOCATION_ID="YOUR_REGION" # Enter Vertex AI Gemini region such a s us-central1
API_ENDPOINT="https://<YOUR_REGION>-aiplatform.googleapis.com" # API Endpoint
MODEL_ID="gemini-2.0-flash" # Gemini Model ID

from google import genai
from google.genai.types import (
    GenerateContentConfig,
    HarmBlockThreshold,
    HarmCategory,
    Part,
    SafetySetting,
)

Über ein JupyterLab-Notebook

from google import genai

client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT})

prompt = "what weighs more, 1kg of feathers or 1kg of stones"

safety_settings = [
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
]

response = client.models.generate_content(
    model=MODEL_ID,
    contents=prompt,
    config=GenerateContentConfig(
        safety_settings=safety_settings,
    ),
)

# Response will be `None` if it is blocked.
print(response.text)

Beispielantwort:

This is a classic trick question! They both weigh the same: 1 kilogram. The difference is in the volume they occupy and the density of the materials.

Notieren Sie sich den API-Namen, den Sie beim Ausführen des Codes verwendet haben. YOUR_REGION-aiplatform.googleapis.com ist der Standard-API-Name für Vertex AI. Wir müssen den API-Namen ändern und den Code noch einmal ausführen. Wir können dafür sorgen, dass der Code den PSC-Endpunkt verwendet, indem wir einen TCPdump in einem Terminal auf der Workbench-Instanz ausführen.

TCPdump in einem Terminal ausführen

Öffnen Sie ein Terminal in der Workbench, indem Sie auf „File“ > „New“ > „Terminal“ (Datei > Neu > Terminal) klicken.

2cc405367de1f4c2.png

Wenn Sie Probleme mit der Textausgabe im Terminal haben, müssen Sie das Terminal-Theme aktualisieren. Sie können das Design unter „Einstellungen“ > „Terminaldesign“ > „Hell“ ODER „Dunkel“ ändern.

Vom Terminal

sudo tcpdump host 10.100.100.0

Gemini Code aktualisieren

Wechseln Sie zurück zum Notebook, aktualisieren Sie den API-Endpunkt und führen Sie den Code noch einmal aus. Der API-Endpunkt wurde zu <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com geändert. Dies entspricht dem PSC-spezifischen API-Format <service>-<endpointname>.p.googleapis.com.

Über ein JupyterLab-Notebook

API_ENDPOINT="https://<YOUR_REGION>-aiplatform-psc4googep.p.googleapis.com" # API Endpoint

Über ein JupyterLab-Notebook

from google import genai
from google.genai.types import (
    GenerateContentConfig,
    HarmBlockThreshold,
    HarmCategory,
    Part,
    SafetySetting,
)

Über ein JupyterLab-Notebook

from google import genai

client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT})

prompt = "what weighs more, 1kg of feathers or 1kg of stones"

safety_settings = [
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
]

response = client.models.generate_content(
    model=MODEL_ID,
    contents=prompt,
    config=GenerateContentConfig(
        safety_settings=safety_settings,
    ),
)

# Response will be `None` if it is blocked.
print(response.text)

Beispielantwort:

They weigh the same. 1 kg is 1 kg, regardless of what it's made of.

TCPdump prüfen

Wechseln Sie zurück zum Terminal und suchen Sie nach Aufrufen des PSC-Endpunkts (10.100.100.0). Beenden Sie den TCPdump (Strg+C).

Beispielausgabe

listening on ens4, link-type EN10MB (Ethernet), snapshot length 262144 bytes
19:12:01.473886 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [S], seq 3367930834, win 65320, options [mss 1420,sackOK,TS val 2933602967 ecr 0,nop,wscale 7], length 0
19:12:01.476561 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [S.], seq 1863301110, ack 3367930835, win 65535, options [mss 1366,sackOK,TS val 3004118895 ecr 2933602967,nop,wscale 8], length 0
19:12:01.476602 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 1, win 511, options [nop,nop,TS val 2933602969 ecr 3004118895], length 0
19:12:01.477283 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [P.], seq 1:1573, ack 1, win 511, options [nop,nop,TS val 2933602970 ecr 3004118895], length 1572
19:12:01.478836 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [.], ack 1573, win 1045, options [nop,nop,TS val 3004118898 ecr 2933602970], length 0
19:12:01.480181 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [P.], seq 1:6041, ack 1573, win 1045, options [nop,nop,TS val 3004118899 ecr 2933602970], length 6040
19:12:01.480183 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [P.], seq 6041:8378, ack 1573, win 1045, options [nop,nop,TS val 3004118899 ecr 2933602970], length 2337
19:12:01.480215 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 6041, win 485, options [nop,nop,TS val 2933602973 ecr 3004118899], length 0
19:12:01.480225 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 8378, win 473, options [nop,nop,TS val 2933602973 ecr 3004118899], length 0
19:12:01.482580 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [P.], seq 1573:1653, ack 8378, win 501, options [nop,nop,TS val 2933602975 ecr 3004118899], length 80

Erfolgreich!

11. Bereinigungsschritte

Schließen Sie das JupyterLab-Notebook und kehren Sie zu Cloud Shell zurück. Prüfen Sie, ob für Ihre Cloud Shell ein Zeitlimit überschritten wurde. Wenn das der Fall ist, setzen Sie die Variablen zurück.

Über Cloud Shell

gcloud config list project
gcloud config set project <project-id>
export project=$(gcloud config get-value project)
export region=us-central1
export zone=$region-a
echo $project
echo $region
echo $zone

Löschen Sie alle Ressourcen.

Über Cloud Shell

gcloud workbench instances delete workbench-$region --location=$zone -q

gcloud iam service-accounts delete workbench-sa@$project.iam.gserviceaccount.com -q

gcloud dns managed-zones delete peeringzone -q

gcloud compute forwarding-rules delete psc4googep --global -q

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

gcloud network-connectivity spokes delete $region-vpn-spoke --region=$region -q

gcloud network-connectivity spokes delete routing-vpc --global -q

gcloud network-connectivity hubs delete ncc-hub -q

gcloud compute vpn-tunnels delete onprem-to-routing-tunnel1 --region=$region --project=$project -q

gcloud compute vpn-tunnels delete onprem-to-routing-tunnel0 --region=$region --project=$project -q

gcloud compute vpn-tunnels delete routing-to-onprem-tunnel1 --region=$region --project=$project -q

gcloud compute vpn-tunnels delete routing-to-onprem-tunnel0 --region=$region --project=$project -q

gcloud compute vpn-gateways delete onprem-gateway --region=$region --project=$project -q

gcloud compute vpn-gateways delete routing-gateway --region=$region --project=$project -q

gcloud compute routers nats delete onprem-$region-nat --router=onprem-$region-cr-4nat --region=$region -q

gcloud compute routers delete onprem-$region-cr-4nat --region=$region -q

gcloud compute routers delete onprem-$region-cr --region=$region -q

gcloud compute routers delete routing-$region-cr --region=$region -q

gcloud compute networks subnets delete onprem-$region-subnet --region=$region -q

gcloud compute networks delete onprem-vpc -q

gcloud compute networks delete routing-vpc -q

12. Glückwunsch!

Herzlichen Glückwunsch zum Abschluss des Codelabs.

Behandelte Themen

  • Erstellen Sie einen NCC Hub.
  • VPC-Spokes in einem NCC-Hub konfigurieren
  • Erstellen Sie ein Cloud HA VPN.
  • Hybrid-Spokes in einem NCC-Hub konfigurieren
  • Erstellen Sie einen PSC-Endpunkt für Google APIs.
  • Benutzerdefinierte Route über HA VPN konfigurieren
  • DNS-Peering-Zone konfigurieren
  • Vertex Workbench-Instanz konfigurieren
  • Konfigurieren Sie Gemini-Python-Code für die Verwendung eines PSC für Google APIs API-Endpunkts.