Migración y contenedores de aplicaciones web de Java a Azure Kubernetes Service

En este artículo, aprenderá a incluir en contenedores las aplicaciones web de Java (que se ejecutan en Apache Tomcat) y a migrarlas a Azure Kubernetes Service (AKS) mediante la herramienta de contenedorización de aplicaciones de Azure Migrate. El proceso de contenedorización no requiere acceso a su código base y le proporciona una manera sencilla de incluir en contenedores las aplicaciones existentes. La herramienta usa el estado de ejecución de las aplicaciones en un servidor para determinar los componentes de la aplicación y ayuda a empaquetarlos en una imagen de contenedor. A continuación, la aplicación contenedorizada se puede implementar en Azure Kubernetes Service (AKS).

La herramienta de contenedorización de aplicaciones de Azure Migrate admite actualmente las acciones siguientes:

  • Inclusión en contenedores de aplicaciones web de Java en Apache Tomcat (en servidores Linux) e implementación en contenedores de Linux en AKS.
  • Inclusión en contenedores de aplicaciones web de Java en Apache Tomcat (en servidores Linux) e implementación en contenedores de Linux en App Service. Más información
  • Inclusión en contenedores de las aplicaciones ASP.NET e implementación en contenedores de Windows en AKS. Más información
  • Contenedorización de las aplicaciones de ASP.NET e implementación en contenedores de Windows en App Service. Más información

La herramienta Azure Migrate: App Containerization le ayuda a hacer lo siguiente:

  • Detectar la aplicación: la herramienta se conecta de forma remota a los servidores de aplicaciones que ejecutan la aplicación web de Java (que se ejecuta en Apache Tomcat) y detecta los componentes de la aplicación. La herramienta crea un archivo Dockerfile que se puede usar para crear una imagen de contenedor para la aplicación.
  • Compilar la imagen de contenedor: puede inspeccionar y personalizar aún más el archivo Dockerfile según los requisitos de la aplicación y usarlo para compilar la imagen de contenedor de la aplicación. La imagen de contenedor de la aplicación se inserta en la instancia de Azure Container Registry que especifique.
  • Implementar en Azure Kubernetes Service: la herramienta genera los archivos YAML de definición de recursos de Kubernetes necesarios para implementar la aplicación contenedorizada en el clúster Azure Kubernetes Service clúster. Puede personalizar los archivos YAML y usarlos para implementar la aplicación en AKS.

Nota

  • La herramienta de contenedorización de Azure Migrate le ayuda a detectar tipos de aplicación específicos (ASP.NET y aplicaciones web de Java en Apache Tomcat), así como sus componentes, en un servidor de aplicaciones. Para detectar servidores y el inventario de las aplicaciones, roles y características que se ejecutan en máquinas locales, use la funcionalidad de detección y valoración de Azure Migrate. Más información
  • La herramienta de contenedor de aplicaciones omite el descubrimiento de algunas aplicaciones web predeterminadas de Tomcat, como "docs", "examples", "host-manager", "manager" y "ROOT".

Aunque todas las aplicaciones no se beneficiarán de un cambio directo a los contenedores sin realizar un rediseño significativo, estas son algunas de las ventajas de migrar las aplicaciones existentes a los contenedores sin rescribirlas:

  • Uso mejorado de la infraestructura: con los contenedores, varias aplicaciones pueden compartir recursos y hospedarse en la misma infraestructura. Esto puede ayudarlo a consolidar la infraestructura y mejorar su utilización.
  • Administración simplificada: el hospedaje de aplicaciones en una plataforma administrada moderna, como AKS y App Service, permite simplificar las prácticas de administración. Puede conseguirlo al retirar o reducir los procesos de administración y mantenimiento de la infraestructura que tradicionalmente realizaría con una infraestructura de su propiedad.
  • Portabilidad de la aplicación: debido a la mayor adopción y estandarización de los formatos y las plataformas de especificación de contenedores, la portabilidad de la aplicación ya no es un problema.
  • Adopción de la administración moderna con DevOps: le ayuda a adoptar y normalizar los procedimientos modernos de administración y seguridad, y la transición a DevOps.

