Clústeres Kubernetes de varias regiones seguros y resistentes con IBM Cloud Internet Services

Esta guía de aprendizaje puede incurrir en costes. Utilice Estimador de costes para generar una estimación del coste basada en el uso previsto.

Los usuarios tienen menos probabilidades de sufrir un tiempo de inactividad cuando una aplicación está diseñada pensando en su resistencia. Si implementa una solución con Kubernetes Service, se beneficia de las prestaciones incorporadas, como el equilibrio de carga y el aislamiento y el aumento de la resistencia frente a posibles anomalías con hosts, redes o apps. Al crear muchos clústeres y si se produce una interrupción en uno de ellos, los usuarios pueden seguir accediendo a una aplicación que también esté desplegada en otro clúster. Con muchos clusters en distintas ubicaciones, los usuarios también pueden acceder al cluster más cercano y reducir la latencia de la red. Para una mayor capacidad de recuperación, también tiene la opción de seleccionar los clústeres multizona, lo que significa que sus nodos se despliegan en muchas zonas dentro de una ubicación.

Este tutorial destaca cómo Cloud Internet Services (CIS), una plataforma uniforme para configurar y gestionar el Sistema de Nombres de Dominio (DNS), el Equilibrio de Carga Global (GLB), el Cortafuegos de Aplicaciones Web (WAF) y la protección contra la Denegación de Servicio Distribuida ( DDoS ) para aplicaciones de Internet, puede integrarse con clústeres Kubernetes para dar soporte a este escenario y ofrecer una solución segura y resistente en muchas ubicaciones.

Objetivos

  • Despliegue una aplicación en muchos clústeres Kubernetes en diferentes ubicaciones.
  • Distribuya el tráfico entre varios clústeres con un equilibrador de carga global.
  • Direccionamiento de los usuarios al clúster más cercano.
  • Protección de la aplicación frente a amenazas de seguridad.
  • Aumento del rendimiento de la aplicación con memoria caché.

de arquitectura del

  1. El desarrollador crea una imagen Docker para la aplicación.
  2. La imagen se envía a Container Registry.
  3. La aplicación se despliega en clústeres de Kubernetes en Dallas y Londres.
  4. Los usuarios finales acceden a la aplicación.
  5. Se configura IBM Cloud Internet Services para que intercepte las solicitudes a la aplicación y para que distribuya la carga entre los clústeres. También se habilita la protección DDoS y el cortafuegos de aplicaciones web para proteger las aplicaciones frente a amenazas comunes. Los activos como imágenes y archivos CSS se pueden colocar en la memoria caché.

Antes de empezar

Esta guía de aprendizaje requiere:

  • CLI de IBM Cloud,
    • plugin de IBM Cloud Kubernetes Service (kubernetes-service),
  • kubectl para interactuar con los clústeres de Kubernetes,

Encontrará instrucciones para descargar e instalar estas herramientas para su entorno operativo en la guía Introducción a los tutoriales de soluciones.

Además:

Despliegue de una aplicación en una ubicación

Este tutorial despliega una aplicación Kubernetes en clusters situados en varias ubicaciones. Comenzará con una ubicación, Dallas, y luego repetirá estos pasos para Londres.

Creación de un clúster de Kubernetes

Un cluster mínimo con una (1) zona, un (1) nodo trabajador es suficiente para este tutorial.

