En este instructivo, se describe cómo acceder a un clúster privado de Google Kubernetes Engine (GKE) mediante grupos privados de Cloud Build. Este acceso te permite usar Cloud Build para implementar tu aplicación en un clúster privado de GKE. Este instructivo está dirigido a los administradores de red y es aplicable a todas las situaciones en las que los grupos privados de Cloud Build necesitan comunicarse con servicios que se ejecutan en una red de nube privada virtual (VPC) de intercambio de tráfico. Por ejemplo, los trabajadores de la piscina privada podrían comunicarse con los siguientes servicios:
- Clúster privado de GKE
- Base de datos de Cloud SQL
- Instancia de Memorystore
- Instancia de Compute Engine que se ejecuta en una red de VPC diferente a la que intercambia tráfico con el grupo privado Cloud Build
Los grupos privados de Cloud Build y los planos de control del clúster de GKE se ejecutan en las redes de VPC de Google. Estas redes de VPC intercambian tráfico con tu propia red de VPC en Google Cloud. Sin embargo, el intercambio de tráfico entre redes de VPC no admite el intercambio de tráfico transitivo, que puede ser una restricción cuando se usan grupos privados de Cloud Build. En este instructivo, se presenta una solución que usa Cloud VPN para permitir que los trabajadores de un grupo privado de Cloud Build accedan al plano de control de un clúster privado de GKE.
En este instructivo, se supone que estás familiarizado con Google Kubernetes Engine,
Cloud Build, el comando gcloud
, el intercambio de tráfico entre redes de VPC y
Cloud VPN.
Descripción general de la arquitectura
Cuando creas un clúster privado de GKE sin acceso
de clientes al extremo público, los clientes solo pueden acceder al
plano de control del clúster de GKE
mediante su dirección IP privada.
Los clientes como kubectl
pueden comunicarse con el plano de control solo
si se ejecutan en una instancia que tiene acceso a la red de VPC
y que está en una
red autorizada.
Si deseas usar Cloud Build para implementar tu aplicación en este clúster privado de GKE, debes usar grupos privados de Cloud Build para acceder a los clústeres de GKE. Los grupos privados son un conjunto de instancias de trabajador que se ejecutan en un proyecto de Google Cloud y pertenecen a Google, y que intercambian tráfico con tu red de VPC mediante una conexión de intercambio de tráfico entre redes de VPC. En esta configuración, las instancias de trabajador pueden comunicarse con la dirección IP privada del plano de control del clúster de GKE.
Sin embargo, el plano de control del clúster de GKE también se ejecuta en un proyecto de Google y se conecta a tu red de VPC mediante Private Service Connect (PSC). El intercambio de tráfico entre redes de VPC no admite el intercambio de tráfico transitivo, por lo que los paquetes no se pueden enrutar directamente entre Cloud Build grupo privado y el plano de control del clúster de GKE.
Para permitir que las instancias de trabajador de Cloud Build accedan al plano de control del clúster de GKE, puedes intercambiar tráfico entre el grupo privado y usar PSC para conectar el plano de control del clúster de GKE con dos redes de VPC de tu propiedad y, luego, conectar estas dos redes de VPC que usan Cloud VPN. Este intercambio de tráfico y conexión permite que cada lado del túnel VPC anuncie el grupo privado y las redes del plano de control del clúster de GKE, lo que completa la ruta.
En el siguiente diagrama arquitectónico, se muestran los recursos que se usan en este instructivo:
Recomendamos crear todos los recursos que se usan en este instructivo en la misma región de Google Cloud para obtener una latencia baja. El túnel VPN puede recorrer dos regiones diferentes si esta comunicación entre regiones es necesaria para tu propia implementación. Las dos redes de VPC que posees también pueden pertenecer a proyectos diferentes.
Objetivos
- Crear un clúster privado de GKE
- Configurar un grupo privado de Cloud Build
- Crear una conexión de VPN con alta disponibilidad entre dos redes de VPC
- Habilitar el enrutamiento de paquetes en dos intercambios de tráfico de red de VPC y una conexión de VPC
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build, Google Kubernetes Engine, and Service Networking APIs.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Crea dos redes de VPC en tu propio proyecto
En esta sección, crearás dos redes de VPC y una subred para los nodos del clúster de GKE.
En Cloud Shell, crea la primera red de VPC (llamada “Red de VPC de intercambio de tráfico privado en el grupo” en el diagrama anterior). No es necesario crear subredes en esta red.
gcloud compute networks create PRIVATE_POOL_PEERING_VPC_NAME \ --subnet-mode=CUSTOM
Reemplaza PRIVATE_POOL_PEERING_VPC_NAME por el nombre de tu red de VPC para intercambiar tráfico con la red de grupos privados de Cloud Build.
Crea la segunda red de VPC (llamada “Red de VPC del clúster de GKE” en la diagrama anterior):
gcloud compute networks create GKE_CLUSTER_VPC_NAME \ --subnet-mode=CUSTOM
Reemplaza GKE_CLUSTER_VPC_NAME por el nombre de tu red de VPC para intercambiar tráfico con el plano de control del clúster de GKE.
Crea una subred para los nodos del clúster de GKE:
gcloud compute networks subnets create GKE_SUBNET_NAME \ --network=GKE_CLUSTER_VPC_NAME \ --range=GKE_SUBNET_RANGE \ --region=REGION
Reemplaza lo siguiente:
- GKE_SUBNET_NAME: Es el nombre de la subred que se destinó para alojar los nodos del clúster de GKE.
- GKE_CLUSTER_VPC_NAME: Es el nombre de tu red de VPC para conectarse al plano de control del clúster de GKE.
- GKE_SUBNET_RANGE: Es el rango de direcciones IP de
GKE_SUBNET_NAME. Para este instructivo, puedes
usar
10.244.252.0/22
. - REGION: La región de Google Cloud que aloja
el clúster de GKE. Para este instructivo, puedes
usar
us-central1
.
Ya configuraste dos redes de VPC en tu propio proyecto y están listas para intercambiar tráfico con otros servicios.
Crea un clúster privado de GKE
En esta sección, crearás el clúster privado de GKE.
En Cloud Shell, crea un clúster de GKE sin acceso de clientes al extremo público del plano de control.
gcloud container clusters create PRIVATE_CLUSTER_NAME \ --region=REGION \ --enable-master-authorized-networks \ --network=GKE_CLUSTER_VPC_NAME \ --subnetwork=GKE_SUBNET_NAME \ --enable-private-nodes \ --enable-private-endpoint \ --enable-ip-alias \ --master-ipv4-cidr=CLUSTER_CONTROL_PLANE_CIDR
Reemplaza lo siguiente:
- PRIVATE_CLUSTER_NAME: Es el nombre del clúster privado de GKE.
- REGION: Es la región del
clúster de GKE. En este instructivo, usa
us-central1
para la región, la misma que usaste en las redes de VPC. - GKE_CLUSTER_VPC_NAME: Es el nombre de tu red de VPC para conectarse a la plano de control del clúster de GKE.
- GKE_SUBNET_RANGE: Es el rango de direcciones IP de
GKE_SUBNET_NAME. Para este instructivo, puedes
usar
10.244.252.0/22
. CLUSTER_CONTROL_PLANE_CIDR: El rango de direcciones IP del plano de control del clúster de GKE. Debe tener un prefijo
/28
. En este instructivo, usa172.16.0.32/28
.
Acabas de crear un clúster de GKE privado.
Configura el intercambio de tráfico entre redes de VPC para GKE 1.28 y versiones anteriores
Si usas este instructivo para configurar un clúster existente que ejecute GKE versión 1.28 o anterior, tu red de VPC privada usa Intercambio de tráfico entre redes de VPC para conectarse al clúster de GKE. Realiza los pasos que se indican a continuación:
Recupera el nombre del clúster de GKE Intercambio de tráfico entre redes de VPC. Este intercambio de tráfico entre redes de VPC se creó de forma automática cuando creaste el clúster de GKE.
export GKE_PEERING_NAME=$(gcloud container clusters describe PRIVATE_CLUSTER_NAME \ --region=REGION \ --format='value(privateClusterConfig.peeringName)')
Reemplaza lo siguiente:
- PRIVATE_CLUSTER_NAME: Es el nombre del clúster privado de GKE.
- REGION: Es la región del
clúster de GKE. En este instructivo, usa
us-central1
para la región, la misma que usaste en las redes de VPC.
Habilita la exportación de rutas personalizadas para anunciar la red del grupo privado en el plano de control del clúster de GKE:
gcloud compute networks peerings update $GKE_PEERING_NAME \ --network=GKE_CLUSTER_VPC_NAME \ --export-custom-routes \ --no-export-subnet-routes-with-public-ip
Reemplaza GKE_CLUSTER_VPC_NAME por el nombre de tu red de VPC para conectarse con el clúster de GKE plano de control.
Para obtener más información sobre las rutas personalizadas, consulta Importa y exporta rutas personalizadas.
Crea un grupo privado de Cloud Build
En esta sección, crearás el grupo privado de Cloud Build.
En Cloud Shell, asigna un rango de direcciones IP con nombre en la red de VPC PRIVATE_POOL_PEERING_VPC_NAME para el grupo privado de Cloud Build:
gcloud compute addresses create RESERVED_RANGE_NAME \ --global \ --purpose=VPC_PEERING \ --addresses=PRIVATE_POOL_NETWORK \ --prefix-length=PRIVATE_POOL_PREFIX \ --network=PRIVATE_POOL_PEERING_VPC_NAME
Reemplaza lo siguiente:
- RESERVED_RANGE_NAME: El nombre del rango de direcciones IP privadas que aloja el grupo privado de Cloud Build.
- PRIVATE_POOL_NETWORK: Es la primera dirección IP de
RESERVED_RANGE_NAME. Para este instructivo, puedes
usar
192.168.0.0
. - PRIVATE_POOL_PREFIX: Es el prefijo de
RESERVED_RANGE_NAME. Cada grupo privado creado usará
/24
de este rango. En este instructivo, puedes usar20
, que te permite crear hasta dieciséis grupos. - PRIVATE_POOL_PEERING_VPC_NAME: Es el nombre de tu red de VPC en la que se realizará el intercambio de tráfico con la red de grupo privado de Cloud Build.
- El rango de IP es
global
porque, cuando--purpose
esVPC_PEERING
, el rango de direcciones IP con nombre debe serglobal
.
Crea una conexión privada entre la red de VPC que contiene el grupo privado de Cloud Build y PRIVATE_POOL_PEERING_VPC_NAME:
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=RESERVED_RANGE_NAME \ --network=PRIVATE_POOL_PEERING_VPC_NAME
Reemplaza lo siguiente:
- RESERVED_RANGE_NAME: El nombre del rango de direcciones IP privadas que aloja el grupo privado de Cloud Build.
- PRIVATE_POOL_PEERING_VPC_NAME: Es el nombre de tu red de VPC para intercambiar tráfico con Cloud Build red de grupos privados.
Habilita la exportación de rutas personalizadas para anunciar la red del plano de control del clúster de GKE en el grupo privado:
gcloud compute networks peerings update servicenetworking-googleapis-com \ --network=PRIVATE_POOL_PEERING_VPC_NAME \ --export-custom-routes \ --no-export-subnet-routes-with-public-ip
Reemplaza PRIVATE_POOL_PEERING_VPC_NAME por el nombre de tu red de VPC para intercambiar tráfico con la red de grupos privados de Cloud Build.
Crea un grupo privado de Cloud Build en el que se realice un intercambio de tráfico con PRIVATE_POOL_PEERING_VPC_NAME:
gcloud builds worker-pools create PRIVATE_POOL_NAME \ --region=REGION \ --peered-network=projects/$GOOGLE_CLOUD_PROJECT/global/networks/PRIVATE_POOL_PEERING_VPC_NAME
Reemplaza lo siguiente:
- PRIVATE_POOL_NAME: Es el nombre de la Grupo privado de Cloud Build.
- REGION: Es la región del
clúster de GKE. En este instructivo, usa
us-central1
para la región, la misma que usaste en las redes de VPC.
Ya creaste un grupo privado de Cloud Build y lo intercambiaste con la red de VPC de tu propio proyecto.
Crea una conexión de Cloud VPN entre tus dos redes de VPC
En tu propio proyecto, ahora tienes una red de VPC que intercambia tráfico con el grupo privado de Cloud Build y otra red de VPC que intercambia tráfico con el clúster privado de GKE.
En esta sección, crearás una conexión de Cloud VPN entre las dos redes de VPC de tu proyecto. Esta conexión completa la ruta y permite que los grupos privados de Cloud Build accedan al clúster de GKE.
En Cloud Shell, crea dos puertas de enlace de VPN con alta disponibilidad que se conecten entre sí. Para crear estas puertas de enlace, sigue las instrucciones que aparecen en Crea dos puertas de enlace de VPN con alta disponibilidad configuradas por completo que se conecten entre sí. La configuración se completa después de crear las sesiones de BGP. Cuando sigas estas instrucciones, usa los siguientes valores:
- PRIVATE_POOL_PEERING_VPC_NAME para
NETWORK_1
- GKE_CLUSTER_VPC_NAME para
NETWORK_2
- REGION para
REGION_1
yREGION_2
- PRIVATE_POOL_PEERING_VPC_NAME para
Configura cada una de las cuatro sesiones de BGP que creaste para anunciar las rutas a la red de VPC del grupo privado y a la del plano de control del clúster de GKE:
gcloud compute routers update-bgp-peer ROUTER_NAME_1 \ --peer-name=PEER_NAME_GW1_IF0 \ --region=REGION \ --advertisement-mode=CUSTOM \ --set-advertisement-ranges=PRIVATE_POOL_NETWORK/PRIVATE_POOL_PREFIX gcloud compute routers update-bgp-peer ROUTER_NAME_1 \ --peer-name=PEER_NAME_GW1_IF1 \ --region=REGION \ --advertisement-mode=CUSTOM \ --set-advertisement-ranges=PRIVATE_POOL_NETWORK/PRIVATE_POOL_PREFIX gcloud compute routers update-bgp-peer ROUTER_NAME_2 \ --peer-name=PEER_NAME_GW2_IF0 \ --region=REGION \ --advertisement-mode=CUSTOM \ --set-advertisement-ranges=CLUSTER_CONTROL_PLANE_CIDR gcloud compute routers update-bgp-peer ROUTER_NAME_2 \ --peer-name=PEER_NAME_GW2_IF1 \ --region=REGION \ --advertisement-mode=CUSTOM \ --set-advertisement-ranges=CLUSTER_CONTROL_PLANE_CIDR
Los siguientes valores son los mismos nombres que usaste cuando creaste las dos puertas de enlace de VPN con alta disponibilidad:
- ROUTER_NAME_1
- PEER_NAME_GW1_IF0
- PEER_NAME_GW1_IF1
- ROUTER_NAME_2
- PEER_NAME_GW2_IF0
- PEER_NAME_GW2_IF1
Habilita el acceso de Cloud Build al plano de control del clúster de GKE
Ahora que tienes una conexión de VPN entre las dos redes de VPC de tu proyecto, habilita el acceso de Cloud Build al plano de control del clúster de GKE.
En Cloud Shell, agrega el rango de red del grupo privado a las redes autorizadas del plano de control en GKE:
gcloud container clusters update PRIVATE_CLUSTER_NAME \ --enable-master-authorized-networks \ --region=REGION \ --master-authorized-networks=PRIVATE_POOL_NETWORK/PRIVATE_POOL_PREFIX
Reemplaza lo siguiente:
- PRIVATE_CLUSTER_NAME: Es el nombre del clúster privado de GKE.
- REGION: Es la región del
clúster de GKE. En este instructivo, usa
us-central1
para la región, la misma que usaste en las redes de VPC. - PRIVATE_POOL_NETWORK: Es la primera dirección IP de
RESERVED_RANGE_NAME. Para este instructivo, puedes
usar
192.168.0.0
. - PRIVATE_POOL_PREFIX: Es el prefijo de
RESERVED_RANGE_NAME. Cada grupo privado creado usará
/24
de este rango. En este instructivo, puedes usar20
, que te permite crear hasta dieciséis grupos.
Permite que la cuenta de servicio que usas para la compilación acceda al plano de control del clúster de GKE:
export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format 'value(projectNumber)') gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member=serviceAccount:SERVICE_ACCOUNT \ --role=roles/container.developer
Los grupos privados de Cloud Build ahora pueden acceder al plano de control del clúster de GKE.
Verifica la solución
En esta sección, debes ejecutar el comando kubectl get nodes
en un paso de compilación
que se ejecuta en el grupo privado para verificar que la solución
funcione.
En Cloud Shell, crea una carpeta temporal con un archivo de configuración de Cloud Build que ejecute el comando
kubectl get nodes
:mkdir private-pool-test && cd private-pool-test cat > cloudbuild.yaml <<EOF steps: - name: "gcr.io/cloud-builders/kubectl" args: ['get', 'nodes'] env: - 'CLOUDSDK_COMPUTE_REGION=REGION' - 'CLOUDSDK_CONTAINER_CLUSTER=PRIVATE_CLUSTER_NAME' options: workerPool: 'projects/$GOOGLE_CLOUD_PROJECT/locations/REGION/workerPools/PRIVATE_POOL_NAME' EOF
Reemplaza lo siguiente:
- REGION: Es la región del
clúster de GKE. En este instructivo, usa
us-central1
para la región, la misma que usaste en las redes de VPC. - PRIVATE_CLUSTER_NAME: Es el nombre del clúster privado de GKE.
- PRIVATE_POOL_NAME: El nombre del grupo privado de Cloud Build.
- REGION: Es la región del
clúster de GKE. En este instructivo, usa
Inicia el trabajo de compilación:
gcloud builds submit --config=cloudbuild.yaml
Verifica que el resultado sea la lista de nodos en el clúster de GKE. En el registro de compilación que se muestra en la consola, se incluye una tabla similar a la que se muestra a continuación:
NAME STATUS ROLES AGE VERSION gke-private-default-pool-3ec34262-7lq9 Ready <none> 9d v1.19.9-gke.1900 gke-private-default-pool-4c517758-zfqt Ready <none> 9d v1.19.9-gke.1900 gke-private-default-pool-d1a885ae-4s9c Ready <none> 9d v1.19.9-gke.1900
Ya verificaste que los trabajadores del grupo privado puedan acceder al clúster de GKE. Este acceso te permite usar Cloud Build para implementar tu aplicación en este clúster privado de GKE.
Soluciona problemas
Si tienes problemas con este instructivo, consulta los siguientes documentos:
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Borra los recursos individuales
En Cloud Shell, borra el clúster de GKE:
gcloud container clusters delete PRIVATE_CLUSTER_NAME \ --region=REGION \ --async
Cuando ejecutas este comando, el intercambio de tráfico entre redes de VPC se borra de forma automática.
Borra el grupo privado de Cloud Build:
gcloud builds worker-pools delete PRIVATE_POOL_NAME \ --region=REGION
Borra la conexión privada entre la red de VPC del productor de servicios y PRIVATE_POOL_PEERING_VPC_NAME:
gcloud services vpc-peerings delete \ --network=PRIVATE_POOL_PEERING_VPC_NAME \ --async
Borra el rango de direcciones IP con nombre que se usa para el grupo privado:
gcloud compute addresses delete RESERVED_RANGE_NAME \ --global
Borra los cuatro túneles VPN. Usa los mismos nombres que especificaste en Crea túneles VPN.
gcloud compute vpn-tunnels delete \ TUNNEL_NAME_GW1_IF0 \ TUNNEL_NAME_GW1_IF1 \ TUNNEL_NAME_GW2_IF0 \ TUNNEL_NAME_GW2_IF1 \ --region=REGION
Borra los dos Cloud Routers. Usa los mismos nombres que especificaste en Crea Cloud Routers.
gcloud compute routers delete \ ROUTER_NAME_1 \ ROUTER_NAME_2 \ --region=REGION
Borra las dos puertas de enlace de VPN. Usa los mismos nombres que especificaste en Crea las puertas de enlace de VPN con alta disponibilidad.
gcloud compute vpn-gateways delete \ GW_NAME_1 \ GW_NAME_2 \ --region=REGION
Borra GKE_SUBNET_NAME, que es la subred que aloja los nodos del clúster de GKE:
gcloud compute networks subnets delete GKE_SUBNET_NAME \ --region=REGION
Borra las dos redes de VPC PRIVATE_POOL_PEERING_VPC_NAME y GKE_CLUSTER_VPC_NAME:
gcloud compute networks delete \ PRIVATE_POOL_PEERING_VPC_NAME \ GKE_CLUSTER_VPC_NAME
¿Qué sigue?
- Obtén más información para ejecutar compilaciones en un grupo privado.
- Ejecuta un proxy dentro del clúster privado de GKE que tenga acceso al plano de control.
- Obtén información para implementar en GKE desde Cloud Build.
- Prueba otras funciones de Google Cloud. Revisa nuestros instructivos.