1. Introducción
Private Service Connect para las APIs de Google (PSC) es una función de redes de Google Cloud que permite a los usuarios configurar el acceso privado a través de un extremo global de IP privada dentro de una VPC. Para los usuarios que ejecutan código o aplicaciones del cliente en un entorno híbrido conectado a Google Cloud a través de una VPN o Interconnect, se usa PSC para resolver las APIs de Google a través de esa conexión híbrida privada.
PSC para las APIs de Google puede resolver muchos dominios diferentes, cuya lista completa se puede encontrar aquí. El dominio que usan la mayoría de las APIs de Google es <API>.googleapis.com. Junto con este dominio, PSC también proporciona a los usuarios una versión de googleapis.com que es <API>-<PSC-ENDPOINT-NAME>.**p.**googleapis.com. Con este dominio, los usuarios pueden configurar aplicaciones para que usen extremos de PSC específicos. El caso de uso más común permite que los usuarios elijan qué aplicaciones usan el extremo de PSC para enrutar el tráfico de la API de Google a través de la conexión híbrida, mientras que otras aplicaciones pueden seguir enrutando el tráfico al extremo de la API pública.
Gemini forma parte del paquete de productos de Vertex AI de Google Cloud y se incluye en la lista de APIs de Google que se pueden resolver con PSC para las APIs de Google.
En este codelab, compilarás un entorno híbrido simulado, alojarás una instancia de Workbench de forma local y ejecutarás código de Python de Gemini que accede a la API de Gemini de forma privada a través de una VPN con alta disponibilidad, conectándose a un extremo de PSC para las APIs de Google.
Qué aprenderás
- Crea un concentrador de NCC.
- Configura radios de VPC en un concentrador de NCC.
- Crea una VPN con alta disponibilidad de Cloud.
- Configura radios híbridos en un concentrador de NCC.
- Crea un extremo de PSC para las APIs de Google.
- Configura una ruta personalizada a través de la VPN con alta disponibilidad.
- Configura una zona de intercambio de tráfico de DNS.
- Configura una instancia de Vertex Workbench
- Configura el código de Python de Gemini para usar un extremo de la API de PSC para las APIs de Google.
Requisitos
- Un proyecto de Google Cloud con permisos de "Propietario" o "Editor" completos
2. Topología del codelab
En este codelab, usarás Google Cloud para simular un entorno híbrido. En este codelab, habrá pasos específicos de Google Cloud que serían diferentes si se configuraran desde un entorno local real. Se indicarán esos pasos.
Crearás un concentrador de NCC que tendrá una VPC de enrutamiento como radio de VPC. En esa VPC, se configurará una VPN con alta disponibilidad para la VPC local, que simula un entorno local. La VPN con alta disponibilidad se configurará como un radio híbrido en el concentrador de NCC. En la VPC local, crearás una subred en la que se alojará una instancia de Workbench. También crearás una instancia de Cloud NAT para descargar paquetes en la instancia de Workbench.
Por último, crearás una zona de peering de DNS para que la VPC local pueda usar la zona privada del Directorio de servicios para p.googleapis.com que PSC para las APIs de Google crea automáticamente.
3. Configuración y requisitos
Configuración del entorno de autoaprendizaje
- Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.
- El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla cuando quieras.
- El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID de tu proyecto (suele identificarse como
PROJECT_ID
). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usa el mismo durante todo el proyecto. - Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no costará mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.
Inicia Cloud Shell
Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.
En Google Cloud Console, haz clic en el ícono de Cloud Shell en la barra de herramientas en la parte superior derecha:
El aprovisionamiento y la conexión al entorno deberían tomar solo unos minutos. Cuando termine el proceso, debería ver algo como lo siguiente:
Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Todo tu trabajo en este codelab se puede hacer en un navegador. No es necesario que instales nada.
4. Antes de comenzarDuración: 2:00
Habilita las APIs
En Cloud Shell, asegúrate de que tu proyecto esté configurado correctamente y establece tus variables de entorno.
Desde 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
Habilita todas las APIs de Google necesarias en el proyecto.
Desde 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. Crea VPCs y subredesDuración: 5:00
Crear redes
Desde Cloud Shell
gcloud compute networks create routing-vpc \ --subnet-mode=custom
Desde 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
Crea Cloud Routers y Cloud NAT
Crea un Cloud Router que se usará junto con la VPN con alta disponibilidad en la VPC de enrutamiento.
Desde Cloud Shell
gcloud compute routers create routing-$region-cr \ --network=routing-vpc \ --region=$region \ --asn=64512
Crea un Cloud Router que se usará junto con la VPN con alta disponibilidad en onprem-vpc.
Desde Cloud Shell
gcloud compute routers create onprem-$region-cr \ --network=onprem-vpc \ --region=$region \ --asn=64513
Crea un Cloud Router que se usará junto con Cloud NAT en onprem-vpc.
Desde Cloud Shell
gcloud compute routers create onprem-$region-cr-4nat \ --network=onprem-vpc \ --region=$region
El Cloud NAT en onprem-vpc se usará para descargar paquetes en la instancia de Vertex AI Workbench que se configurará en un paso posterior.
Desde 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. Crea una VPN con alta disponibilidad de CloudDuración: 7:00
Crea las puertas de enlace de VPN.
Desde Cloud Shell
gcloud compute vpn-gateways create routing-gateway \ --network=routing-vpc \ --region=$region \ --stack-type=IPV4_ONLY
Desde Cloud Shell
gcloud compute vpn-gateways create onprem-gateway \ --network=onprem-vpc \ --region=$region \ --stack-type=IPV4_ONLY
Crea los túneles VPN que se originan en routing-vpc.
Desde 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
Crea los túneles VPN que se originan en onprem-vpc.
Desde 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
Configura sesiones de BGP para los dos túneles que se originan en la VPC de enrutamiento.
Desde 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
Configura sesiones de BGP para los dos túneles que se originan en onprem-vpc.
Desde 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
Navega a la página Red > VPN en la consola y asegúrate de que tus túneles de VPN con alta disponibilidad y sesiones de BGP estén configurados correctamente.
7. Configura el concentrador y los radios de NCCDuración:10:00
Crea el concentrador de NCC
Desde Cloud Shell
gcloud network-connectivity hubs create ncc-hub \ --project="$project" \ --preset-topology="mesh"
Crea radios de NCC
gcloud de NCC requiere que todos los radios se configuren con nombres de ruta de acceso completos o URIs.
Desde Cloud Shell
gcloud compute networks describe routing-vpc
Ten en cuenta la ruta de acceso completa (URI) de la VPC de enrutamiento para el siguiente comando.
Resultado de ejemplo:
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
Configura el radio de la VPC de enrutamiento
Desde Cloud Shell
gcloud network-connectivity spokes linked-vpc-network create routing-vpc \ --hub=ncc-hub \ --vpc-network=projects/$project/global/networks/routing-vpc \ --global
Desde Cloud Shell
gcloud compute vpn-tunnels describe routing-to-onprem-tunnel0 --region=$region gcloud compute vpn-tunnels describe routing-to-onprem-tunnel1 --region=$region
Ten en cuenta las rutas de acceso completas (URIs) de los túneles VPN que se originan en la VPC de enrutamiento.
Resultado de ejemplo:
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
Desde 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
Antes de continuar, asegúrate de que todos los radios estén configurados correctamente.
Desde Cloud Shell
gcloud network-connectivity hubs list-spokes ncc-hub
Resultado de ejemplo:
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. Configura Private Service Connect para las APIs de GoogleDuración: 5:00
Los extremos de PSC para las APIs de Google se crean a partir de direcciones IP globales que no se encuentran en una subred de VPC regional. La dirección IP global debe reservarse específicamente con el propósito de PRIVATE_SERVICE_CONNECT.
Desde Cloud Shell
gcloud compute addresses create psc-ip \ --global \ --purpose=PRIVATE_SERVICE_CONNECT \ --addresses=10.100.100.0 \ --network=routing-vpc
Desde 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
Desde 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
Desde 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. Configura la instancia de Vertex WorkbenchDuración: 5:00
Crea una cuenta de servicio que se usará para la identidad de la instancia de Workbench.
Desde Cloud Shell
gcloud iam service-accounts create workbench-sa \ --display-name="workbench-sa"
Toma nota del nombre completo de tu cuenta de servicio y otórgale el permiso aiplatform.admin para ejecutar llamadas a Vertex AI/Gemini.
Desde Cloud Shell
gcloud iam service-accounts list
Resultado de ejemplo:
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
Asegúrate de reemplazar <your-project-id> por el ID de tu proyecto real. No podemos usar la variable $project aquí debido a las comillas requeridas.
Desde 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
Desde 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
El aprovisionamiento de la instancia de Workbench puede tardar más que la ejecución del comando de gcloud.
10. Prueba de Gemini CodeDuration: 7:00
En la IU, haz clic en "Abrir JupyterLab".
Una vez que estés en JupyterLab, abre un notebook nuevo de Python 3.
Ejecuta el siguiente código en el notebook. Asegúrate de actualizar el código para incluir la información específica de tu proyecto y región.
Desde un notebook de JupyterLab
pip install --upgrade google-genai
Reinicia el kernel del notebook.
Ten en cuenta el extremo de la API. Aquí usamos el extremo de API <YOUR_REGION>-aiplatform.googleapis.com, que es el extremo de API estándar para Vertex AI.
Desde un notebook de 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, )
Desde un notebook de 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)
Respuesta de muestra:
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.
Toma nota del nombre de la API que usaste cuando ejecutaste el código. YOUR_REGION-aiplatform.googleapis.com es el nombre de API predeterminado para Vertex AI. Debemos cambiar el nombre de la API y volver a ejecutar el código. Para asegurarnos de que el código use el extremo de PSC, podemos ejecutar un TCPdump en una terminal de la instancia de Workbench.
Ejecuta un TCPdump en una terminal
Para abrir una terminal en Workbench, haz clic en File > New > Terminal.
Si tienes problemas para ver el texto de salida en la terminal, debes actualizar el tema de la terminal. Para ello, ve a Configuración > Tema de la terminal > Claro O bien Oscuro.
Desde la terminal
sudo tcpdump host 10.100.100.0
Actualizar Gemini Code
Vuelve al notebook, actualiza el extremo de la API y vuelve a ejecutar el código. Ten en cuenta que cambiamos el extremo de la API a <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com. Esto se alinea con el formato de API específico de PSC <service>-<endpointname>.p.googleapis.com.
Desde un notebook de JupyterLab
API_ENDPOINT="https://<YOUR_REGION>-aiplatform-psc4googep.p.googleapis.com" # API Endpoint
Desde un notebook de JupyterLab
from google import genai from google.genai.types import ( GenerateContentConfig, HarmBlockThreshold, HarmCategory, Part, SafetySetting, )
Desde un notebook de 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)
Respuesta de muestra:
They weigh the same. 1 kg is 1 kg, regardless of what it's made of.
Verifica TCPdump
Vuelve a la terminal y busca llamadas al extremo de PSC (10.100.100.0). Finaliza el TCPdump (control+c).
Resultado de muestra
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
Operación exitosa
11. Pasos para la limpieza
Cierra el notebook de JupyterLab y regresa a Cloud Shell. Asegúrate de que Cloud Shell no haya agotado el tiempo de espera. Si es así, restablece tus variables.
Desde 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
Borra todos los recursos.
Desde 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. ¡Felicitaciones!
Felicitaciones por completar el codelab.
Temas abordados
- Crea un concentrador de NCC.
- Configura radios de VPC en un concentrador de NCC.
- Crea una VPN con alta disponibilidad de Cloud.
- Configura radios híbridos en un concentrador de NCC.
- Crea un extremo de PSC para las APIs de Google.
- Configura una ruta personalizada a través de la VPN con alta disponibilidad.
- Configura una zona de intercambio de tráfico de DNS.
- Configura una instancia de Vertex Workbench
- Configura el código de Python de Gemini para usar un extremo de la API de PSC para las APIs de Google.