En este tutorial 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 desplegar tu aplicación en un clúster de GKE privado. Este tutorial está dirigido a administradores de redes y se aplica 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) emparejada. Por ejemplo, los trabajadores de la piscina privada podrían comunicarse con los siguientes servicios:
- Clúster de GKE privado
- Base de datos de Cloud SQL
- Instancia de Memorystore
- Instancia de Compute Engine que se ejecuta en una red VPC distinta de la que está emparejada con el grupo privado de Cloud Build
- Instancia de Cloud SQL con IP privada que se ejecuta en una red VPC distinta de la que usa el grupo privado de Cloud Build.
Los grupos privados de Cloud Build y los planos de control de clústeres de GKE se ejecutan en redes de VPC propiedad de Google. Estas redes de VPC se emparejan con tu red de VPC en Google Cloud. Sin embargo, el emparejamiento entre redes de VPC no admite el emparejamiento transitivo, lo que puede ser una restricción al usar grupos privados de Cloud Build. En este tutorial 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 de GKE privado.
En este tutorial se da por hecho que conoces Google Kubernetes Engine, Cloud Build, el comando gcloud
, el peering de redes de VPC y Cloud VPN.
Información general sobre la arquitectura
Cuando creas un clúster de GKE privado sin acceso de cliente al endpoint 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
, solo pueden comunicarse con el plano de control si se ejecutan en una instancia que tenga acceso a la red de VPC y que esté en una red autorizada.
Si quieres usar Cloud Build para desplegar 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 propiedad de Google y que se emparejan con tu red de VPC mediante una conexión de emparejamiento entre redes de VPC. Google Cloud 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 propiedad de Google y se conecta a tu red de VPC mediante Private Service Connect (PSC). El emparejamiento de redes de VPC no admite el emparejamiento transitivo, por lo que los paquetes no se pueden enrutar directamente entre el grupo privado de Cloud Build 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 emparejar 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. A continuación, conecta estas dos redes de VPC mediante Cloud VPN. Este peering y esta conexión permiten que cada lado del túnel de VPC anuncie la red privada y la red del plano de control del clúster de GKE, lo que completa la ruta.
En el siguiente diagrama de arquitectura se muestran los recursos que se usan en este tutorial:
Para reducir la latencia, te recomendamos que crees todos los recursos que se usan en este tutorial en la misma Google Cloud región. El túnel VPN puede atravesar dos regiones diferentes si necesitas esta comunicación entre regiones para tu implementación. Las dos redes de VPC de tu propiedad también pueden pertenecer a proyectos diferentes.
Objetivos
- Crea un clúster privado de GKE.
- Configura un grupo privado de Cloud Build.
- Crea una conexión VPN de alta disponibilidad entre dos redes VPC.
- Habilita el enrutamiento de paquetes a través de dos emparejamientos de redes de VPC y una conexión de VPC.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify 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.
Crear dos redes de VPC en tu 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 "Private pool peering VPC network" en el diagrama anterior). No es necesario que crees subredes en esta red.
gcloud compute networks create PRIVATE_POOL_PEERING_VPC_NAME \ --subnet-mode=CUSTOM
Sustituye PRIVATE_POOL_PEERING_VPC_NAME por el nombre de tu red de VPC que se va a emparejar con la red del grupo privado de Cloud Build.
Crea la segunda red de VPC (llamada "GKE cluster VPC network" en el diagrama anterior):
gcloud compute networks create GKE_CLUSTER_VPC_NAME \ --subnet-mode=CUSTOM
Sustituye GKE_CLUSTER_VPC_NAME por el nombre de tu red VPC para emparejarla 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
Haz los cambios siguientes:
- GKE_SUBNET_NAME: el nombre de la subred que se va a usar para alojar los nodos del clúster de GKE.
- GKE_CLUSTER_VPC_NAME: el nombre de tu red VPC para conectarte con el plano de control del clúster de GKE.
- GKE_SUBNET_RANGE: el intervalo de direcciones IP de
GKE_SUBNET_NAME. En este tutorial, puedes usar
10.244.252.0/22
. - REGION: la Google Cloud región que aloja el clúster de GKE. En este tutorial, puedes usar
us-central1
.
Ahora has configurado dos redes de VPC en tu proyecto y están listas para emparejarse con otros servicios.
Crear un clúster de GKE privado
En esta sección, creará el clúster de GKE privado.
En Cloud Shell, crea un clúster de GKE sin acceso de cliente al endpoint 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
Haz los cambios siguientes:
- PRIVATE_CLUSTER_NAME: el nombre del clúster de GKE privado.
- REGION: la región del clúster de GKE. En este tutorial, usa
us-central1
para la región, la misma que usaste para las redes de VPC. - GKE_CLUSTER_VPC_NAME: el nombre de tu red VPC para conectarte al plano de control del clúster de GKE.
- GKE_SUBNET_RANGE: el intervalo de direcciones IP de
GKE_SUBNET_NAME. En este tutorial, puedes usar
10.244.252.0/22
. CLUSTER_CONTROL_PLANE_CIDR: el intervalo de direcciones IP del plano de control del clúster de GKE. Debe tener el prefijo
/28
. En este tutorial, usaremos172.16.0.32/28
.
Ya has creado un clúster privado de GKE.
Configurar el emparejamiento entre redes de VPC para GKE 1.28 y versiones anteriores
Si estás siguiendo este tutorial para configurar un clúster que ya tenga la versión 1.28 o una anterior de GKE, tu red de VPC privada usará el emparejamiento entre redes de VPC para conectarse al clúster de GKE. Sigue estos pasos:
Recupera el nombre del emparejamiento de redes VPC del clúster de GKE. Este emparejamiento de redes VPC se ha creado automáticamente al crear el clúster de GKE.
export GKE_PEERING_NAME=$(gcloud container clusters describe PRIVATE_CLUSTER_NAME \ --region=REGION \ --format='value(privateClusterConfig.peeringName)')
Haz los cambios siguientes:
- PRIVATE_CLUSTER_NAME: el nombre del clúster de GKE privado.
- REGION: la región del clúster de GKE. En este tutorial, usa
us-central1
para la región, la misma que usaste para las redes de VPC.
Habilita la exportación de rutas personalizadas para anunciar la red del grupo privado al 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
Sustituye GKE_CLUSTER_VPC_NAME por el nombre de tu red VPC para conectarte al plano de control del clúster de GKE.
Para obtener más información sobre las rutas personalizadas, consulta el artículo Importar y exportar rutas personalizadas.
Crear un grupo privado de Cloud Build
En esta sección, creará el grupo privado de Cloud Build.
En Cloud Shell, asigna un intervalo de direcciones IP con nombre en la red de VPC PRIVATE_POOL_PEERING_VPC_NAMEpara 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
Haz los cambios siguientes:
- RESERVED_RANGE_NAME: el nombre del intervalo de direcciones IP privadas que aloja el grupo privado de Cloud Build.
- PRIVATE_POOL_NETWORK: la primera dirección IP de
RESERVED_RANGE_NAME. En este tutorial, puedes usar
192.168.0.0
. - PRIVATE_POOL_PREFIX: el prefijo de
RESERVED_RANGE_NAME. Cada grupo privado que se cree usará
/24
de este intervalo. En este tutorial, puedes usar20
, que te permite crear hasta dieciséis grupos. - PRIVATE_POOL_PEERING_VPC_NAME: el nombre de tu red de VPC con la que se emparejará la red del grupo privado de Cloud Build.
- El intervalo de direcciones IP es
global
porque, cuando--purpose
esVPC_PEERING
, el intervalo 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
Haz los cambios siguientes:
- RESERVED_RANGE_NAME: el nombre del intervalo de direcciones IP privadas que aloja el grupo privado de Cloud Build.
- PRIVATE_POOL_PEERING_VPC_NAME: el nombre de tu red de VPC con la que se emparejará la red del grupo privado de Cloud Build.
Habilita la exportación de rutas personalizadas para anunciar la red del plano de control del clúster de GKE al 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
Sustituye PRIVATE_POOL_PEERING_VPC_NAME por el nombre de tu red de VPC con la que se emparejará la red del grupo privado de Cloud Build.
Crea un grupo privado de Cloud Build emparejado 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
Haz los cambios siguientes:
- PRIVATE_POOL_NAME: nombre del grupo privado de Cloud Build.
- REGION: la región del clúster de GKE. En este tutorial, usa
us-central1
para la región, la misma que usaste para las redes de VPC.
Ya has creado un grupo privado de Cloud Build y lo has emparejado con la red de VPC de tu proyecto.
Crear una conexión Cloud VPN entre tus dos redes de VPC
En tu proyecto, ahora tienes una red de VPC emparejada con el grupo privado de Cloud Build y una segunda red de VPC emparejada con el clúster privado de GKE.
En esta sección, crearás una conexión 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 pasarelas de VPN de alta disponibilidad que se conecten entre sí. Para crear estas pasarelas, sigue las instrucciones que se indican en el artículo sobre cómo crear dos pasarelas de VPN de alta disponibilidad totalmente configuradas que se conecten entre sí. La configuración se completa después de crear las sesiones de BGP. Mientras sigues 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 has creado para anunciar las rutas a la red de VPC del grupo privado y a la red de VPC 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
Donde los siguientes valores son los mismos nombres que usó cuando creó las dos puertas de enlace de VPN de alta disponibilidad:
- ROUTER_NAME_1
- PEER_NAME_GW1_IF0
- PEER_NAME_GW1_IF1
- ROUTER_NAME_2
- PEER_NAME_GW2_IF0
- PEER_NAME_GW2_IF1
Habilitar el acceso de Cloud Build al plano de control del clúster de GKE
Ahora que tienes una conexión 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, añade el intervalo 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
Haz los cambios siguientes:
- PRIVATE_CLUSTER_NAME: el nombre del clúster de GKE privado.
- REGION: la región del clúster de GKE. En este tutorial, usa
us-central1
para la región, la misma que usaste para las redes de VPC. - PRIVATE_POOL_NETWORK: la primera dirección IP de
RESERVED_RANGE_NAME. En este tutorial, puedes usar
192.168.0.0
. - PRIVATE_POOL_PREFIX: el prefijo de
RESERVED_RANGE_NAME. Cada grupo privado que se cree usará
/24
de este intervalo. En este tutorial, 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.
Verificar la solución
En esta sección, comprobarás que la solución funciona ejecutando el comando
kubectl get nodes
en un paso de compilación que se ejecuta en el grupo privado.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
Haz los cambios siguientes:
- REGION: la región del clúster de GKE. En este tutorial, usa
us-central1
para la región, la misma que usaste para las redes de VPC. - PRIVATE_CLUSTER_NAME: el nombre del clúster de GKE privado.
- PRIVATE_POOL_NAME: nombre del grupo privado de Cloud Build.
- REGION: la región del clúster de GKE. En este tutorial, usa
Inicia la tarea de compilación:
gcloud builds submit --config=cloudbuild.yaml
Verifica que la salida sea la lista de nodos del clúster de GKE. El registro de compilación que se muestra en la consola incluye una tabla similar a esta:
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
Ahora has verificado que los trabajadores del grupo privado pueden acceder al clúster de GKE. Este acceso te permite usar Cloud Build para desplegar tu aplicación en este clúster privado de GKE.
Solución de problemas
Si tienes problemas con este tutorial, consulta los siguientes documentos:
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.
Eliminar 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.
Eliminar los recursos concretos
En Cloud Shell, elimina el clúster de GKE:
gcloud container clusters delete PRIVATE_CLUSTER_NAME \ --region=REGION \ --async
Cuando ejecutes este comando, el emparejamiento de redes de VPC se eliminará automáticamente.
Elimina el grupo privado de Cloud Build:
gcloud builds worker-pools delete PRIVATE_POOL_NAME \ --region=REGION
Elimina 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
Elimina el intervalo de direcciones IP con nombre que se usa en el grupo privado:
gcloud compute addresses delete RESERVED_RANGE_NAME \ --global
Elimina los cuatro túneles VPN. Usa los mismos nombres que especificaste en Crear 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
Elimina los dos Cloud Routers. Usa los mismos nombres que especificaste en Crear routers de Cloud Router.
gcloud compute routers delete \ ROUTER_NAME_1 \ ROUTER_NAME_2 \ --region=REGION
Elimina las dos pasarelas VPN. Use los mismos nombres que especificó en la sección Crear las pasarelas de VPN de alta disponibilidad.
gcloud compute vpn-gateways delete \ GW_NAME_1 \ GW_NAME_2 \ --region=REGION
Elimina 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
Elimina 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
Siguientes pasos
- Consulta cómo ejecutar compilaciones en un grupo privado.
- Ejecuta un proxy en el clúster privado de GKE que tenga acceso al plano de control.
- Consulta cómo desplegar en GKE desde Cloud Build.
- Prueba otras Google Cloud funciones por tu cuenta. Echa un vistazo a nuestros tutoriales.