Configura nombres de dominio con direcciones IP estáticas

En este instructivo, se demuestra cómo exponer tu aplicación web a la Internet en una dirección IP estática externa y configurar los registros DNS de tu nombre de dominio para que apunten a tu aplicación.

En este instructivo se da por sentado que tienes un nombre de dominio registrado (como example.com). Puedes registrar un nombre de dominio a través de Google Domains o algún otro registrador de dominios de tu elección si no tienes uno.

Objetivos

En este instructivo se ilustran los siguientes pasos:

  • Reservar una dirección IP externa estática para tu aplicación
  • Configurar los recursos de Service o Ingress para usar la IP estática
  • Actualizar los registros del DNS de tu nombre de dominio para que apunten a tu aplicación

Antes de comenzar

Sigue estos pasos para habilitar la API de Kubernetes Engine:
  1. Visita la página de Kubernetes Engine en Google Cloud Platform Console.
  2. Crea o selecciona un proyecto.
  3. Espera a que la API y los servicios relacionados se habiliten. Esto puede tardar varios minutos.
  4. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

Instala las siguientes herramientas de línea de comandos que se usan en este instructivo:

  • gcloud se usa para crear y borrar clústeres de Kubernetes Engine. gcloud está incluida en el SDK de Google Cloud.
  • kubectl se usa para administrar Kubernetes, el sistema de organización de clústeres que usa Kubernetes Engine. Puedes instalar kubectl con gcloud:
    gcloud components install kubectl

Establece valores predeterminados para la herramienta de línea de comandos de gcloud

Para ahorrar tiempo cuando escribas las opciones de tu ID del proyecto y zona de Compute Engine en la herramienta de línea de comandos de gcloud, puedes establecer los valores predeterminados de la siguiente manera:
gcloud config set project [PROJECT_ID]
gcloud config set compute/zone us-central1-b

Crea un clúster de GKE

Crea un clúster de contenedor denominado domain-test para implementar tu aplicación web:

gcloud container clusters create domain-test

Paso 1: implementa tu aplicación web

Para implementar la aplicación web de muestra, guarda el siguiente manifiesto como helloweb-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
      tier: web
  template:
    metadata:
      labels:
        app: hello
        tier: web
    spec:
      containers:
      - name: hello-app
        image: gcr.io/google-samples/hello-app:1.0
        ports:
        - containerPort: 8080

Luego, ejecuta el siguiente comando para crear la implementación:

kubectl apply -f helloweb-deployment.yaml

Paso 2: expón tu aplicación

Puedes exponer tu aplicación en GKE con uno de estos métodos:

Para aprender más sobre las ventajas y desventajas de cada método, consulta el instructivo del balanceo de cargas HTTP.

Paso 2(a): usa un Service

Para garantizar que tu aplicación tiene 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.

Ejecuta este comando para crear una dirección IP estática denominada helloweb-ip en la región us-central1:

gcloud compute addresses create helloweb-ip --region us-central1

Para encontrar la dirección IP estática que creaste, ejecuta el siguiente comando:

gcloud compute addresses describe helloweb-ip --region us-central1
Resultado:
address: 203.0.113.32
...

Usa el siguiente manifiesto para crear un archivo de manifiesto llamado helloweb- service.yaml que describe un Service. Reemplaza YOUR.IP.ADDRESS.HERE por la dirección IP estática:

apiVersion: v1
kind: Service
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    app: hello
    tier: web
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer
  loadBalancerIP: "YOUR.IP.ADDRESS.HERE"

Luego, crea el Service:

kubectl apply -f helloweb-service.yaml

Para ver la dirección IP de reserva asociada con el balanceador de cargas, ejecuta este comando:

kubectl get service
Resultado:
NAME               CLUSTER-IP      EXTERNAL-IP      PORT(S)          AGE
helloweb           10.31.254.176   203.0.113.32     80:30690/TCP     54s

Paso 2(b): usa un Ingress

Si decides exponer tu aplicación con un Ingress, que crea un balanceador de cargas HTTP(S), debes reservar una dirección IP estática global. Las direcciones IP regionales no funcionan con Ingress.

Si quieres obtener más información sobre cómo usar Ingress para exponer tus aplicaciones a la Internet, consulta el instructivo Balanceo de cargas HTTP con Ingress.

Ejecuta este comando para crear una dirección IP estática global llamada helloweb-ip:

