Ejercicio: Identificación y resolución de la conectividad de red de entrada

Completado

En nuestro escenario, se ha realizado un cambio en la configuración de red. Está recibiendo alertas de que las máquinas virtuales en el grupo de back-end no están respondiendo a los sondeos de estado. Ahora se debe diagnosticar la causa de estos errores y corregirlos.

En este ejercicio, se usa un script para volver a configurar el entorno y provocar errores en el sondeo de estado. Se usan las aptitudes aprendidas en este módulo para devolver el servicio HTTP de carga equilibrada a un funcionamiento completo.

Reconfiguración del equilibrador de carga y repetición de la prueba

  1. En Azure Cloud Shell, establezca el nombre del grupo de recursos.

    export RESOURCEGROUP=learn-ts-loadbalancer-rg
    
  2. Vaya a la carpeta src/scripts.

    cd ~/load-balancer/src/scripts
    
  3. Ejecute el comando siguiente para volver a configurar el equilibrador de carga, la red y las máquinas virtuales. En este script se presentan algunos problemas que se diagnosticarán y corregirán.

    bash reconfigure.sh
    
  4. Ejecute los comandos siguientes para ir a la carpeta src/stresstest.

    cd ~/load-balancer/src/stresstest
    
  5. Vuelva a ejecutar la prueba de esfuerzo en que se reemplaza <ip address> por la dirección IP del equilibrador de carga. Si no recuerda esta dirección, ejecute el script src/scripts/findip.sh de nuevo.

    dotnet run <ip address>
    

    Esta vez, la aplicación no generará ningún resultado y en un momento dado se puede agotar el tiempo de espera con el mensaje "Error al enviar la solicitud a Load Balancer: se ha cancelado la operación". Presione Entrar para detener la aplicación.

  6. En Azure Portal, seleccione Panel>dashboard-learn-ts-loadbalancer.

  7. Revise el panel en que se muestran la situación de sondeo de estado y la disponibilidad de la ruta de acceso a datos. Es posible que se tenga que cambiar el intervalo de tiempo a los últimos 30 minutos. Debe ser similar al gráfico siguiente, con ambas métricas reducidas a cero.

    Captura de pantalla que muestra la situación del sondeo de estado y la disponibilidad de la ruta de acceso a los datos en mal estado.

    En este gráfico se muestra que las máquinas virtuales no responden a las solicitudes de sondeo de estado del equilibrador de carga. Por lo que se han marcado como con estado incorrecto. No hay ninguna ruta de acceso a datos disponible entre un cliente y la aplicación que se ejecuta en estas máquinas virtuales.

Diagnóstico y corrección de incidencias

El primer paso consiste en comprobar que las máquinas virtuales se están ejecutando. Vamos a resolver las incidencias de una máquina virtual a la vez. Echemos un vistazo en primer lugar a appretailvm1. Más adelante se examinará appretailvm2.

Prueba de la máquina virtual appretailvm1

No se puede hacer ping en las máquinas virtuales appretailvm1 o appretailvm2 directamente porque tienen direcciones privadas que solo están disponibles para otras máquinas virtuales de la misma subred. En primer lugar, conéctese al cuadro de salto, que tiene una dirección IP pública y se encuentra en la misma subred. Después, desde allí, se puede hacer ping a las máquinas virtuales.

  1. Vuelva a Cloud Shell.

  2. Ejecute los comandos siguientes para obtener la dirección IP de la máquina virtual del cuadro de salto.

    bash ~/load-balancer/src/scripts/jumpboxip.sh
    
  3. Ejecute el comando siguiente para obtener la contraseña creada al ejecutar el script inicial de instalación. Copie esta contraseña para el paso siguiente.

    cd ~/load-balancer/src/scripts
    cat passwd.txt
    
  4. Inicie sesión en el jump box con la dirección IP y la contraseña de las salidas del comando anterior. Reemplace azureuser en caso de que haya utilizado un nombre de usuario distinto.

    ssh azureuser@<jump box ip address>
    
  5. En el cuadro de salto, ejecute el comando siguiente para probar si se está ejecutando la máquina virtual retailappvm1.

    ping retailappvm1 -c 10
    

    La máquina virtual retailappvm1 debe responder, lo que indica que se está ejecutando. El paso siguiente consiste en establecer si la aplicación web se está ejecutando en esta máquina virtual.

  6. Ejecute el comando siguiente para enviar una solicitud HTTP GET a la máquina virtual retailappvm1.

    curl -v http://retailappvm1
    

    De nuevo, este comando debe ser correcto.

