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
.
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 balanceador de carga de aplicaciones 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.