Al crear el siguiente clúster de Kubernetes:

  1. Establezca el Nombre de clúster en my-us-cluster.

  2. Ubíquelo en América del Norte y Dallas

  3. Abra los clústeres de Kubernetes y haga clic en Crear clúster.

  4. Cree un clúster a su elección de Infraestructura.

    • Los pasos siguientes son si selecciona VPC para Kubernetes en la infraestructura de VPC. Es necesario crear una VPC y una subred antes de crear el clúster de Kubernetes. Consulte la documentación Creación de clústeres de VPC para obtener más detalles.

      1. Pulse Crear VPC.
      2. En la sección Ubicación, seleccione una Geografía y una Región, por ejemplo, North America y Dallas.
      3. Introduzca un Nombre de su VPC, seleccione un Grupo de recursos y, opcionalmente, añada Etiquetas para organizar sus recursos.
      4. Deseleccione Permitir SSH y Permitir ping desde Grupo de seguridad predeterminado.
      5. Desmarque Crear subred en cada zona.
      6. Pulse Crear.
      7. En Zonas de trabajo y subredes, desmarque las dos zonas para las que no se ha creado la subred.
      8. Establezca el Nodos trabajadores por zona en 1 y haga clic en Cambiar sabor para explorar y cambiar al sabor de nodo trabajador de su elección.
      9. En Ingress, habilite Gestión de secretos de Ingress y seleccione la instancia de Secrets Manager existente.
      10. Especifique un Nombre de clúster y seleccione el mismo Grupo de recursos que ha utilizado para la VPC.
      11. El registro o la supervisión no son necesarios en esta guía de aprendizaje, inhabilite estas opciones y pulse Crear.
      12. Mientras espera a que el clúster pase a estar activo, conecte una pasarela pública a la VPC. Vaya a Nubes privadas virtuales.
      13. Pulse el nombre de la VPC utilizada por el clúster y desplácese hacia abajo hasta la sección de subredes.
      14. Pulse el nombre de la subred creada anteriormente y, en la sección Public Gateway, pulse Desconectado para cambiar el estado a Conectar.
    • Los pasos siguientes son si selecciona Clásico para Kubernetes en la infraestructura clásica. Consulte la documentación Creación de un clúster clásico estándar para obtener más detalles.

      1. En la sección Ubicación, seleccione Geografía, Disponibilidad multizona y Metro, por ejemplo North America y Dallas.
      2. En Zonas de trabajo y VLAN, desmarque todas las zonas excepto una.
      3. Establezca el Nodos trabajadores por zona en 1 y haga clic en Cambiar sabor para explorar y cambiar al sabor de nodo trabajador de su elección.
      4. En Punto final de servicio maestro, seleccione Puntos finales privados y públicos.
      5. En Ingress, habilite Gestión de secretos de Ingress y seleccione la instancia de Secrets Manager existente.
      6. Especifique un Nombre de clúster y seleccione el Grupo de recursos bajo el que crear estos recursos.
      7. El registro o la supervisión no son necesarios en esta guía de aprendizaje, inhabilite estas opciones y pulse Crear.

Mientras el clúster se está preparando, preparará la aplicación.

Despliegue de la aplicación en el clúster de Kubernetes

El clúster debe estar preparado. Puede comprobar su estado en la consola de Kubernetes Service.

  1. Obtenga acceso a su clúster tal como se describe en el separador Acceso del clúster. Similar a:

    MYCLUSTER=my-us-cluster
    ibmcloud ks cluster config --cluster $MYCLUSTER
    
  2. Cree el despliegue utilizando una imagen preconstruida de la aplicación. El código fuente de la aplicación se puede encontrar en este repositorioGitHub.

    kubectl create deploy hello-world-deployment --image=icr.io/solution-tutorials/tutorial-scalable-webapp-kubernetes
    

    Salida de ejemplo: deployment "hello-world-deployment" created.

  3. Consiga que se pueda acceder a la aplicación dentro del clúster creando un servicio:

    kubectl expose deployment/hello-world-deployment --type=ClusterIP --port=80 --name=hello-world-service --target-port=3000
    

    Devuelve un mensaje parecido al siguiente: service "hello-world-service" exposed. Para ver los servicios:

    kubectl get services
    
  4. Ejecute la aplicación en el clúster con dos réplicas:

    kubectl scale deployment hello-world-deployment --replicas=2
    
  5. Puede comprobar el estado del despliegue con el mandato siguiente:

    kubectl get pods
    

Obtención del subdominio de Ingress asignado al clúster

Cuando se crea un clúster Kubernetes, se le asigna un subdominio de entrada (por ejemplo, my-us-cluster.us-south.containers.appdomain.cloud ) y una dirección IP pública del Application Load Balancer.

  1. Recupere el subdominio Ingress del clúster:
    ibmcloud ks cluster get --cluster $MYCLUSTER
    
    Busque el valor de Ingress Subdomain.
  2. Anote esta información para un paso posterior.