Comprobación de sondeos de estado y de reglas de enrutamiento

La máquina virtual retailappvm1 está activa y la aplicación está ejecutándose en esa máquina virtual. Debe haber un problema entre el equilibrador de carga y las máquinas virtuales del grupo de back-end.

  1. En Azure portal, busque Supervisión.

  2. En la página Supervisión: Información general, seleccione Service Health.

    Captura de pantalla que muestra la opción Estado del servicio seleccionada en el menú izquierdo.

  3. Seleccione Resource Health.

  4. En el cuadro Tipo de recurso, seleccione Equilibrador de carga. En la lista de recursos, seleccione retailapplb.

    Captura de pantalla de la página Estado del servicio - Estado de los recursos que muestra retailapplb seleccionado.

  5. Espere unos minutos para que se evalúe el estado del equilibrador de carga.

  6. En Historial de estado, expanda el evento del nivel superior y revise los pasos recomendados. En estos pasos se sugiere comprobar los puntos de conexión de VIP (regla de enrutamiento) y DIP (sondeo de estado) en el equilibrador de carga.

    Captura de pantalla de la página Estado de los recursos que muestra el historial de estado, como la fecha, el número de eventos de estado, el estado, la descripción y los pasos recomendados.

  7. Vaya al grupo de recursos learn-ts-loadbalancer-rg y seleccione retailapplb.

  8. Seleccione Reglas de equilibrio de carga>retailapprule. Esta regla recibe el tráfico Tcp en el puerto 80 de la dirección IP de front-end y lo envía al puerto 80 en la máquina virtual seleccionada en el grupo de back-end. Esta configuración parece ser correcta, aunque el puerto que usa el sondeo de estado parece sospechoso. Actualmente está establecido en el puerto 85.

    Captura de pantalla de la página **retailapprule** que muestra que el sondeo de estado usa el puerto 85.

  9. Cierre la página retailapprule.

  10. Seleccione Sondeos de estado>retailapphealthprobe.

  11. Cambie el Puerto de 85 a 80 y, después, seleccione Guardar.

    Captura de pantalla de la página **retailapphealthprobe** que muestra el número de Puerto actualizado a 80.

  12. Espere unos minutos.

  13. Seleccione Panel en el menú de la izquierda de Azure Portal.

  14. En el panel, seleccione el gráfico que muestra las métricas Situación de sondeo de estado y Disponibilidad de la ruta de acceso a datos. La métrica Disponibilidad de la ruta de acceso a datos debe llegar a 100, pero la métrica Situación de sondeo de estado se mantiene en torno a 50. Ahora hay una ruta de acceso disponible en el equilibrador de carga para al menos una máquina virtual, pero solo el 50 por ciento de las máquinas virtuales se muestran como correctas.

    Captura de pantalla del gráfico Situación de estado de sondeo y Disponibilidad de la ruta de acceso a los datos, donde la segunda métrica está en 100, pero la primera se mantiene en torno a 50.

    Seleccione el gráfico para ir a la página de métricas de Load Balancer. Esta página permite actualizar el gráfico y acercar un período de tiempo concreto.

  15. En Cloud Shell, ejecute el comando siguiente para salir del cuadro de salto.

    exit
    
  16. Vuelva a ejecutar la aplicación de prueba de esfuerzo mediante la dirección IP del equilibrador de carga.

    cd ~/load-balancer/src/stresstest
    dotnet run <ip address>
    

    Al igual que antes, la prueba sigue produciendo un error. Ahora hay una ruta de acceso del equilibrador de carga al menos a una máquina virtual, pero esta ruta de acceso no funciona desde un cliente que se ejecute fuera de la red virtual. Presione Entrar para detener la aplicación de prueba de esfuerzo.