gcloud compute addresses create helloweb-ip --global

Para encontrar la dirección IP estática que creaste, ejecuta el siguiente comando:

gcloud compute addresses describe helloweb-ip --global
Resultado:
address: 203.0.113.32
...

Para exponer una aplicación web en una IP estática con Ingress, necesitas implementar dos recursos:

  1. Un Service con type:NodePort
  2. Un Ingress configurado con el nombre de servicio y la anotación de IP estática

Usa el siguiente manifiesto para crear un archivo de manifiesto llamado helloweb-ingress.yaml que describa estos dos recursos:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: helloweb
  annotations:
    kubernetes.io/ingress.global-static-ip-name: helloweb-ip
  labels:
    app: hello
spec:
  backend:
    serviceName: helloweb-backend
    servicePort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: helloweb-backend
  labels:
    app: hello
spec:
  type: NodePort
  selector:
    app: hello
    tier: web
  ports:
  - port: 8080
    targetPort: 8080

La anotación kubernetes.io/ingress.global-static-ip-name especifica el nombre del recurso de la dirección IP global asociado con el balanceador de cargas HTTP(S).

Aplica el archivo de manifiesto helloweb-ingress.yaml al clúster:

kubectl apply -f helloweb-ingress.yaml
Resultado:
ingress "helloweb" created
service "helloweb-backend" created

Para ver la dirección IP de reserva asociada con el balanceador de cargas, ejecuta este comando:

kubectl get ingress
Resultado:
NAME       HOSTS     ADDRESS          PORTS     AGE
helloweb   *         203.0.113.32     80        4m

Paso 3: visita tu dirección IP estática reservada

Si quieres verificar que el balanceador de cargas se configuró de forma correcta, puedes usar un navegador web para visitar la dirección IP o usar curl:

curl http://203.0.113.32
Resultado:
Hello, world!
Hostname: helloweb-3766687455-8lvqv

Paso 4: configura los registros de tu nombre de dominio

Para que los navegadores que consultan tu nombre de dominio (como example.com) o tu nombre de subdominio (como blog.example.com) apunten a la dirección IP estática que reservaste, debes actualizar los registros del DNS (servidor de nombre de dominio) de tu nombre de dominio.

Debes crear un registro del DNS de tipo A (Address) para tu nombre de dominio o subdominio y que se configure su valor con la dirección IP reservada.

Tu servidor de nombres administra los registros del DNS de tu dominio. Tu servidor de nombres puede estar donde registraste tu dominio (en otras palabras, tu “registrador”) o puede ser un servicio de DNS, como Google Cloud DNS o algún otro proveedor de terceros.

  • Si tu servidor de nombres es Google Cloud DNS: sigue la guía de inicio rápido de Cloud DNS para configurar un registro DNS A 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 tu servicio de DNS sobre cómo establecer registros DNS A para configurar tu nombre de dominio. Si, en su lugar, decides usar Google Cloud DNS, consulta Migra a Cloud DNS.

Paso 5: 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.

Para hacer una consulta de DNS al registro A de tu nombre de dominio, ejecuta el comando host:

host example.com
Resultado:
example.com has address 203.0.113.32

A partir de ahora, ya puedes apuntar tu navegador web a tu nombre de dominio y visitar tu sitio web.

Limpieza

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo:

  1. Borra los recursos de balanceo de cargas:

    kubectl delete ingress,service -l app=hello

  2. Libera la IP estática reservada. Después de borrar el balanceador de cargas, la dirección IP reservada sin usar ya no es gratuita y se cobra según el precio de dirección IP no usada. Ejecuta los siguientes comandos para liberar el recurso de IP estática:

    • Si seguiste el Paso 2(a), ejecuta este comando:

      gcloud compute addresses delete helloweb-ip --region us-central1
    • Si seguiste el Paso 2(b), ejecuta este comando:

      gcloud compute addresses delete helloweb-ip --global
  3. Borra la aplicación de muestra:

    kubectl delete -f helloweb-deployment.yaml

  4. Espera a que se borre el balanceador de cargas. Para eso, observa el resultado del siguiente comando (el resultado no debería mostrar una regla de reenvío con “helloweb” en su nombre):

    gcloud compute forwarding-rules list

  5. Borra el clúster de contenedor:

    gcloud container clusters delete domain-test

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Instructivos de Kubernetes Engine