En esta guía de aprendizaje se utiliza el subdominio Ingress para configurar el equilibrador de carga global. También podría sustituir el subdominio Ingress por el equilibrador de carga de aplicaciones (ALB) público del clúster. Un <IngressSubdomain> tiene el siguiente aspecto my-us-cluster-e7f2ca73139645ddf61a8702003a483a-0000.us-south.containers.appdomain.cloud

Configuración de Ingress para el subdominio de DNS

Será necesario tener su propio nombre de dominio DNS y se creará un subdominio de balanceador de carga global en la siguiente tarea: <glb_name>.<your_domain_name>. Algo como hello-world-service.example.com <glb_name> = hello-world-service y <your_domain_name> = example.com

  1. Cree el archivo glb-ingress.yaml y sustituya los marcadores de posición por sus respectivos valores:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
     name: <glb-name>
     annotations:
       spec.ingressClassName: "public-iks-k8s-nginx"
    spec:
     rules:
     - host: <glb-name>.<your_domain_name>
       http:
         paths:
         - path: /
           pathType: Prefix
           backend:
             service:
               name: hello-world-service
               port:
                 number: 80
    
  2. Añada la instancia de Ingress:
    kubectl apply -f glb-ingress.yaml
    
    Puede que pasen unos minutos antes de que Ingress esté disponible tal como indica un valor de la columna DIRECCIÓN del mandato:
    kubectl get ingress
    
  3. Ahora pruebe configurando la cabecera http de Host curl con el nombre de subdominio DNS para alterar temporalmente el valor predeterminado de <IngressSubdomain>:
    curl --header 'Host: <glb_name>.<your_domain_name>' <IngressSubdomain>/hostname
    
    El comando curl sería algo parecido a esto: curl --header 'Host: hello-world-service.ibmom.com' my-us-cluster-e7f2ca73139645ddf61a8702003a483a-0000.us-south.containers.appdomain.cloud/hostname

Y luego a otra ubicación

Repita los pasos anteriores para la ubicación de Londres con las siguientes sustituciones:

Configuración del equilibrio de carga en varias ubicaciones

Ahora la aplicación se está ejecutando en dos clústeres, pero falta un componente para que los usuarios acceden a los clústeres de forma transparente desde un único punto de entrada.

En esta sección, configurará IBM Cloud Internet Services ( CIS ) para distribuir la carga entre los dos clusters. CIS es un servicio integral que proporciona Global Load Balancer (GLB), Caching, Web Application Firewall (WAF) y Page rule para asegurar sus aplicaciones al tiempo que garantiza la fiabilidad y el rendimiento de sus aplicaciones Cloud.

Para configurar un equilibrador de carga global, necesitará:

  • hacer que un dominio personalizado apunte a servidores de nombres de CIS,
  • recuperar el subdominio de Ingress de los clústeres de Kubernetes,
  • configurar comprobaciones de estado para validar la disponibilidad de la aplicación,
  • y definir agrupaciones de origen que apunten a los clústeres.

Registrar un dominio personalizado con IBM Cloud Internet Services

El primer paso consiste en crear una instancia de CIS y hacer que el dominio personalizado apunte a los servidores de nombres de CIS.

  1. Si no posee un dominio, puede comprar uno a un registrador.

  2. Vaya a IBM Cloud Internet Services en el catálogo de IBM Cloud.

  3. Elija un plan, establezca el nombre de servicio y el grupo de recursos y pulse Crear para crear una instancia del servicio.

  4. Cuando se suministre la instancia de servicio, pulse Añadir dominio.

  5. Especifique el nombre de dominio y pulse Siguiente.

  6. La configuración de los registros de DNS es un paso opcional y se puede omitir para esta guía de aprendizaje, haga clic en Siguiente.

  7. Cuando se hayan asignado los servidores de nombres, configure el registrador o el proveedor de nombres de dominio para utilizar los servidores de nombres que se muestran.

  8. En este punto puede hacer clic en Cancelar para volver a la página principal, después de haber configurado su registrador o el proveedor de DNS, se pueden necesitar hasta 24 horas para que los cambios entren en vigor.

    Cuando el estado del dominio en la página Visión general cambia de Pendiente a Activo, puede utilizar el mandato dig <your_domain_name> ns para verificar que los nuevos servidores de nombres han entrado en vigor.