Comprobación de las reglas de NSG para la subred

El problema puede deberse a una regla de seguridad de red que bloquea el tráfico externo.

  1. En Azure Portal, vaya al grupo de recursos learn-ts-loadbalancer-rg.

  2. Seleccione el grupo de seguridad de red retailappnsg. Este grupo de seguridad determina qué tráfico se permite a través de la red virtual.

  3. Seleccione Reglas de seguridad de entrada. Aunque hay una regla que permite el tráfico entrante desde el equilibrador de carga que se ejecuta en la red virtual, no hay ninguna regla que permita el tráfico que se origina desde fuera de la red virtual a través del puerto 80.

  4. Seleccione Agregar. Aparece el panel Agregar regla de seguridad de entrada.

  5. Escriba los valores siguientes y, después, seleccione Agregar.

    Propiedad Valor
    Origen Cualquiera
    Intervalos de puertos de origen *
    Destino Any
    Servicio Personalizado
    Intervalos de puertos de destino 80
    Protocolo TCP
    Acción Permitir
    Prioridad 100
    Nombre Port_80
    Descripción Puerto HTTP
  6. En Cloud Shell, vuelva a ejecutar la aplicación de prueba de esfuerzo mediante la dirección IP del equilibrador de carga.

    cd ~/load-balancer/src/stresstest
    dotnet run <ip address>
    

    La aplicación se ejecuta ahora, pero solo obtiene una respuesta de la máquina virtual retailappvm1. Deje que la aplicación se ejecute durante dos o tres minutos. Presione Entrar para detenerla.

  7. En Azure Portal, vaya al panel.

  8. Seleccione el gráfico para obtener la media de la métrica Recuento de paquetes. Anote el valor máximo de la última ejecución de la aplicación de prueba de esfuerzo. Este valor debe ser al menos el doble del valor registrado anteriormente, cuando ambas máquinas virtuales estaban disponibles. Aunque ahora tiene un sistema en funcionamiento, se corre el riesgo de sobrecargar la máquina virtual en funcionamiento.

Prueba de la máquina virtual appretailvm2

