En este tutorial se muestra cómo usar Google Kubernetes Engine (GKE) para exponer tu aplicación web en Internet con una dirección IP externa estática y cómo configurar un nombre de dominio para que dirija a tu aplicación.
En este tutorial se da por hecho que tienes un nombre de dominio registrado, como example.com
.
Objetivos
Este tutorial muestra los siguientes pasos:
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
Sigue estos pasos para habilitar la API de Kubernetes Engine:- Ve a la página de Kubernetes Engine en la Google Cloud consola.
- Crea o selecciona un proyecto.
- Espera a que la API y los servicios relacionados se habiliten. Este proceso puede tardar varios minutos.
-
Verify that billing is enabled for your Google Cloud project.
Instala las siguientes herramientas de línea de comandos utilizadas en este tutorial:
-
gcloud
se usa para crear y eliminar clústeres de Kubernetes Engine.gcloud
se incluye en la CLI degcloud
. -
kubectl
se usa para gestionar Kubernetes, el sistema de orquestación de clústeres que utiliza Kubernetes Engine. Puedes instalarkubectl
congcloud
:gcloud components install kubectl
Clona el código de ejemplo de GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
cd kubernetes-engine-samples/quickstarts/hello-app/manifests
Configurar los valores predeterminados de la herramienta de línea de comandos gcloud
Para ahorrar tiempo al escribir el ID de proyecto y las opciones de zona de Compute Engine en la herramienta de línea de comandos gcloud
, puedes definir los valores predeterminados:
gcloud config set project project-id gcloud config set compute/zone compute-zone
Crear un clúster
Para crear un clúster, sigue estos pasos:
gcloud container clusters create-auto domain-test
Desplegar una aplicación web
El siguiente manifiesto describe un Deployment que ejecuta una imagen de contenedor de una aplicación web de ejemplo:
Crea el despliegue:
kubectl apply -f helloweb-deployment.yaml
Exponer tu aplicación
Puedes exponer tu aplicación en GKE con cualquiera de los siguientes métodos:
Usa un servicio, que crea un balanceador de carga de red de paso a través externo que funciona con direcciones IP regionales.
Usa un Ingress, que crea un balanceador de carga de aplicación y admite direcciones IP globales.
Para obtener más información sobre las ventajas y desventajas de cada método, consulta el artículo Configurar un Application Load Balancer externo con Ingress.
Usar un servicio
Para asegurarte de que tu aplicación tenga una dirección IP externa estática, debes reservar una dirección IP estática.
Si decides exponer tu aplicación mediante un servicio, debes crear una dirección IP regional. Las direcciones IP globales solo funcionan con el tipo de recurso Ingress, tal como se explica en la siguiente sección.
Para usar un servicio, crea una dirección IP estática llamada helloweb-ip
en la región us-central1
:
gcloud
gcloud compute addresses create helloweb-ip --region us-central1
Busca la dirección IP estática que has creado:
gcloud compute addresses describe helloweb-ip --region us-central1
El resultado debería ser similar al siguiente:
...
address: 203.0.113.32
...
Config Connector
Nota: Para este paso se necesita Config Connector. Sigue las instrucciones de instalación para instalar Config Connector en tu clúster.
Guarda el archivo de manifiesto como compute-address-regional.yaml
.
Aplica el manifiesto a tu clúster:
kubectl apply -f compute-address-regional.yaml
Busca la dirección IP estática que has creado:
kubectl get computeaddress helloweb-ip -o jsonpath='{.spec.address}'
El siguiente manifiesto describe un Service de tipo LoadBalancer, que crea un balanceador de carga de red de paso a través externo para exponer pods con una dirección IP externa.
Sustituye YOUR.IP.ADDRESS.HERE
por la dirección IP estática:
Crea el servicio:
kubectl apply -f helloweb-service-static-ip.yaml
Consulta la dirección IP reservada asociada al balanceador de carga:
kubectl get service
El resultado debería ser similar al siguiente:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
helloweb 10.31.254.176 203.0.113.32 80:30690/TCP 54s
Usar un Ingress
Si decides exponer tu aplicación mediante un Ingress, debes reservar una dirección IP estática global.
Usa la anotación kubernetes.io/ingress.global-static-ip-name
para especificar una dirección IP global.
Para exponer tu aplicación a clientes y servicios de una región, usa una dirección IP interna estática regional al desplegar un recurso de entrada interno para GKE junto con las anotaciones necesarias.
Para saber cómo usar Ingress para exponer tus aplicaciones a Internet, consulta el artículo Configurar un balanceador de carga de aplicación externo con Ingress.
Para crear una dirección IP estática global llamada helloweb-ip
, sigue estos pasos:
gcloud
gcloud compute addresses create helloweb-ip --global
Busca la dirección IP estática que has creado:
gcloud compute addresses describe helloweb-ip --global
El resultado debería ser similar al siguiente:
...
address: 203.0.113.32
...
Config Connector
Nota: Para este paso se necesita Config Connector. Sigue las instrucciones de instalación para instalar Config Connector en tu clúster.
Guarda el archivo de manifiesto como compute-address-global.yaml
.
Aplica el manifiesto a tu clúster:
kubectl apply -f compute-address-global.yaml
El siguiente manifiesto describe un Ingress que expone una aplicación web en una IP estática con dos recursos:
Service
contype:NodePort
- Un
Ingress
configurado con el nombre del servicio y la anotación de IP estática
La anotación kubernetes.io/ingress.global-static-ip-name
especifica el nombre del recurso de dirección IP global que se va a asociar al balanceador de carga.
Aplica el manifiesto a tu clúster:
kubectl apply -f helloweb-ingress-static-ip.yaml
Consulta la dirección IP asociada al balanceador de carga:
kubectl get ingress
La salida es similar a la siguiente:
NAME HOSTS ADDRESS PORTS AGE
helloweb * 203.0.113.32 80 4m
Ver tu dirección IP estática reservada
Para verificar que el balanceador de carga está configurado correctamente, puedes usar un navegador web para visitar la dirección IP o usar curl
:
curl http://203.0.113.32/
El resultado debería ser similar al siguiente:
Hello, world!
Hostname: helloweb-3766687455-8lvqv
Configurar los registros de nombre de dominio
Para que los navegadores que consulten tu nombre de dominio, como example.com
, o tu nombre de subdominio, como blog.example.com
, dirijan a la dirección IP estática que has reservado, debes actualizar los registros DNS (servidor de nombres de dominio) de tu nombre de dominio.
Debes crear un registro DNS de tipo A (dirección) para tu nombre de dominio o subdominio y configurar su valor con la dirección IP reservada.
Los registros DNS de tu dominio los gestiona tu servidor de nombres. Tu servidor de nombres puede ser el "registrador" en el que registraste tu dominio, un servicio de DNS como Cloud DNS u otro proveedor externo.
Si tu servidor de nombres es Cloud DNS: sigue la guía de inicio rápido de Cloud DNS para configurar el registro A de DNS de tu nombre de dominio con la dirección IP reservada de tu aplicación.
Si tu servidor de nombres es de otro proveedor: consulta la documentación de tu proveedor de DNS sobre cómo configurar registros A de DNS para configurar tu nombre de dominio. Si prefieres usar Cloud DNS, consulta el artículo Migrar a Cloud DNS.
Visita el nombre de tu dominio
Para verificar que los registros DNS A de tu nombre de dominio se resuelven en la dirección IP que has reservado, visita tu nombre de dominio.
Para hacer una consulta DNS del registro A de tu nombre de dominio, ejecuta el comando host
:
host example.com
El resultado debería ser similar al siguiente:
example.com has address 203.0.113.32
Ahora puedes dirigir tu navegador web a tu nombre de dominio y visitar tu sitio web.
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.
Elimina el servicio y el objeto Ingress:
kubectl delete ingress,service -l app=hello
Libera la IP estática reservada. Una vez eliminado el balanceador de carga, se facturará la dirección IP no utilizada pero reservada según los precios por dirección IP no utilizada.
Si has usado un Servicio:
gcloud compute addresses delete helloweb-ip --region us-central1
Si has usado un Ingress:
gcloud compute addresses delete helloweb-ip --global
Elimina la aplicación de muestra:
kubectl delete -f helloweb-deployment.yaml
Elimina el clúster:
gcloud container clusters delete domain-test
Siguientes pasos
- Consulta otros tutoriales de Kubernetes Engine.
- Consulta arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Centro de arquitectura de Cloud.