En este tutorial, aprenderá a:

  • Configurar una cuenta de Azure.
  • Instalar la herramienta de contenedorización de Azure Migrate.
  • Descubrir la aplicación web de Java.
  • Compile la imagen de contenedor.
  • Ejecutar la aplicación contenedorizada en AKS.

Nota

En los tutoriales se muestra la ruta de implementación más sencilla para un escenario, de modo que pueda configurar rápidamente una prueba de concepto. En ellos se usan las opciones predeterminadas siempre que es posible y no muestran todos los valores y rutas de acceso posibles.

Requisitos previos

Antes de comenzar este tutorial, debe:

Requisito Detalles
Identificar una máquina en la que instalar la herramienta Una máquina Windows para instalar y ejecutar la herramienta de contenedorización de aplicaciones de Azure Migrate. La máquina Windows puede ser un sistema operativo de servidor (Windows Server 2016 o posterior) o de cliente (Windows 10), lo que significa que la herramienta también puede ejecutarse en el escritorio.

La máquina Windows que ejecuta la herramienta debe tener conectividad de red con los servidores o las máquinas virtuales que hospedan las aplicaciones ASP.NET que se incluirán en contenedores.

Asegúrese de que haya disponible 6 GB de espacio en la máquina Windows que ejecuta la herramienta de contenedorización de aplicaciones de Azure Migrate a fin de almacenar los artefactos de la aplicación.

La máquina Windows debe tener acceso a Internet, ya sea directamente o a través de un proxy.
Servidores de aplicaciones - Habilite la conexión de Secure Shell (SSH) en el puerto 22 en los servidores que ejecutan las aplicaciones Java que se van a incluir en contenedores.
Aplicación web de Java La herramienta admite actualmente

- Aplicaciones que se ejecutan en Tomcat 8 o Tomcat 9.
- Servidores de aplicaciones en Ubuntu Linux 16.04/18.04/20.04, Debian 7/8, Red Hat Enterprise Linux 5/6/7.
- Aplicaciones que usan Java 7 o Java 8.
Si tiene una versión distinta, busque una imagen que admita las versiones necesarias y modifique el dockerfile para reemplazar la imagen

La herramienta no admite actualmente

- Servidores de aplicaciones que ejecutan varias instancias de Tomcat.

Preparación de una cuenta de usuario de Azure

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Una vez configurada la suscripción, necesitará una cuenta de usuario de Azure que tenga lo siguiente:

  • Permisos de Propietario en la suscripción a Azure.
  • Permisos para registrar aplicaciones de Microsoft Entra

Si acaba de crear una cuenta de Azure gratuita, es el propietario de la suscripción. Si no es el propietario, trabaje con él para asignar los permisos, como se indica a continuación:

  1. En Azure Portal, busque "suscripciones" y, en Servicios, seleccione Suscripciones.

    Cuadro para buscar la suscripción a Azure.

  2. En la página Suscripciones, seleccione aquella en la que desee crear un proyecto de Azure Migrate.

  3. Seleccione Access Control (IAM) .

  4. Seleccione Agregar>Agregar asignación de roles para abrir la página Agregar asignación de roles.

  5. Asigne el siguiente rol. Para asignar roles, consulte Asignación de roles de Azure mediante Azure Portal.

    Configuración Valor
    Role Propietario
    Asignar acceso a Usuario
    Members azmigrateuser (en este ejemplo)

    Página Agregar asignación de roles en Azure Portal.

  6. Su cuenta de Azure también necesita permisos para registrar aplicaciones de Microsoft Entra.

  7. En Azure Portal, vaya a Microsoft Entra ID>Usuarios>Configuración de usuario.

  8. En Configuración de usuario, compruebe que los usuarios de Microsoft Entra puedan registrar aplicaciones (establecido en de forma predeterminada).

    Comprobación en la configuración de usuario de que los usuarios puedan registrar aplicaciones de Active Directory.

    Importante

    Microsoft recomienda usar roles con el menor número de permisos. Esto ayuda a mejorar la seguridad de su organización. El administrador global es un rol con privilegios elevados que debe limitarse a escenarios de emergencia cuando no se puede usar un rol existente.

  9. Si la configuración de "Registros de aplicaciones" se ha establecido en "No", solicite al administrador global o de inquilinos que asigne el permiso necesario. Como alternativa, el administrador global o de inquilinos puede asignar el rol Desarrollador de aplicaciones a una cuenta para permitir el registro de aplicaciones de Microsoft Entra. Más información.

