Использование Private Service Connect для API Google для доступа к Gemini через гибридное соединение

1. Введение

Private Service Connect для API Google (PSC) — это сетевая функция Google Cloud, позволяющая пользователям настраивать частный доступ через глобальную конечную точку с частным IP-адресом в VPC. Для пользователей, запускающих код или клиентские приложения в гибридной среде, подключенной к Google Cloud через VPN или межсоединение, PSC используется для разрешения API Google через это частное гибридное соединение.

PSC для API Google может разрешать множество различных доменов, полный список которых можно найти здесь . Домен, используемый большинством API Google, — <API>.googleapis.com. Наряду с этим доменом PSC также предоставляет пользователям версию googleapis.com: <API>-<PSC-ENDPOINT-NAME>.**p.**googleapis.com. Используя этот домен, пользователи могут настраивать приложения для использования определённых конечных точек PSC. Наиболее распространённый вариант использования позволяет пользователям выбирать, какие приложения будут использовать конечную точку PSC для маршрутизации трафика API Google через гибридное соединение, при этом позволяя другим приложениям продолжать маршрутизировать трафик к общедоступной конечной точке API.

Gemini входит в набор продуктов Vertex AI от Google Cloud и включен в список API Google, которые можно разрешить с помощью PSC для API Google.

В этой лабораторной работе вы создадите моделируемую гибридную среду, разместите экземпляр Workbench локально и запустите код Gemini Python, который обращается к API Gemini в частном порядке через HA VPN, подключаясь к конечной точке PSC для API Google.

Чему вы научитесь

  • Создайте центр NCC.
  • Настройте VPC Spokes в NCC Hub.
  • Создайте Cloud HA VPN.
  • Настройте гибридные споки в концентраторе NCC.
  • Создайте PSC для конечной точки API Google.
  • Настройте собственный маршрут через HA-VPN.
  • Настройте пиринговую зону DNS.
  • Настройка экземпляра Vertex Workbench
  • Настройте код Gemini Python для использования PSC для конечной точки API API Google.

Что вам понадобится

  • Проект Google Cloud с правами «Владелец» или полными правами «Редактор».

2. Топология кодлаб-программы

74f1027c8c8085f6.png

В этой практической работе вы будете использовать Google Cloud для моделирования гибридной среды. В ней будут шаги, специфичные для Google Cloud, которые будут отличаться при настройке в локальной среде. Эти шаги будут описаны отдельно.

Вы создадите концентратор NCC с маршрутизируемым VPC в качестве VPC-спок. В этом VPC будет настроена HA-VPN для локального VPC, имитирующая локальную среду. HA-VPN будет настроен как гибридный спикер в концентраторе NCC. В локальном VPC вы создадите подсеть, в которой будет размещен экземпляр Workbench. Вы также создадите Cloud NAT для загрузки пакетов на экземпляр Workbench.

Наконец, вы создадите зону пиринга DNS для локальной VPC, чтобы иметь возможность использовать частную зону каталога услуг для p.googleapis.com, которую PSC для API Google создает автоматически.

3. Настройка и требования

Настройка среды для самостоятельного обучения

  1. Войдите в Google Cloud Console и создайте новый проект или используйте существующий. Если у вас ещё нет учётной записи Gmail или Google Workspace, вам необходимо её создать .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Название проекта — отображаемое имя участников проекта. Это строка символов, не используемая API Google. Вы можете изменить её в любой момент.
  • Идентификатор проекта уникален для всех проектов Google Cloud и неизменяем (нельзя изменить после установки). Cloud Console автоматически генерирует уникальную строку; обычно вам не важно, какой именно. В большинстве практических работ вам потребуется указать идентификатор проекта (обычно обозначаемый как PROJECT_ID ). Если вам не нравится сгенерированный идентификатор, вы можете сгенерировать другой случайный идентификатор. Вы также можете попробовать использовать свой собственный идентификатор и посмотреть, доступен ли он. После этого шага его нельзя будет изменить, и он останется на протяжении всего проекта.
  • К вашему сведению, существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трёх значениях можно узнать в документации .
  1. Далее вам нужно включить биллинг в Cloud Console для использования облачных ресурсов/API. Выполнение этой лабораторной работы не потребует больших затрат, если вообще потребует. Чтобы отключить ресурсы и избежать списания средств за пределами этого руководства, вы можете удалить созданные вами ресурсы или проект. Новые пользователи Google Cloud могут воспользоваться бесплатной пробной версией стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лабораторной работе вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.

В консоли Google Cloud Console нажмите значок Cloud Shell на верхней правой панели инструментов:

55efc1aaa7a4d3ad.png

Подготовка и подключение к среде займёт всего несколько минут. После завершения вы увидите примерно следующее:

7ffe5cbb04455448.png

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объёмом 5 ГБ и работает в облаке Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лабораторной работе можно выполнять в браузере. Вам не нужно ничего устанавливать.

4. Прежде чем начать

Включить API

Внутри Cloud Shell убедитесь, что ваш проект правильно настроен, и настройте переменные среды.

Из 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

Включите все необходимые API Google в проекте.

Из 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. Создайте VPC и подсети

Создавать сети

Из Cloud Shell

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

Из 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

Создание облачных маршрутизаторов и облачного NAT

Создайте облачный маршрутизатор, который будет использоваться совместно с HA VPN в routing-vpc.

Из Cloud Shell

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

Создайте облачный маршрутизатор, который будет использоваться совместно с HA VPN в onprem-vpc.

Из Cloud Shell

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

