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
).
Objetivos
En este instructivo se ilustran los siguientes pasos:
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
Sigue los pasos que se indican a continuación para habilitar la API de Kubernetes Engine:- Consulta la página Kubernetes Engine en la consola de Google Cloud.
- Crea o selecciona un proyecto.
- Espera a que la API y los servicios relacionados se habiliten. Esto puede tardar varios minutos.
-
Make sure that billing is enabled for your Google Cloud project.
Instala las siguientes herramientas de línea de comandos de este instructivo:
-
gcloud
se usa para crear y borrar clústeres de Kubernetes Engine.gcloud
se incluye en la CLI degcloud
. -
kubectl
se usa para administrar Kubernetes, el sistema de organización de clústeres que emplea Kubernetes Engine. Puedes instalarkubectl
congcloud
:gcloud components install kubectl
Clona el código de ejemplo desde GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
cd kubernetes-engine-samples/quickstarts/hello-app/manifests
Establece valores predeterminados para la herramienta de línea de comandos de gcloud
Para ahorrar tiempo cuando escribes las opciones del ID del proyecto y la zona de Compute Engine en la herramienta de línea de comandos de gcloud
, puedes establecer valores predeterminados:gcloud config set project project-id gcloud config set compute/zone compute-zone
Crea un clúster
Crea un clúster:
gcloud container clusters create-auto domain-test
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.
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 Service y el Ingress:
kubectl delete ingress,service -l app=hello
Libera la IP estática reservada. Una vez que se borra el balanceador de cargas, la dirección IP reservada, pero sin usar, se factura por precio de direcciones IP sin usar.
Si usaste un Service:
gcloud compute addresses delete helloweb-ip --region us-central1
Si usaste un Ingress:
gcloud compute addresses delete helloweb-ip --global
Borra la aplicación de muestra:
kubectl delete -f helloweb-deployment.yaml
Borra el clúster:
gcloud container clusters delete domain-test
¿Qué sigue?
- Explora otros instructivos de Kubernetes Engine.
- Explora arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.