Descarga e instalación de la herramienta de contenedorización de aplicaciones de Azure Migrate

  1. Descargue el instalador de la contenedorización de aplicaciones de Azure Migrate en una máquina Windows.

  2. Inicie PowerShell en modo de administrador y cambie el directorio de PowerShell a la carpeta que contiene el instalador.

  3. Ejecute el script de instalación mediante el comando siguiente.

    .\AppContainerizationInstaller.ps1
    

Nota:

En Windows Server 2022, edite la línea 135 y quite PowerShell-ISE de la lista de características, ya que ya no se admite.

Inicio de la herramienta de contenedorización de aplicaciones

  1. Abra un explorador en cualquier máquina que pueda conectarse a la máquina Windows que ejecuta la herramienta de contenedorización de aplicaciones y abra su dirección URL: https://nombre de la máquina o dirección IP: 44369.

    También puede abrir la aplicación desde el escritorio, para lo que debe seleccionar el acceso directo de la aplicación.

  2. Si ve una advertencia que indica que la conexión no es privada, haga clic en Opciones avanzadas y elija Continuar al sitio web. Se muestra esta advertencia, ya que la interfaz web usa un certificado TLS/SSL autofirmado.

  3. En la pantalla de inicio de sesión, use la cuenta de administrador local en la máquina para iniciar sesión.

  4. Seleccione Aplicaciones web de Java en Tomcat como el tipo de aplicación que quiere incluir en un contenedor.

  5. Para especificar el servicio de Azure de destino, seleccione Contenedores en Azure Kubernetes Service. Carga predeterminada de la herramienta de contenedorización de aplicaciones.

Requisitos previos completos de la herramienta

  1. Acepte los términos de licencia y lea la información de terceros.
  2. En la aplicación web de la herramienta >Configurar los requisitos previos, complete los pasos siguientes:
    • Conectividad: la herramienta comprueba que la máquina Windows tenga acceso a Internet. Si la máquina usa un proxy:
      • Haga clic en Configurar el proxy y especifique la dirección del proxy (con los formatos de dirección IP o FQDN) y el puerto de escucha.
      • Especifique las credenciales si el proxy requiere autenticación.
      • Solo se admite un proxy HTTP.
      • Si agregó detalles del proxy o deshabilitó el proxy o la autenticación, haga clic en Guardar para desencadenar nuevamente la comprobación de conectividad.
    • Instalación de actualizaciones: la herramienta buscará automáticamente las actualizaciones más recientes y las instalará. También puede instalar manualmente la versión más reciente de la herramienta desde aquí.
    • Habilitación de Secure Shell (SSH): la herramienta le informará de que Secure Shell (SSH) está habilitado en los servidores de aplicaciones que ejecutan las aplicaciones web de Java que se van a incluir en contenedores.

Inicio de sesión en Azure

Haga clic en Iniciar sesión para iniciar sesión en la cuenta de Azure.

  1. Necesitará un código de dispositivo para autenticarse con Azure. Al hacer clic en Iniciar sesión, se abrirá una ventana modal con el código del dispositivo.

  2. Haga clic en Copiar código e Iniciar sesión para copiar el código del dispositivo y abrir un símbolo del sistema de inicio de sesión de Azure en una nueva pestaña del explorador. Si no aparece, asegúrese de que ha deshabilitado el bloqueador de elementos emergentes en el explorador.

    Ventana modal que muestra el código del dispositivo.

  3. En la pestaña nueva, pegue el código del dispositivo y complete el inicio de sesión con las credenciales de la cuenta de Azure. Puede cerrar la pestaña del explorador una vez que se complete el inicio de sesión y volver a la interfaz web de la herramienta de contenedorización de aplicaciones.

  4. Seleccione el inquilino de Azure que quiere usar.

  5. Especifique la suscripción a Azure que quiere usar.

Detección de aplicaciones web de Java

