Korzystanie z usługi Private Service Connect dla interfejsów Google API w celu uzyskania dostępu do Gemini przez połączenie hybrydowe

1. Wprowadzenie

Private Service Connect for Google APIs (PSC) to funkcja sieciowa Google Cloud, która umożliwia użytkownikom konfigurowanie prywatnego dostępu za pomocą globalnego punktu końcowego z prywatnym adresem IP w sieci VPC. W przypadku użytkowników, którzy uruchamiają kod lub aplikacje po stronie klienta w środowisku hybrydowym połączonym z Google Cloud za pomocą sieci VPN lub połączenia międzysieciowego, usługa PSC służy do rozpoznawania interfejsów API Google w ramach tego prywatnego połączenia hybrydowego.

PSC dla interfejsów API Google może rozwiązywać wiele różnych domen, których pełną listę znajdziesz tutaj. Większość interfejsów API Google korzysta z domeny <API>.googleapis.com. Oprócz tej domeny usługa PSC udostępnia też wersję domeny googleapis.com, która ma postać <API>-<PSC-ENDPOINT-NAME>.**p.**googleapis.com. Korzystając z tej domeny, użytkownicy mogą konfigurować aplikacje tak, aby używały określonych punktów końcowych PSC. Najczęstszy przypadek użycia polega na tym, że użytkownicy mogą wybrać, które aplikacje mają używać punktu końcowego PSC do kierowania ruchu interfejsu API Google przez połączenie hybrydowe, a które mają nadal kierować ruch do publicznego punktu końcowego interfejsu API.

Gemini należy do pakietu usług Vertex AI w Google Cloud i jest uwzględniony na liście interfejsów API Google, które można rozwiązać za pomocą PSC dla interfejsów API Google.

W tym module stworzysz symulowane środowisko hybrydowe, w którym instancja Workbench będzie hostowana lokalnie, a kod w Pythonie korzystający z interfejsu Gemini API będzie uruchamiany prywatnie przez sieć VPN o wysokiej dostępności, łączącą się z punktem końcowym usługi Private Service Connect dla interfejsów API Google.

Czego się nauczysz

  • Utwórz centrum NCC.
  • Skonfiguruj promienie VPC w centrum NCC.
  • Utwórz sieć Cloud VPN o wysokiej dostępności.
  • Skonfiguruj promienie hybrydowe w centrum NCC.
  • Utwórz punkt końcowy PSC dla interfejsów API Google.
  • Skonfiguruj trasę niestandardową przez sieć VPN o wysokiej dostępności.
  • skonfigurować strefę równorzędną DNS;
  • Konfigurowanie instancji Vertex Workbench
  • Skonfiguruj kod Pythona Gemini tak, aby używał punktu końcowego interfejsu API PSC dla interfejsów API Google.

Czego potrzebujesz

  • Projekt Google Cloud z uprawnieniami „Właściciel” lub pełnymi uprawnieniami „Edytujący”.

2. Topologia ćwiczeń z programowania

74f1027c8c8085f6.png

W tym ćwiczeniu w Codelabs użyjesz Google Cloud do symulowania środowiska hybrydowego. W tym module znajdziesz instrukcje, które są specyficzne dla Google Cloud i różnią się od tych, które należy wykonać w prawdziwym środowisku lokalnym. Te kroki zostaną wyróżnione.

Utworzysz centrum NCC, które ma sieć VPC routingu jako promień VPC. W tej sieci VPC zostanie skonfigurowana sieć HA-VPN do lokalnej sieci VPC, która imituje środowisko lokalne. Sieć HA-VPN zostanie skonfigurowana jako promień hybrydowy w centrum NCC. W lokalnej sieci VPC utworzysz podsieć, w której będzie hostowana instancja Workbench. Utworzysz też Cloud NAT, który będzie używany do pobierania pakietów na instancji Workbench.

Na koniec utworzysz strefę równorzędną DNS dla lokalnej sieci VPC, aby można było używać strefy prywatnej Service Directory dla p.googleapis.com, która jest automatycznie tworzona przez PSC dla interfejsów Google API.

3. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail lub Google Workspace, musisz je utworzyć.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Nazwa projektu to wyświetlana nazwa dla uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Zawsze możesz ją zaktualizować.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się tym przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i pozostaje on taki przez cały czas trwania projektu.
  • Warto wiedzieć, że istnieje trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego laboratorium nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Uruchamianie Cloud Shell