Configuración de comprobaciones de estado para el equilibrador de carga global

Las comprobaciones de estado supervisan las respuestas a las solicitudes HTTP/HTTPS procedentes de agrupaciones de origen en un intervalo establecido. Se utilizan con agrupaciones de origen para determinar si las agrupaciones se siguen ejecutando adecuadamente.

  1. En el panel IBM Cloud Internet Services, utilice el menú de navegación para seleccionar Fiabilidad > Balanceadores de carga globales.

  2. Seleccione el separador Comprobaciones de seguridad y pulse Crear.

    1. Establezca el Nombre en hello-world-service
    2. Establezca el Tipo de supervisor en HTTP.
    3. Establezca el Puerto en 80.
    4. Establezca la Vía de acceso en /.
    5. En Configurar cabeceras de solicitud (opcional), añada el nombre de cabecera: Host y el valor: <glb_name>.<your_domain_name>
    6. Pulse Crear.

    Cuando cree sus propias aplicaciones, puede definir un punto final de estado dedicado, como por ejemplo /heathz, en el que puede informar del estado de la aplicación.

Definición de agrupaciones de origen

Una agrupación es un grupo de servidores de origen al que se direcciona el tráfico de forma inteligente al adjuntarse a un GLB. Con clústeres en el Reino Unido y en Estados Unidos, puede definir agrupaciones basadas en ubicación y configurar CIS de modo que redirija a los usuarios a los clústeres más cercanos en función de la ubicación geográfica de las solicitudes de los clientes.

Una agrupación para el clúster en Dallas

  1. Seleccione el separador Agrupaciones de origen y pulse Crear.
  2. Establezca el nombre en US.
  3. Establezca el Nombre de origen en us-cluster.
  4. Establezca Dirección de origen en el servicio kubernetes <IngressSubdomain> impreso por ibmcloud ks cluster get --cluster $MYCLUSTER para el clúster de EE.UU.
  5. Establezca Comprobación de salud como la creada en la sección anterior.
  6. Configure la región del chequeo en Western North America.
  7. Pulse Guardar.

Una agrupación para el clúster en Londres

  1. Seleccione el separador Agrupaciones de origen y pulse Crear.
  2. Establezca el nombre en UK.
  3. Establezca el Nombre de origen en uk-cluster.
  4. Establezca Dirección de origen en el servicio kubernetes <IngressSubdomain> impreso por ibmcloud ks cluster get --cluster $MYCLUSTER para el clúster del Reino Unido.
  5. Establezca Comprobación de salud como la creada en la sección anterior.
  6. Configure la región del chequeo en Western Europe.
  7. Pulse Guardar.

Creación del equilibrador de carga global