Parece que tal vez la máquina virtual appretailvm2 no esté controlando las solicitudes correctamente. Debe comprobar si esta máquina virtual está activa y si Load Balancer puede conectarse a ella.

  1. En Cloud Shell, inicie sesión en el jump box con la dirección IP y la contraseña de las salidas del comando anterior.

    ssh azureuser@<jump box ip address>
    
  2. Intente hacer ping en la máquina virtual appretailvm2.

    ping retailappvm2 -c 10
    

    La máquina virtual no responde y el comando ping informa de que la pérdida de paquetes es del 100 por cien. Puede que la máquina virtual retailappvm2 no se esté ejecutando o que haya un problema de red.

  3. En Azure Portal, vaya al grupo de recursos learn-ts-loadbalancer-rg.

  4. Seleccione la máquina virtual retailappvm2.

  5. La página Información general muestra que la máquina virtual se ha detenido. Seleccione Iniciary espere a que la máquina empiece a ejecutarse.

    Captura de pantalla que muestra la página de información general de la máquina virtual *retailappvm2* con el botón Inicio resaltado.

  6. Una vez conectado al cuadro de salto, vuelva a Cloud Shell y repita el comando ping.

    ping retailappvm2 -c 10
    

    En esta ocasión, las operaciones de ping deberían ser correctas.

  7. Pruebe si la aplicación que se ejecuta en la máquina virtual retailappvm2 responde.

    wget retailappvm2
    

    Este comando agota el tiempo de espera. Puede que la aplicación no se esté ejecutando o que haya una incidencia de red. Para detener el comando, seleccione Ctrl+C.

  8. En el cuadro de salto, inicie sesión en la máquina virtual retailappvm2. Cuando se le solicite, escriba la misma contraseña especificada anteriormente.

    ssh azureuser@retailappvm2
    
  9. Ejecute el comando siguiente para probar la aplicación en esta máquina virtual.

    wget retailappvm2
    

    El comando debe ser correcto y crear el archivo index.html que contiene la respuesta.

  10. Examine este archivo index.html.

    cat index.html
    

    El archivo debe contener el mensaje retailappvm2 en que se muestra que esta máquina virtual ha respondido según lo previsto.

  11. Cierre la conexión a la máquina virtual retailappvm2.

    exit
    
  12. Cierre la conexión al cuadro de salto.

    exit
    

    La máquina virtual retailappvm2 está activa y la aplicación se está ejecutando, pero usted no puede conectarse a la aplicación desde fuera de la máquina virtual. Esta incidencia implica un problema de red.

  13. En Azure Portal, vaya al grupo de recursos learn-ts-loadbalancer-rg.

  14. Seleccione el grupo de seguridad de red retailappnicvm2nsg.

  15. Seleccione Reglas de seguridad de entrada.

    El grupo de seguridad de red tiene una regla de entrada que bloquea todo el tráfico externo mediante el protocolo TCP. Esta regla tiene un número de prioridad inferior que la regla (que abre el puerto 80), por lo que tiene prioridad.

    Captura de pantalla que muestra las reglas de seguridad de entrada para NSG.

  16. Seleccione la regla retailappvnetnsgrulevm2denyall, cambie la prioridad a 300 y, después, seleccione Guardar.

    Captura de pantalla que muestra la página de edición de la regla de entrada.

  17. Espere dos minutos y, luego, vaya a Panel.

  18. Seleccione el gráfico en que se muestra la métrica Situación de sondeo de estado. El valor de esta métrica debe ser 100. Es posible que tenga que actualizar el gráfico varias veces.

    Captura de pantalla que muestra la situación de sondeo de estado del equilibrador de carga.

  19. Cambie a Cloud Shell y vuelva a ejecutar la aplicación stresstest mediante la dirección IP del equilibrador de carga.

    cd ~/load-balancer/src/stresstest
    dotnet run <ip address>
    

    Ahora debe ver los mensajes de retailappvm1 y retailappvm2. Ha restaurado la conectividad completa con el sistema.

  20. Presione Entrar para detener la aplicación.

Resumen

Al inicio de este ejercicio, se ha observado que las máquinas virtuales no respondían a las solicitudes de sondeo de estado del equilibrador de carga. Se ha descubierto y resuelto una combinación de incidencias de sondeo y de ruta de acceso a datos:

  • En la regla del equilibrador de carga retailapprule, el puerto que ha usado el sondeo de estado no se ha configurado correctamente; ha usado el 85 en lugar del 80. Se ha actualizado la regla para que use el puerto 80.
  • El grupo de seguridad de red retailappnsg no tenía una regla de seguridad de entrada que permitiera el tráfico en el puerto 80. Por lo tanto, el grupo de seguridad de red ha bloqueado el sondeo de estado. Se ha agregado una regla de seguridad de entrada para permitir el tráfico en el puerto 80.
  • Se ha comprobado la máquina virtual retailappvm2 y se ha observado que se ha detenido. Se ha reiniciado la máquina virtual.
  • Después de iniciar la máquina virtual retailappvm2 y observar que la aplicación se estaba ejecutando, no se ha podido conectar a la aplicación. El grupo de seguridad de red tenía una regla de entrada que bloqueaba todo el tráfico para el protocolo TCP. Esta regla "denegar todo" ha tenido prioridad sobre la regla de seguridad de entrada que permitía el tráfico al puerto 80. Se ha cambiado la prioridad de la regla "denegar todo" para que sea mayor que la regla del puerto 80. Este cambio ha permitido el tráfico de entrada en el puerto 80 para el TCP.

Se ha devuelto el servicio HTTP de carga equilibrada a un funcionamiento completo.