La herramienta auxiliar de contenedorización de aplicaciones se conecta de forma remota a los servidores de aplicaciones con las credenciales proporcionadas e intenta detectar las aplicaciones web de Java (que se ejecutan en Apache Tomcat) hospedadas en dichos servidores de aplicaciones.

  1. Especifique la dirección IP/FQDN y las credenciales del servidor que ejecuta la aplicación web de Java que es necesario usar para conectarse de forma remota al servidor para la detección de las aplicaciones.

    • Las credenciales proporcionadas deben ser para una cuenta raíz (Linux) en el servidor de aplicaciones.
    • En el caso de las cuentas de dominio (el usuario debe ser un administrador en el servidor de aplicaciones), anteponga el nombre de dominio con el formato <dominio\nombre de usuario>.
    • Puede ejecutar la detección de aplicaciones para hasta cinco servidores de manera simultánea.
  2. Haga clic en Validar para comprobar que puede conectarse al servidor de aplicaciones desde la máquina que ejecuta la herramienta y que las credenciales son válidas. Una vez validada correctamente, la columna Estado tendrá el valor Asignado.

    Captura de pantalla de la dirección IP y las credenciales del servidor.

  3. Haga clic en Continuar para iniciar la detección de aplicaciones en los servidores de aplicaciones seleccionados.

  4. Después de completar correctamente la detección de la aplicación, puede seleccionar la lista de aplicaciones para incluir en contenedores.

    Captura de pantalla de la aplicación web de Java detectada.

  5. Use la casilla para seleccionar las aplicaciones que se incluirán en contenedores.

  6. Especifique el nombre del contenedor: especifique un nombre para el contenedor de destino de cada aplicación seleccionada. El nombre del contenedor debe especificarse como <name:tag>, donde la etiqueta se use para la imagen del contenedor. Por ejemplo, puede especificar el nombre del contenedor de destino como appname:v1.

Parametrización de las configuraciones de la aplicación

Al parametrizar la configuración, esta pasa a estar disponible como parámetro en el momento de la implementación. Esto le permite configurar este valor al implementar la aplicación, en lugar de codificar dicho valor de forma rígida en un valor específico en la imagen del contenedor. Por ejemplo, esta opción es útil para parámetros como las cadenas de conexión de base de datos.

  1. Haga clic en Configuraciones de aplicaciones para revisar las configuraciones detectadas.

  2. Active la casilla para parametrizar las configuraciones de aplicaciones detectadas.

  3. Haga clic en Aplicar después de seleccionar las configuraciones que parametrizarán.

    Captura de pantalla de la parametrización de la configuración de una aplicación ASP.NET.

Externalización de las dependencias del sistema de archivos

Puede agregar otras carpetas que use la aplicación. Especifique si deben formar parte de la imagen de contenedor o se externalizarán a través de volúmenes persistentes en el recurso compartido de archivos de Azure. El uso de volúmenes persistentes funciona bien con las aplicaciones con estado que almacenan dicho estado fuera del contenedor o almacenan otro contenido estático en el sistema de archivos. Más información

  1. Haga clic en Editar en Carpetas de aplicaciones para revisar las carpetas de aplicaciones detectadas. Las carpetas de la aplicación detectadas se han identificado como artefactos obligatorios que la aplicación necesita y se copiarán en la imagen del contenedor.

  2. Haga clic en Agregar carpetas y especifique las rutas de acceso de las carpetas que se agregarán.

  3. Para agregar varias carpetas al mismo volumen, especifique valores separados por comas (,).

  4. Seleccione Volumen persistente como opción de almacenamiento si quiere que las carpetas se almacenen fuera del contenedor en un volumen persistente.

  5. Haga clic en Guardar después de revisar las carpetas de la aplicación. Captura de pantalla de la selección del almacenamiento de volúmenes de las aplicaciones.

  6. Haga clic en Continuar para continuar con la fase de compilación de la imagen de contenedor.