Con las agrupaciones de origen definidas, puede completar la configuración del equilibrador de carga.

  1. Seleccione el separador Equilibradores de carga y pulse Crear.

  2. Especifique un nombre, <glb_name>, en Nombre para el equilibrador de carga global. Este nombre también formará parte del URL de la aplicación universal (http://<glb_name>.<your_domain_name>), independientemente de la ubicación.

  3. En Rutas geográficas, haga clic en Añadir ruta.

    1. Seleccione Predeterminado en el desplegable Región.
    2. Selecciona la piscina US.
    3. Pulse Añadir.

    Repita el proceso para crear lo siguiente:

    Lista de rutas geográficas a crear
    Región Agrupación de origen
    Valor predeterminado EE.UU.
    Europa Occidental Reino Unido
    Europa Oriental Reino Unido
    Asia noreste Reino Unido
    Asia sudeste Reino Unido
    América del Norte occidental EE.UU.
    América del Norte oriental EE.UU.

    Con esta configuración, a los usuarios de Europa y Asia se les redirigirá al clúster de Londres, y a los usuarios de Estados Unidos, al clúster de Dallas. Cuando una solicitud no coincide con ninguna de las rutas definidas, se redirige a la(s) reserva(s) de la región Predeterminada.

  4. Pulse Crear

En esta fase, ha configurado correctamente un equilibrador de carga global con clústeres Kubernetes en varias ubicaciones. Puede acceder al URL de GLB http://<glb_name>.<your_domain_name>/hostname para ver la aplicación. En función de su ubicación, se le redirigiría al clúster más cercano o a un clúster de la agrupación predeterminada si CIS no es capaz de correlacionar la dirección IP con una ubicación específica.

Protección de la aplicación

Activación del cortafuegos de aplicación web

El cortafuegos de aplicación web (WAF) protege la aplicación web ante ataques ISO de capa 7. Generalmente, se combina con conjuntos de reglas agrupadas, que tienen como objetivo proteger contra las vulnerabilidades en la aplicación filtrando el tráfico malicioso.

  1. En el panel de control de IBM Cloud Internet Services, vaya a Seguridad y, a continuación, a Cortafuegos de aplicaciones web (WAF).
  2. Asegúrese de que el WAF esté Activado.
  3. Pulse Conjunto de reglas OWASP. En esta página puede revisar el Conjunto de reglas de núcleo de OWASP y habilitar o inhabilitar las reglas individualmente. Cuando una regla está habilitada, si una solicitud entrante desencadena la regla, se aumentará la puntuación de amenaza global. El valor Sensibilidad decide si se activa una Acción para la solicitud.
    1. Deje los conjuntos de reglas OWASP predeterminados tal como están.
    2. Establezca Sensibilidad en Low.
    3. Establezca Acción en Simulate para registrar todos los sucesos.
  4. Pulse Conjunto de reglas CIS. Esta página muestra reglas adicionales basadas en las pilas de tecnología comunes para alojar sitios web.

Para una conexión segura con HTTPS, puede obtener un certificado de Let's Encrypt o a través de IBM Cloud Secrets Manager.

Aumento del rendimiento y protección frente a ataques de denegación de servicio

Un ataque de denegación de servicio distribuido (DDoS) es un intento malintencionado de interrumpir el tráfico normal de un servidor, servicio o red al saturar el objetivo o su infraestructura circundante con un flujo de tráfico de Internet. CIS está equipado para proteger su dominio de DDoS.

  1. En el panel de control de CIS, seleccione Fiabilidad > Equilibrador de carga global.

  2. Localice el GLB que ha creado en la tabla Equilibradores de carga.

  3. Habilite las características de seguridad y rendimiento en la columna Proxy:

    CIS Conmutar proxy ON
    CIS Conmutar proxy ON

Ahora su GLB está protegido. Una ventaja inmediata es que las direcciones IP de origen de los clústeres quedarán ocultas para los clientes. Si CIS detecta una amenaza en una futura solicitud, el usuario puede ver una pantalla como esta antes de ser redirigido a la aplicación:

Verificación-Protección DDoS
Verificación-Protección DDoS

Además, ahora puede controlar el contenido que se almacena en la memoria caché de CIS y el tiempo que permanece almacenado en memoria caché. Vaya a Rendimiento > Almacenamiento en memoria caché para definir el nivel de almacenamiento en memoria caché global y la caducidad del navegador. Puede personalizar las reglas de seguridad global y de almacenamiento en memoria caché con Reglas de página. Las reglas de página permiten una configuración más precisa mediante vías de acceso de dominio específicas. Por ejemplo, con reglas de página puede decidir almacenar en memoria caché todo el contenido bajo /assets durante 3 días:

Reglas de página
Reglas de página

Eliminación de recursos

Eliminación de los recursos de clúster de Kubernetes

  1. Elimine Ingress, puede hacerlo ejecutando el mandato siguiente:
    kubectl delete -f glb-ingress.yaml
    
  2. Elimine el servicio, puede hacerlo ejecutando el mandato siguiente:
    kubectl delete service hello-world-service
    
  3. Elimine el despliegue, puede hacerlo ejecutando el mandato siguiente:
    kubectl delete deployment hello-world-deployment
    
  4. Suprima los clústeres si los ha creado específicamente para esta guía de aprendizaje.

Eliminar recursos de CIS

  1. Elimine el GLB.
  2. Elimine las agrupaciones de origen.
  3. Elimine las comprobaciones de estado.
  4. Actualice el DNS para el dominio personalizado.
  5. Elimine la instancia CIS si la creó específicamente para este tutorial.

Contenido relacionado