Создайте облачный маршрутизатор, который будет использоваться совместно с Cloud NAT в onprem-vpc.

Из Cloud Shell

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

Облачный NAT в onprem-vpc будет использоваться для загрузки пакетов в экземпляр Vertex AI Workbench, который будет настроен на более позднем этапе.

Из 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

Создайте VPN-шлюзы.

Из Cloud Shell

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

Из Cloud Shell

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

Создайте VPN-туннели, исходящие из routing-vpc.

Из 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

Создайте VPN-туннели, исходящие из onprem-vpc.

Из 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

Настройте сеансы BGP для двух туннелей, исходящих из routing-vpc.

Из 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

Настройте сеансы BGP для двух туннелей, исходящих из onprem-vpc.

Из 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

Перейдите на страницу Сетевое подключение > VPN в консоли и убедитесь, что туннели HA-VPN и сеансы BGP настроены правильно.

7. Настройте концентратор и спицы NCC

Создать NCC Hub

Из Cloud Shell

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

Создать спицы NCC

NCC gcloud требует, чтобы все спелеосерверы были настроены с использованием полных путей или URI.

Из Cloud Shell

gcloud compute networks describe routing-vpc

Обратите внимание на полный путь (URI) routing-vpc для следующей команды.

Пример вывода

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

Настройка маршрутизации VPC Spoke

Из Cloud Shell

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

Из Cloud Shell

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

Обратите внимание на полные пути (URI) для VPN-туннелей, исходящих из routing-vpc.

Пример вывода

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

Из 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 

Прежде чем двигаться дальше, убедитесь, что все спицы настроены правильно.

Из Cloud Shell

gcloud network-connectivity hubs list-spokes ncc-hub

Пример вывода

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 для API Google

Конечные точки PSC для API Google создаются на основе глобальных IP-адресов, не находящихся в региональной подсети VPC. Глобальный IP-адрес должен быть зарезервирован специально для PRIVATE_SERVICE_CONNECT.

Из Cloud Shell

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

Из 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

Из 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

Из 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

Создайте учетную запись службы, которая будет использоваться для удостоверения экземпляра Workbench.

Из Cloud Shell

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

Запишите полное имя вашей учетной записи службы и предоставьте ей разрешение aiplatform.admin на выполнение вызовов Vertex AI/Gemini.

Из Cloud Shell

gcloud iam service-accounts list

Пример вывода

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

Обязательно замените <your-project-id> на фактический идентификатор вашего проекта. Переменная $project здесь не может быть использована из-за обязательных кавычек.

Из 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

Из 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

Подготовка экземпляра Workbench может занять больше времени, чем выполнение команды gcloud.

10. Тестовый код Gemini

В пользовательском интерфейсе нажмите «Открыть JupyterLab».

1b7ff959f1072aaa.png

В JupyterLab откройте новый блокнот Python 3.

18c26d06183faca1.png

Запустите следующий код в блокноте. Обязательно обновите код, включив в него информацию о вашем проекте и регионе.

Из блокнота JupyterLab

pip install --upgrade google-genai

Перезапустите ядро ​​ноутбука.

fe7911ce8b54ff8a.png

Обратите внимание на конечную точку API. Здесь мы используем конечную точку API <YOUR_REGION>-aiplatform.googleapis.com. Это стандартная конечная точка API для Vertex AI.

Из блокнота 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,
)

Из блокнота 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)

Образец ответа

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.

Запишите имя API, которое вы использовали при запуске кода. YOUR_REGION-aiplatform.googleapis.com — имя API по умолчанию для Vertex AI. Необходимо изменить имя API и снова запустить код. Мы можем убедиться, что код использует конечную точку PSC, запустив TCPdump в терминале на экземпляре Workbench.

Запустите TCPdump в терминале

Откройте терминал на Workbench, нажав Файл > Создать > Терминал.

2cc405367de1f4c2.png

Если у вас возникли проблемы с отображением текста в терминале, вам необходимо обновить тему оформления терминала. Это можно сделать в разделе «Настройки» > «Тема терминала» > «Светлая» или «Тёмная».

Из терминала

sudo tcpdump host 10.100.100.0

Обновить код Gemini

Вернитесь в блокнот, обновите конечную точку API и снова запустите код. Обратите внимание, что мы изменили конечную точку API на <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com. Это соответствует специфичному для PSC формату API: <service>-<endpointname>.p.googleapis.com.

Из блокнота JupyterLab

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

Из блокнота JupyterLab

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

Из блокнота 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)

Образец ответа

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

Проверьте TCPdump

Вернитесь к терминалу и проверьте наличие вызовов к конечной точке PSC (10.100.100.0). Завершите TCPdump (Ctrl+C).

Пример вывода

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

УСПЕХ!

11. Этапы очистки

Закройте блокнот JupyterLab и вернитесь в Cloud Shell. Убедитесь, что время ожидания Cloud Shell не истекло. Если истекло, сбросьте переменные.

Из 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

Удалить все ресурсы.

Из 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. Поздравляем!

Поздравляем с завершением лабораторной работы.

Что мы рассмотрели

  • Создайте центр NCC.
  • Настройте VPC Spokes в NCC Hub.
  • Создайте Cloud HA VPN.
  • Настройте гибридные споки в концентраторе NCC.
  • Создайте PSC для конечной точки API Google.
  • Настройте собственный маршрут через HA-VPN.
  • Настройте пиринговую зону DNS.
  • Настройка экземпляра Vertex Workbench
  • Настройте код Gemini Python для использования PSC для конечной точки API API Google.