Compilar la imagen del contenedor

  1. Seleccione una instancia de Azure Container Registry: use la lista desplegable para seleccionar una instancia de Azure Container Registry que se usará para compilar y almacenar las imágenes de contenedor de las aplicaciones. Puede usar una instancia de Azure Container Registry existente o crear una mediante la opción Crear nuevo registro.

    Captura de pantalla de la selección de una instancia de ACR de la aplicación.

  2. Revise el archivo Dockerfile: el archivo Dockerfile necesario para compilar las imágenes de contenedor de cada aplicación seleccionada se genera al principio del paso de compilación. Haga clic en Revisar para revisar el archivo Dockerfile. También puede agregar cualquier personalización necesaria al archivo Dockerfile en el paso de revisión y guardar los cambios antes de iniciar el proceso de compilación.

  3. Configurar Application Insights: puede habilitar la supervisión de las aplicaciones de Java que se ejecutan en App Service sin instrumentar el código. La herramienta instalará el agente independiente de Java como parte de la imagen de contenedor. Una vez realizada la configuración durante la implementación, el agente de Java recopilará automáticamente una gran cantidad de solicitudes, dependencias, registros y métricas para la aplicación que se pueden usar para realizar la supervisión con Application Insights. Esta opción está habilitada de forma predeterminada para todas las aplicaciones de Java.

  4. Desencadene el proceso de compilación: seleccione las aplicaciones para las que se van a compilar imágenes y haga clic en Compilar. Al hacer clic en Compilar, se iniciará la compilación de la imagen de contenedor para cada aplicación. La herramienta supervisa continuamente el estado de la compilación y le permitirá continuar con el paso siguiente tras completar la compilación correctamente.

  5. Haga un seguimiento del estado de la compilación: también puede supervisar el progreso del paso de compilación si hace clic en el vínculo Compilación en curso en la columna Estado. El vínculo tarda un par de minutos en activarse después de haber desencadenado el proceso de compilación.

  6. Una vez completada la compilación, haga clic en Continuar para especificar la configuración de implementación.

    Captura de pantalla de la finalización de compilación de la imagen de contenedor de la aplicación.

Implementación de la aplicación contenedorizada en AKS

