1. Introducción
El grupo de extremos de red (NEG) de Private Service Connect (PSC) admite el encadenamiento de un balanceador de cargas de HTTPS interno con un balanceador de cargas de HTTPS externo. Esto proporciona verificaciones de estado distribuidas y tráfico del plano de datos a la red local con rangos definidos por el cliente. Además, esta topología también admite varias VPC que se conectan a la red local a través de varias interconexiones regionales.
En este codelab, mostraremos cómo configurar este proceso de extremo a extremo según la siguiente topología. De izquierda a derecha, los clientes locales tienen una VM para simular servicios HTTP, aprovechar la conectividad híbrida (VPN con alta disponibilidad o Interconnect) y el NEG híbrido para exponer a través del balanceador de cargas de HTTPS interno. PSC usa el balanceador de cargas de HTTPS interno como adjuntos de servicio. El PSC NEG consume los adjuntos como servicio de backend, expuesto al balanceador de cargas de HTTPS externo. Los usuarios de Internet pueden usar la red global de Google para acelerar el acceso a los servicios HTTP locales.

Figura 1: Private Service Connect usa el grupo de extremos de red y los adjuntos de servicio para conectar el balanceador de cargas de HTTPS externo al balanceador de cargas de HTTPS interno y extender el backend a la red local.
Qué aprenderás
- Balanceador de cargas de HTTPS interno con NEG híbrido y verificación de estado distribuida
- Adjunto de servicio de PSC con balanceador de cargas de HTTPS interno
- Configuración del grupo de extremos de red de PSC
- Exponer el NEG de PSC con el balanceador de cargas de HTTPS externo
Requisitos
- Conocimiento de la conectividad híbrida, como la VPN con alta disponibilidad
- Conocimiento del balanceo de cargas de HTTPS interno y externo
- Conocimiento de Private Service Connect
2. Antes de comenzar
Nota: El codelab ofrece pasos de configuración y validación basados en la topología ilustrada. Modifica el procedimiento según sea necesario para satisfacer los requisitos de tu organización. Los permisos de IAM no están dentro del alcance del codelab.
El codelab usará un proyecto para simular todo el proceso. También se admiten varios proyectos.
Proyecto único: Actualiza el proyecto para admitir la red del productor y del consumidor
En Cloud Shell, asegúrate de que tu ID del proyecto esté configurado.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. Crea recursos locales
En la siguiente sección, configuraremos una VPC local y VMs para simular los servicios locales del cliente.
Red de VPC
En Cloud Shell, ingresa lo siguiente:
gcloud compute networks create vpc-demo-onprem --project=$prodproject --subnet-mode=custom
Crea una subred
En Cloud Shell, ingresa lo siguiente:
gcloud compute networks subnets create vpc-demo-onprem-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=vpc-demo-onprem --region=asia-southeast1
Crea reglas de firewall.
El balanceador de cargas de HTTPS interno admite la verificación de estado distribuida. Las reglas de firewall solo deben permitir el rango de IP de la subred de proxy. Sigue el documento para incluir tus proyectos en la lista de entidades permitidas.
En Cloud Shell, crea una regla de firewall para habilitar las verificaciones de estado de backend y el tráfico del plano de datos desde las subredes de proxy.
gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-onprem --source-ranges 10.0.3.0/24 --enable-logging
En Cloud Shell, crea una regla de firewall para permitir que IAP se conecte a tus instancias de VM.
gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-onprem --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
4. Crea instancias de VM locales
Esta VM simula servicios locales y debe exponerse con el balanceador de cargas de HTTPS interno mediante el NEG híbrido.
En Cloud Shell, crea la instancia www01.
gcloud compute instances create www01 \
--zone=asia-southeast1-b \
--image-family=debian-11 \
--image-project=debian-cloud \
--network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-onprem-asia-southeast1 \
--shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring \
--metadata=startup-script='#! /bin/bash
sudo apt-get update
sudo apt-get install nginx -y
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.nginx-debian.html
sudo systemctl restart nginx'
En la siguiente sección, usaremos letsencrypt para generar certificados y los instalaremos en Nginx. Descarga el archivo de claves públicas y privadas para el siguiente paso. Debes abrir temporalmente el puerto TCP 80 a Internet para generar el certificado.
Asegúrate de que esta VM tenga un nombre de dominio resuelto de forma pública. Por ejemplo, en Cloud DNS, agrega un registro A [www01.yinghli.demo.altostrat.com](http://www01.yinghli.demo.altostrat.com) y apunta a la dirección IP pública de la VM.
gcloud dns --project=$prodproject record-sets create www01.yinghli.demo.altostrat.com. --zone="yinghli-demo" --type="A" --ttl="300" --rrdatas="34.87.77.186"
Desde la consola de la VM www01, sigue las instrucciones para instalar certificados en Nginx y hacer una copia de fullchain.pem y private.pem para los siguientes pasos.
sudo apt install snapd sudo snap install core; sudo snap refresh core sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot sudo certbot --nginx
5. Crea la red de VPC de los productores
Nota: La configuración de redes híbridas NO se incluye en esta configuración.
Red de VPC
En Cloud Shell, ingresa lo siguiente:
gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom
Crea una subred
En Cloud Shell, ingresa lo siguiente:
gcloud compute networks subnets create vpc-demo-asia-southeast1 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=asia-southeast1
Crea una subred de proxy
En Cloud Shell, ingresa lo siguiente:
gcloud compute networks subnets create proxy-subnet-asia-southeast1 \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=asia-southeast1 \ --network=vpc-demo-producer \ --range=10.0.3.0/24
Conectividad híbrida
Sigue la documentación de Cloud VPN para implementar la conectividad de VPN con alta disponibilidad entre la red local y la VPC del productor. Mantén la configuración predeterminada en Cloud Router. No necesitamos agregar 130.211.0.0/22 ni 35.191.0.0/16 en los anuncios de BGP.
6. Crea el NEG híbrido de los productores
Crea un grupo de extremos de red híbrido y agrega la IP:PUERTO de la VM local al NEG.
En Cloud Shell, ingresa lo siguiente:
gcloud compute network-endpoint-groups create on-prem-service-neg \
--network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
--zone=asia-southeast1-b \
--network=vpc-demo-producer
gcloud compute network-endpoint-groups update on-prem-service-neg \
--zone=asia-southeast1-b \
--add-endpoint="ip=10.0.0.2,port=443"
7. Crea el balanceador de cargas de HTTPS interno de los productores
Actualmente, el balanceador de cargas de HTTPS externo solo admite el protocolo HTTPS para el NEG de PSC( documentos). Cuando se publican servicios, debemos usar el balanceador de cargas de HTTPS interno y habilitar el acceso global a las reglas de reenvío.
En Cloud Shell, crea la verificación de estado regional.
gcloud compute health-checks create https on-prem-service-hc \
--region=asia-southeast1 \
--use-serving-port
En Cloud Shell, crea el servicio de backend y agrega el NEG híbrido.
gcloud compute backend-services create on-premise-service-backend \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --region=asia-southeast1 \ --health-checks=on-prem-service-hc \ --health-checks-region=asia-southeast1 gcloud compute backend-services add-backend on-premise-service-backend \ --network-endpoint-group=on-prem-service-neg \ --network-endpoint-group-zone=asia-southeast1-b \ --region=asia-southeast1 \ --balancing-mode=RATE \ --max-rate-per-endpoint=100
En Cloud Shell, crea el mapa de URL.
gcloud compute url-maps create on-premise-url \
--default-service on-premise-service-backend \
--region=asia-southeast1
En Cloud Shell, crea los certificados SSL regionales. Se descargan dos archivos de certificado de la VM.
gcloud compute ssl-certificates create www01 \
--certificate=fullchain.pem \
--private-key=private.pem \
--region=asia-southeast1
En Cloud Shell, crea https-target-proxy.
gcloud compute target-https-proxies create on-premise-httpsproxy \
--ssl-certificates=www01 \
--url-map=on-premise-url \
--url-map-region=asia-southeast1 \
--region=asia-southeast1
En Cloud Shell, reserva una IP estática interna y crea la regla de reenvío.
gcloud compute addresses create ilbaddress \
--region=asia-southeast1 \
--subnet=vpc-demo-asia-southeast1 \
--addresses=10.0.2.100
gcloud compute forwarding-rules create https-ilb-psc \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=vpc-demo-producer \
--subnet=vpc-demo-asia-southeast1 \
--address=ilbaddress \
--ports=443 \
--region=asia-southeast1 \
--target-https-proxy=on-premise-httpsproxy \
--target-https-proxy-region=asia-southeast1
--allow-global-access
8. Crea la instancia de VM del productor
Crea una VM del productor para la verificación.
En Cloud Shell, ingresa lo siguiente:
gcloud compute instances create test01 \
--zone=asia-southeast1-b \
--image-family=debian-11 \
--image-project=debian-cloud \
--network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-asia-southeast1 \
--shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring
Para permitir que IAP se conecte a tus instancias de VM, crea una regla de firewall que cumpla con lo siguiente:
En Cloud Shell, ingresa lo siguiente:
gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
Desde la consola de la VM del productor, accede a [www01.yinghli.demo.altostrat.com](https://www01.yinghli.demo.altostrat.com) y resuelve la dirección IP del balanceador de cargas de HTTPS interno. HTTP 200 indicó que la configuración funcionó como se esperaba.
curl -v --resolve www01.yinghli.demo.altostrat.com:443:10.0.2.100 https://www01.yinghli.demo.altostrat.com * Added www01.yinghli.demo.altostrat.com:443:10.0.2.100 to DNS cache * Hostname www01.yinghli.demo.altostrat.com was found in DNS cache * Trying 10.0.2.100:443... * Connected to www01.yinghli.demo.altostrat.com (10.0.2.100) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use h2 * Server certificate: * subject: CN=www01.yinghli.demo.altostrat.com * start date: Jun 4 10:36:43 2023 GMT * expire date: Sep 2 10:36:42 2023 GMT * subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com" * issuer: C=US; O=Let's Encrypt; CN=R3 * SSL certificate verify ok. * Using HTTP2, server supports multi-use * Connection state changed (HTTP/2 confirmed) * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0 * Using Stream ID: 1 (easy handle 0x55865ef982e0) > GET / HTTP/2 > Host: www01.yinghli.demo.altostrat.com > user-agent: curl/7.74.0 > accept: */* > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * old SSL session ID is stale, removing * Connection state changed (MAX_CONCURRENT_STREAMS == 100)! < HTTP/2 200 < server: nginx/1.18.0 < date: Mon, 05 Jun 2023 02:29:38 GMT < content-type: text/html < content-length: 35 < last-modified: Sun, 04 Jun 2023 09:02:16 GMT < etag: "647c5318-23" < accept-ranges: bytes < via: 1.1 google < Page on www01 in asia-southeast1-b * Connection #0 to host www01.yinghli.demo.altostrat.com left intact
Nota: No puedes acceder directamente a los servicios HTTPS de la VM 10.0.0.2, ya que el firewall local solo permite el acceso a la subred de proxy 10.0.3.0/24.
9. Crea la subred de NAT de PSC
En Cloud Shell, ingresa lo siguiente:
gcloud compute networks subnets create psc-nat-subnet \ --network=vpc-demo-producer \ --region=asia-southeast1 \ --range=10.0.5.0/24 \ --purpose=private-service-connect
10. Crea un adjunto de servicio de HTTPs
En Cloud Shell, crea el adjunto de servicio de HTTPs.
gcloud compute service-attachments create ilbserviceattach \ --region=asia-southeast1 \ --producer-forwarding-rule=https-ilb-psc \ --connection-preference=ACCEPT_AUTOMATIC \ --nat-subnets=psc-nat-subnet
Valida el adjunto de servicio de HTTPs.
gcloud compute service-attachments describe ilbserviceattach --region asia-southeast1
Registra el nombre del adjunto de servicio:
projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach
11. Crea la red de VPC de los consumidores
En la siguiente sección, la VPC del consumidor se configura en el mismo proyecto, pero también se admiten diferentes proyectos. La comunicación entre la red del consumidor y del productor se realiza a través del adjunto de servicio definido en la red del productor.
Red de VPC
En Cloud Shell, ingresa lo siguiente:
gcloud compute networks create vpc-demo-consumer --project=$prodproject --subnet-mode=custom
Crea una subred
En Cloud Shell, ingresa lo siguiente:
gcloud compute networks subnets create consumer-subnet --project=$prodproject --range=10.0.6.0/24 --network=vpc-demo-consumer --region=asia-southeast1
12. Crea el grupo de extremos de red de PSC
Crea un PSC NEG
Copia el nombre del adjunto de servicios https anterior y pégalo en los parámetros --psc-target-service.
En Cloud Shell, ingresa lo siguiente:
gcloud beta compute network-endpoint-groups create consumerpscneg \ --project=$prodproject \ --region=asia-southeast1 \ --network-endpoint-type=PRIVATE_SERVICE_CONNECT \ --psc-target-service=projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach \ --network=vpc-demo-consumer \ --subnet=consumer-subnet
Después de configurar correctamente el NEG de PSC, en la IU, sigue Private Service Connect -> Published Services -> Ten en cuenta que la conexión ilbserviceattach publicada ahora indica 1 regla de reenvío.

13. Crea el balanceador de cargas de HTTPS externo del consumidor
Crea un balanceador de cargas de HTTPS externo y usa el NEG de PSC como servicios de backend( documentación).
En Cloud Shell, ingresa lo siguiente:
gcloud compute addresses create httpspsclb \
--ip-version=IPV4 --global
gcloud compute backend-services create consumer-bs \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTPS \
--global
gcloud compute backend-services add-backend consumer-bs \
--network-endpoint-group=consumerpscneg \
--network-endpoint-group-region=asia-southeast1 \
--global
gcloud compute url-maps create consumer-url \
--default-service=consumer-backend-service \
--global
gcloud compute ssl-certificates create wwwglobal \
--certificate=fullchain.pem \
--private-key=private.pem \
--global
gcloud compute target-https-proxies create consumer-url-target-proxy \
--url-map=consumer-url \
--ssl-certificates=wwwglobal
gcloud compute forwarding-rules create consumer-url-forwarding-rule \
--load-balancing-scheme=EXTERNAL_MANAGED \
--network-tier=PREMIUM \
--address=httpspsclb \
--target-https-proxy=consumer-url-target-proxy \
--ports=443 \
--global
Actualiza el registro DNS para www01.yinghli.demo.altostrat.com y apunta a la dirección IP pública del balanceador de cargas de HTTPS externo.
gcloud dns --project=$prodproject record-sets update www01.yinghli.demo.altostrat.com. --type="A" --zone="yinghli-demo" --rrdatas="34.102.178.214" --ttl="300"
14. Validación
Desde tu laptop, accede a https://www01.yinghli.demo.altostrat.com con curl.
curl -v https://www01.yinghli.demo.altostrat.com * Trying 34.102.178.214:443... * Connected to www01.yinghli.demo.altostrat.com (34.102.178.214) port 443 (#0) * ALPN: offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN: server accepted h2 * Server certificate: * subject: CN=www01.yinghli.demo.altostrat.com * start date: Jun 4 10:36:43 2023 GMT * expire date: Sep 2 10:36:42 2023 GMT * subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com" * issuer: C=US; O=Let's Encrypt; CN=R3 * SSL certificate verify ok. * using HTTP/2 * h2h3 [:method: GET] * h2h3 [:path: /] * h2h3 [:scheme: https] * h2h3 [:authority: www01.yinghli.demo.altostrat.com] * h2h3 [user-agent: curl/8.0.0] * h2h3 [accept: */*] * Using Stream ID: 1 (easy handle 0x149019a00) > GET / HTTP/2 > Host: www01.yinghli.demo.altostrat.com > user-agent: curl/8.0.0 > accept: */* > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * old SSL session ID is stale, removing < HTTP/2 200 < server: nginx/1.18.0 < date: Mon, 05 Jun 2023 02:48:43 GMT < content-type: text/html < content-length: 35 < last-modified: Sun, 04 Jun 2023 09:02:16 GMT < etag: "647c5318-23" < accept-ranges: bytes < via: 1.1 google, 1.1 google < alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 < Page on www01 in asia-southeast1-b * Connection #0 to host www01.yinghli.demo.altostrat.com left intact
15. Pasos para realizar la limpieza
Pasos para limpiar la red del productor
Nota: Los pasos de limpieza solo muestran la configuración relacionada con el balanceador de cargas y PSC. No se incluyen la VPC ni la conectividad híbrida.
Desde una sola shell de Cloud en la terminal, borra los componentes del lab.
gcloud compute forwarding-rules delete consumer-url-forwarding-rule --global gcloud compute target-https-proxies delete consumer-url-target-proxy gcloud compute ssl-certificates delete wwwglobal --global gcloud compute url-maps delete consumer-url gcloud compute backend-services delete consumer-bs --global gcloud compute addresses delete httpspsclb --global gcloud beta compute network-endpoint-groups delete consumerpscneg --region=asia-southeast1 gcloud compute service-attachments delete ilbserviceattach --region=asia-southeast1 gcloud compute networks subnets delete psc-nat-subnet --region=asia-southeast1 gcloud compute forwarding-rules delete https-ilb-psc --region=asia-southeast1 gcloud compute addresses delete ilbaddress --region=asia-southeast1 gcloud compute target-https-proxies delete on-premise-httpsproxy --region=asia-southeast1 gcloud compute ssl-certificates delete www01 --region=asia-southeast1 gcloud compute url-maps delete on-premise-url --region=asia-southeast1 gcloud compute backend-services delete on-premise-service-backend --region=asia-southeast1 gcloud compute health-checks delete on-prem-service-hc --region=asia-southeast1 gcloud compute network-endpoint-groups delete on-prem-service-neg --zone=asia-southeast1-b gcloud compute networks subnets delete proxy-subnet-asia-southeast1 --region=asia-southeast1
16. ¡Felicitaciones!
Felicitaciones por completar el codelab.
Temas abordados
- Balanceador de cargas de HTTPS interno con NEG híbrido y verificación de estado distribuida
- Adjunto de servicio de PSC con balanceador de cargas de HTTPS interno
- Configuración del grupo de extremos de red de PSC
- Exponer el NEG de PSC con el balanceador de cargas de HTTPS externo