Google Cloud można obsługiwać zdalnie z laptopa, ale w tym module praktycznym będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.

W konsoli Google Cloud kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:

55efc1aaa7a4d3ad.png

Udostępnienie środowiska i połączenie się z nim może zająć tylko kilka chwil. Po zakończeniu powinno wyświetlić się coś takiego:

7ffe5cbb04455448.png

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelniania. Wszystkie zadania w tym laboratorium możesz wykonać w przeglądarce. Nie musisz niczego instalować.

4. Zanim zacznieszCzas trwania: 2:00

Włącz interfejsy API

W Cloud Shell sprawdź, czy projekt jest prawidłowo skonfigurowany, i ustaw zmienne środowiskowe.

Z 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

Włącz w projekcie wszystkie niezbędne interfejsy API Google.

Z 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. Tworzenie sieci VPC i podsieciCzas trwania: 5:00

Tworzenie sieci

Z Cloud Shell

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

Z 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

Tworzenie routerów Cloud Router i Cloud NAT

Utwórz router Cloud Router, który będzie używany w połączeniu z siecią VPN o wysokiej dostępności w sieci VPC routingu.

Z Cloud Shell

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

Utwórz router Cloud Router, który będzie używany w połączeniu z siecią VPN o wysokiej dostępności w sieci onprem-vpc.

Z Cloud Shell

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

Utwórz router Cloud Router, który będzie używany w połączeniu z Cloud NAT w sieci onprem-vpc.

Z Cloud Shell

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

Usługa Cloud NAT w sieci onprem-vpc będzie używana do pobierania pakietów na instancję Vertex AI Workbench, która zostanie skonfigurowana w późniejszym kroku.

Z 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. Tworzenie sieci Cloud HA-VPNDuration: 7:00

Utwórz bramy VPN.

Z Cloud Shell

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

Z Cloud Shell

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

Utwórz tunele VPN wychodzące z sieci routing-vpc.

Z 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

Utwórz tunele VPN wychodzące z sieci onprem-vpc.

Z 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

Skonfiguruj sesje BGP dla 2 tuneli pochodzących z sieci routing-vpc.

Z 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

Skonfiguruj sesje BGP dla 2 tuneli pochodzących z sieci onprem-vpc.

Z 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

Otwórz w konsoli stronę Połączenia sieciowe > VPN i upewnij się, że tunele sieci VPN o wysokiej dostępności i sesje BGP są prawidłowo skonfigurowane.

7. Konfigurowanie centrum NCC i promieniCzas trwania:10:00

Tworzenie centrum NCC

Z Cloud Shell

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

Tworzenie promieni NCC

Narzędzie gcloud NCC wymaga, aby wszystkie promienie były skonfigurowane z pełnymi nazwami ścieżek lub identyfikatorami URI.

Z Cloud Shell

gcloud compute networks describe routing-vpc

Zapisz pełną ścieżkę (URI) sieci routing-vpc, aby użyć jej w następnym poleceniu.

Przykładowe dane wyjściowe

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

Konfigurowanie sieci VPC Spoke routingu

Z Cloud Shell

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

Z Cloud Shell

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

Zanotuj pełne ścieżki (URI) tuneli VPN pochodzących z sieci routing-vpc.

Przykładowe dane wyjściowe

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

Z 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 

Zanim przejdziesz dalej, sprawdź, czy wszystkie węzły są prawidłowo skonfigurowane.

Z Cloud Shell

gcloud network-connectivity hubs list-spokes ncc-hub

Przykładowe dane wyjściowe

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. Konfigurowanie usługi Private Service Connect dla interfejsów Google APICzas trwania: 5:00

Punkty końcowe PSC dla interfejsów API Google są tworzone na podstawie globalnych adresów IP, które nie znajdują się w regionalnej podsieci VPC. Globalny adres IP musi być zarezerwowany specjalnie na potrzeby usługi PRIVATE_SERVICE_CONNECT.

Z Cloud Shell

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

Z 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

Z 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

Z 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. Konfigurowanie instancji Vertex WorkbenchCzas trwania: 5:00