Una vez compilada la imagen de contenedor, el paso siguiente es implementar la aplicación como un contenedor en Azure Kubernetes Service (AKS).

  1. Seleccione el clúster de Azure Kubernetes Service: especifique el clúster de AKS en el que se debe implementar la aplicación.

    • El clúster de AKS seleccionado debe tener un grupo de nodos de Windows.
    • El clúster debe estar configurado para permitir la extracción de imágenes desde la instancia de Azure Container Registry que se seleccionó para almacenar las imágenes.
      • Ejecute el comando siguiente en la CLI de Azure para conectar el clúster de AKS a la instancia de ACR.
        az aks update -n <cluster-name> -g <cluster-resource-group> --attach-acr <acr-name>
        
    • Si no tiene un clúster de AKS o quiere crear uno nuevo en el cual implementar la aplicación, puede optar por crear uno desde la herramienta. Para ello, haga clic en Crear un nuevo clúster de AKS.
      • El clúster de AKS creado mediante la herramienta se creará con un grupo de nodos de Windows. El clúster se configurará para que pueda extraer imágenes de la instancia de Azure Container Registry que se creó anteriormente (si se eligió la opción para crear un nuevo registro).
    • Haga clic en Continuar después de seleccionar el clúster de AKS.
  2. Especificar el almacén de secretos y el área de trabajo de supervisión: si ha optado por parametrizar las configuraciones de la aplicación, especifique el almacén de secretos que se va a usar para la aplicación. Para administrar los secretos de la aplicación se puede optar por Azure Key Vault o Kubernetes Secrets.

    • Si ha seleccionado la segunda opción, para administrar los secretos, haga clic en Continuar.
    • Si prefiere usar Azure Key Vault para administrar los secretos de la aplicación, especifique la instancia que desee usar.
      • Si no tiene una instancia de Azure Key Vault o quiere crear una, puede optar por hacerlo desde la propia herramienta, solo debe hacer clic en Crear nuevo.
      • La herramienta asignará automáticamente los permisos necesarios para administrar secretos por medio de la instancia de Key Vault.
    • Área de trabajo de supervisión: si ha seleccionado habilitar la supervisión con Application Insights, especifique el recurso de Application Insights que desea usar. Esta opción no estará visible si había deshabilitado la integración de la supervisión.
      • Si no tiene ningún recurso de Application Insights o desea crear uno, puede optar por hacerlo desde la herramienta si hace clic en Create new (Crear nuevo).
  3. Especifique el recurso compartido de archivos de Azure: si agregó más carpetas y seleccionó la opción de volumen persistente, especifique el recurso compartido de archivos de Azure que debe usar la herramienta de contenedorización de aplicaciones de Azure Migrate durante el proceso de implementación. La herramienta creará directorios nuevos en este recurso compartido de archivos de Azure para copiarlos a las carpetas de la aplicación que están configuradas para el almacenamiento de volumen persistente. Una vez completada la implementación de la aplicación, la herramienta limpiará el recurso compartido de archivos de Azure mediante la eliminación de los directorios que se crearon.

    • Si no tiene un recurso compartido de archivos de Azure o quiere crear uno nuevo, puede optar por crear uno desde la herramienta. Para ello, haga clic en Crear nueva cuenta de almacenamiento y recurso compartido de archivos.
  4. Configuración de la implementación de aplicaciones: una vez completados los pasos anteriores, deberá especificar la configuración de implementación de la aplicación. Haga clic en Configurar para personalizar la implementación de la aplicación. En el paso de configuración puede especificar las siguientes personalizaciones:

    • Cadena de prefijo: especifique una cadena de prefijo que se usará en el nombre de todos los recursos que se creen para la aplicación contenedorizada en el clúster de AKS.
    • Conjuntos de réplicas: especifique el número de instancias de aplicación (pods) que deben ejecutarse dentro de los contenedores.
    • Tipo de equilibrador de carga: seleccione Externo si la aplicación contenedorizada debe ser accesible desde redes públicas.
    • Configuración de la aplicación: para cualquier configuración de aplicación que se haya parametrizado, especifique los valores que se usarán para la implementación actual.
    • Almacenamiento: para todas las carpetas de aplicación que se hayan configurado para el almacenamiento de volumen persistente, especifique si el volumen debe compartirse entre instancias de la aplicación, o bien si debe inicializarse individualmente con cada instancia del contenedor. De manera predeterminada, todas las carpetas de aplicación en volúmenes persistentes están configuradas como compartidas.
    • Haga clic en Aplicar para guardar la configuración de implementación.
    • Haga clic en Continuar para implementar la aplicación.

    Captura de pantalla de la configuración de la implementación de la aplicación.

  5. Implemente la aplicación: una vez guardada la configuración de implementación de la aplicación, la herramienta generará el archivo YAML de implementación de Kubernetes para la aplicación.

    • Haga clic en Revisar para revisar y personalizar el archivo YAML de implementación de Kubernetes para las aplicaciones.

    • Seleccione la aplicación que quiere implementar.

    • Haga clic en Implementar para iniciar la implementación de las aplicaciones seleccionadas.

      Captura de pantalla de la configuración de implementación de las aplicaciones.

    • Una vez implementada la aplicación, puede hacer clic en la columna Estado de implementación para realizar el seguimiento de los recursos que se implementaron para la aplicación.

Descarga de artefactos generados

Todos los artefactos que se usan para compilar e implementar la aplicación en AKS, incluidos los archivos de especificación YAML de Dockerfile y Kubernetes, se almacenan en el equipo que ejecuta la herramienta. Los artefactos se encuentran en C:\ProgramData\Microsoft Azure Migrate App Containerization.

Se crea una sola carpeta para cada servidor de aplicaciones. Puede ver y descargar todos los artefactos intermedios que se usan en el proceso de contenedorización si se desplaza a esta carpeta. La carpeta correspondiente al servidor de aplicaciones se limpiará al principio de cada ejecución de la herramienta para un servidor determinado.

Solución de problemas

Para solucionar cualquier problema con la herramienta, puede ver los archivos de registro en la máquina Windows que ejecuta la herramienta de contenedorización de aplicaciones. Los archivos de registro de la herramienta se encuentran en C:\ProgramData\Microsoft Azure Migrate App Containerization\Logs.

Pasos siguientes

  • Inclusión en contenedores de aplicaciones web de Java en Apache Tomcat (en servidores Linux) e implementación en contenedores de Linux en App Service. Más información
  • Contenedorización de las aplicaciones web de ASP.NET e implementación en contenedores de Windows en AKS. Más información
  • Contenedorización de las aplicaciones web de ASP.NET e implementación en contenedores Windows en Azure App Service. Más información
  • ¿Cuáles son las soluciones para ejecutar Oracle WebLogic Server en Azure Kubernetes Service? Más información
  • Open Liberty y WebSphere Liberty en AKS. Más información