En este instructivo, se muestra cómo usar Google Kubernetes Engine (GKE) para exponer tu aplicación web a Internet en una dirección IP externa estática y configurar un nombre de dominio para que apunte a tu aplicación.
En este instructivo, se da por sentado que tienes un nombre de dominio registrado (como example.com
).
Implementa tu aplicación web
En el siguiente manifiesto, se describe una implementación que ejecuta una imagen de contenedor de aplicación web de muestra:
Crea el Deployment:
kubectl apply -f helloweb-deployment.yaml
Expón tu aplicación
Puedes exponer tu aplicación en GKE con uno de estos métodos:
Usa un Service, que crea un balanceador de cargas de red de paso externo que funciona con direcciones IP regionales.
Usa un Ingress, que crea un balanceador de cargas de aplicaciones y admite direcciones IP globales.
Para obtener más información sobre las ventajas y desventajas de cada método, consulta Configura un balanceador de cargas de aplicaciones externo con Ingress.
Usa un servicio
Para garantizar que tu aplicación tenga una dirección IP pública estática, debes reservar una dirección IP estática.
Si decides exponer tu aplicación con un Service, debes crear una dirección IP regional. Las direcciones IP globales solo funcionan con el tipo de recurso Ingress, como se explica en la siguiente sección.
Para usar un Service, 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 creaste:
gcloud compute addresses describe helloweb-ip --region us-central1
El resultado es similar al siguiente:
...
address: 203.0.113.32
...
Config Connector
Nota: En este paso, se necesita Config Connector. Sigue las instrucciones de instalación para instalar Config Connector en el clúster.
Guarda el manifiesto como compute-address-regional.yaml
:
Aplica el manifiesto al clúster:
kubectl apply -f compute-address-regional.yaml
Busca la dirección IP estática que creaste:
kubectl get computeaddress helloweb-ip -o jsonpath='{.spec.address}'
En el siguiente manifiesto, se describe un Service de tipo LoadBalancer, que crea un balanceador de cargas de red de paso externo para exponer los Pods con una dirección IP externa.
Reemplaza YOUR.IP.ADDRESS.HERE
por la dirección IP estática:
Crea el objeto Service
kubectl apply -f helloweb-service-static-ip.yaml
Visualiza la dirección IP reservada asociada con el balanceador de cargas:
kubectl get service
El resultado es similar al siguiente:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
helloweb 10.31.254.176 203.0.113.32 80:30690/TCP 54s
Usa un Ingress
Si decides exponer tu aplicación con 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.
Si deseas exponer tu aplicación a los clientes y servicios de una región, usa una dirección IP interna estática regional mientras implementas un recurso de entrada interno para GKE junto con las anotaciones requeridas.
Si deseas obtener información sobre cómo usar Ingress para exponer tus aplicaciones a la Internet, consulta Configura un balanceador de cargas de aplicaciones externo con Ingress.
Para crear una dirección IP estática global llamada helloweb-ip
, ejecuta el siguiente comando:
gcloud
gcloud compute addresses create helloweb-ip --global
Busca la dirección IP estática que creaste:
gcloud compute addresses describe helloweb-ip --global
El resultado es similar al siguiente:
...
address: 203.0.113.32
...
Config Connector
Nota: En este paso, se necesita Config Connector. Sigue las instrucciones de instalación para instalar Config Connector en el clúster.
Guarda el manifiesto como compute-address-global.yaml
:
Aplica el manifiesto al clúster:
kubectl apply -f compute-address-global.yaml
En el siguiente manifiesto, se describe un Ingress que expone una aplicación web en una IP estática con dos recursos:
- Un
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 asociará con el balanceador de cargas de HTTP(S).
Aplica el manifiesto al clúster:
kubectl apply -f helloweb-ingress-static-ip.yaml
Visualiza la dirección IP asociada con el balanceador de cargas:
kubectl get ingress
El resultado es similar al que se muestra a continuación:
NAME HOSTS ADDRESS PORTS AGE
helloweb * 203.0.113.32 80 4m
Visualiza la dirección IP estática reservada
Para verificar que el balanceador de cargas esté configurado de forma correcta, puedes usar un navegador web para visitar la dirección IP o usar curl
:
curl http://203.0.113.32/
El resultado es similar al siguiente:
Hello, world!
Hostname: helloweb-3766687455-8lvqv
Configurar tus registros de nombre de dominio
Para que los navegadores que consultan tu nombre de dominio (como example.com
) o el nombre del subdominio (como blog.example.com
) apunten a la dirección IP estática que reservaste, 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.
La administración de los registros DNS de tu dominio se realiza a través de tu servidor de nombres Tu servidor de nombres puede ser el “registrador” donde registraste tu dominio, un servicio de DNS, como Cloud DNS, o algún otro proveedor de terceros.
Si tu servidor de nombres es Cloud DNS: Sigue la Guía de inicio rápido de Cloud DNS para configurar un registro A de DNS en tu nombre de dominio con la dirección IP reservada de tu aplicación.
Si tu servidor de nombres es otro proveedor: consulta la documentación de tus proveedores de DNS para configurar registros A de DNS a fin de configurar tu nombre de dominio. Si decides usar Google Cloud DNS en su lugar, consulta Migra a Cloud DNS.
Visita tu nombre de dominio
Para verificar que los registros DNS A de tu nombre de dominio se resuelven en la dirección IP que reservaste, visita tu nombre de dominio.
Si deseas realizar una consulta de DNS para el registro A del nombre de dominio, ejecuta el comando host
:
host example.com
El resultado es similar al siguiente:
example.com has address 203.0.113.32
Ahora puedes apuntar tu navegador web a tu nombre de dominio y visitar tu sitio web.