Utwórz konto usługi, które będzie używane jako tożsamość instancji Workbench.

Z Cloud Shell

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

Zanotuj pełną nazwę konta usługi i przyznaj mu uprawnienie aiplatform.admin, aby wykonywać wywołania Vertex AI/Gemini.

Z Cloud Shell

gcloud iam service-accounts list

Przykładowe dane wyjściowe

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

Pamiętaj, aby zastąpić <your-project-id> rzeczywistym identyfikatorem projektu. Nie możemy użyć tutaj zmiennej $project ze względu na wymagane cudzysłowy.

Z 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

Z 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

Udostępnianie instancji Workbench może trwać dłużej niż wykonywanie polecenia gcloud.

10. Testowanie Gemini CodeDuration: 7:00

W interfejsie kliknij „Otwórz JupyterLab”.

1b7ff959f1072aaa.png

Po otwarciu JupyterLab otwórz nowy notatnik w Pythonie 3.

18c26d06183faca1.png

Uruchom w notatniku ten kod. Pamiętaj, aby zaktualizować kod, podając w nim informacje o konkretnym projekcie i regionie.

Z notatnika JupyterLab

pip install --upgrade google-genai

Uruchom ponownie jądro notatnika.

fe7911ce8b54ff8a.png

Zapisz punkt końcowy API. Używamy tutaj punktu końcowego interfejsu API <YOUR_REGION>-aiplatform.googleapis.com. Jest to standardowy punkt końcowy interfejsu API Vertex AI.

Z notatnika JupyterLab

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,
)

Z notatnika JupyterLab

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)

Przykładowa odpowiedź

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.

Zanotuj nazwę interfejsu API, której użyto podczas uruchamiania kodu. YOUR_REGION-aiplatform.googleapis.com to domyślna nazwa interfejsu API Vertex AI. Musimy zmienić nazwę interfejsu API i ponownie uruchomić kod. Aby sprawdzić, czy kod korzysta z punktu końcowego PSC, możesz uruchomić polecenie TCPdump w terminalu na instancji Workbench.

Uruchamianie narzędzia TCPdump w terminalu

Otwórz terminal w Workbench, klikając kolejno File > New > Terminal (Plik > Nowy > Terminal).

2cc405367de1f4c2.png

Jeśli masz problemy z wyświetlaniem tekstu w terminalu, musisz zaktualizować motyw terminala. Aby to zrobić, otwórz Ustawienia > Motyw terminala > Jasny LUB Ciemny.

Z terminala

sudo tcpdump host 10.100.100.0

Aktualizowanie kodu Gemini

Wróć do notatnika, zaktualizuj punkt końcowy interfejsu API i ponownie uruchom kod. Zmieniliśmy punkt końcowy interfejsu API na <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com. Jest on zgodny z formatem interfejsu API PSC <service>-<endpointname>.p.googleapis.com.

Z notatnika JupyterLab

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

Z notatnika JupyterLab

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

Z notatnika JupyterLab

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)

Przykładowa odpowiedź

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

Sprawdź TCPdump

Wróć do terminala i poszukaj wywołań punktu końcowego PSC (10.100.100.0). Zakończ TCPdump (Ctrl+C).

Przykładowe dane wyjściowe

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

UDAŁO SIĘ!

11. Procedura czyszczenia

Zamknij notatnik JupyterLab i wróć do Cloud Shell. Sprawdź, czy sesja Cloud Shell nie wygasła. Jeśli tak, zresetuj zmienne.

Z 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

Usuń wszystkie zasoby.

Z 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. Gratulacje!

Gratulujemy ukończenia ćwiczenia.

Omówione zagadnienia

  • Utwórz centrum NCC.
  • Skonfiguruj promienie VPC w centrum NCC.
  • Utwórz sieć Cloud VPN o wysokiej dostępności.
  • Skonfiguruj promienie hybrydowe w centrum NCC.
  • Utwórz punkt końcowy PSC dla interfejsów API Google.
  • Skonfiguruj trasę niestandardową przez sieć VPN o wysokiej dostępności.
  • skonfigurować strefę równorzędną DNS;
  • Konfigurowanie instancji Vertex Workbench
  • Skonfiguruj kod Pythona Gemini tak, aby używał punktu końcowego interfejsu API PSC dla interfejsów API Google.