Eventos
Compilación de Intelligent Apps
17 mar, 23 - 21 mar, 23
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.
Regístrese ahoraEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
En este artículo se explica cómo:
az acr build
mediante imágenes de contenedor de Open Liberty o WebSphere Liberty.El operador de Open Liberty simplifica la implementación y administración de las aplicaciones que se ejecutan en clústeres de Kubernetes. Con el operador de Open Liberty o WebSphere Liberty, también puede realizar operaciones más avanzadas, como recopilar seguimientos y volcados.
En este artículo se usa la oferta de Azure Marketplace para Open Liberty o WebSphere Liberty para acelerar su transición a AKS. La oferta aprovisiona automáticamente algunos recursos de Azure, entre los que se incluyen:
Si prefiere una guía manual paso a paso para ejecutar Liberty en AKS, consulte Implementación manual de una aplicación Java con Open Liberty o WebSphere Liberty en un clúster de Azure Kubernetes Service (AKS).
Este artículo está diseñado para ayudarle a llegar rápidamente a la implementación. Antes de ir a producción, debe explorar la documentación de IBM sobre el ajuste de Liberty.
Si está interesado en proporcionar comentarios o trabajar estrechamente en sus escenarios de migración con el equipo de ingeniería que desarrolla WebSphere en soluciones de Azure, rellene esta breve encuesta sobre la migración de WebSphere e incluya la información de contacto. El equipo de administradores de programas, arquitectos e ingenieros se pondrá en contacto rápidamente con usted para iniciar una estrecha colaboración.
az login
. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión en Azure con la CLI de Azure.az version
para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade
. Este artículo requiere al menos la versión 2.61.0 de la CLI de Azure.Owner
o los roles Contributor
y User Access Administrator
en la suscripción. Puede comprobarlo siguiendo los pasos descritos en Lista de las asignaciones de rol de un usuario o grupo.Los siguientes pasos le guiarán para crear un tiempo de ejecución de Liberty en AKS. Después de completar estos pasos, tendrá una instancia de Container Registry y un clúster de AKS para implementar la aplicación contenedorizada.
Vaya a Azure Portal. En el cuadro de búsqueda de la parte superior de la página, escriba WebSphere Liberty/Open Liberty en Kubernetes. Cuando aparezcan las sugerencias, seleccione la única coincidencia en la sección Marketplace.
Si lo prefiere, puede ir directamente a la oferta.
Seleccione Crear.
En el panel Aspectos básicos:
ejb0913-java-liberty-project-rg
). Guarde el nombre del grupo de recursos para utilizarlo más adelante en este artículo.Seleccione Siguiente. En el panel AKS, puede seleccionar opcionalmente un clúster de AKS existente y una instancia de Container Registry, en lugar de hacer que la implementación cree unos nuevos. Esta opción le permite usar el patrón sidecar, como se muestra en el Centro de arquitectura de Azure. También puede ajustar la configuración del tamaño y el número de máquinas virtuales del grupo de nodos de AKS.
Para los fines de este artículo, mantenga todos los valores predeterminados en este panel.
Seleccione Siguiente. En el panel Equilibrio de carga, junto a ¿Quiere conectarse a Azure Application Gateway?, seleccione Sí. En esta sección, puede personalizar las siguientes opciones de implementación:
Opcionalmente, puede personalizar la red virtual y la subred en las que la implementación colocará los recursos. No es necesario cambiar los valores restantes de sus valores predeterminados.
En Certificado TLS/SSL, puede proporcionar el certificado TLS/SSL de Azure Application Gateway. Deje los valores predeterminados para que la oferta genere un certificado autofirmado.
No pase a producción con un certificado autofirmado. Para obtener más información sobre los certificados autofirmados, consulte Creación de un certificado público autofirmado para autenticar la aplicación.
Puede seleccionar Habilitar afinidad basada en cookies, también conocida como "sesiones permanentes". En este artículo se usan sesiones permanentes, así que asegúrese de seleccionar esta opción.
Seleccione Siguiente. En el panel Operador y aplicación, en este artículo se usan todos los valores predeterminados. Sin embargo, puede personalizar las siguientes opciones de implementación:
Seleccione Revisar y crear para validar las opciones seleccionadas. En el panel Revisar y crear, cuando vea la opción Crear activada después de superar la validación, selecciónela.
La implementación puede tardar hasta 20 minutos. Mientras espera a que finalice la implementación, puede seguir los pasos descritos en la sección Creación de una instancia de Azure SQL Database. Después de completar esa sección, vuelva aquí y continúe.
Si ha salido del panel La implementación está en curso, los pasos siguientes le muestran cómo volver a ese panel. Si todavía está en el panel que indica Se completó la implementación, vaya al grupo de recursos recién creado y continúe con el tercer paso.
En la esquina de cualquier página del portal, seleccione el botón de menú y, después. seleccione Grupos de recursos.
En el cuadro con el texto Filtrar para cualquier campo, escriba los primeros caracteres del grupo de recursos que creó anteriormente. Si ha seguido la convención recomendada, escriba sus iniciales y, después, seleccione el grupo de recursos adecuado.
En la lista de recursos del grupo de recursos, seleccione el recurso con el valor de Tipo establecido en Registro de contenedor.
En el panel de navegación, en Configuración, seleccione Claves de acceso.
Guarde en otro lugar los valores de Nombre de registro y Servidor de inicio de sesión. Puede usar el icono de copia situado junto a cada campo para copiar el valor en el Portapapeles del sistema.
Nota
En este artículo se usa el comando az acr build
para compilar e insertar la imagen de Docker en Container Registry, sin usar username
y password
de Container Registry. Todavía es posible usar el nombre de usuario y la contraseña con docker login
y docker push
. El uso del nombre de usuario y la contraseña es menos seguro que la autenticación sin contraseña.
Vuelva al grupo de recursos en el que implementó los recursos.
En la sección Configuración, seleccione Implementaciones.
Seleccione la implementacióne inferior de la lista. El valor de Nombre de implementación coincidirá con el identificador del publicador de la oferta. Contiene la cadena ibm
.
En el panel de navegación, seleccione Salidas.
Mediante la misma técnica de copia que usó con los valores anteriores, guarde en otro lugar los valores de las salidas siguientes:
cmdToConnectToCluster
appDeploymentTemplateYaml
si la implementación no incluye una aplicación. Es decir, ha seleccionado No en ¿Quiere implementar una aplicación? al implementar la oferta de Marketplace. En este artículo se ha seleccionado No. Pero si ha seleccionado Sí, guarde el valor de appDeploymentYaml
, que incluye la implementación de la aplicación.
Pegue el valor de appDeploymentTemplateYaml
o appDeploymentYaml
en un shell de Bash y ejecute el comando.
La salida de este comando es el código YAML de implementación de la aplicación. Busque el secreto TLS de entrada con la palabra clave secretName
, como - secretName: secret785e2c
. Guarde el valor de secretName
.
Ejecute los siguientes comandos para establecer las variables de entorno que ha capturado en los pasos anteriores. Estas variables de entorno se usan más adelante en este artículo.
export RESOURCE_GROUP_NAME=<your-resource-group-name>
export REGISTRY_NAME=<your-registry-nam-of-container-registry>
export LOGIN_SERVER=<your-login-server-of-container-registry>
export INGRESS_TLS_SECRET=<your-ingress-tls-secret-name>
En esta sección, creará una base de datos única de Azure SQL Database para usarla con la aplicación.
En primer lugar, establezca variables de entorno relacionadas con la base de datos. Reemplace <your-unique-sql-server-name>
por un nombre único para el servidor de Azure SQL Database.
export SQL_SERVER_NAME=<your-unique-sql-server-name>
export DB_NAME=demodb
Ejecute el siguiente comando en el terminal para crear una base de datos única en Azure SQL Database y establecer el usuario que ha iniciado sesión actualmente como administrador de Microsoft Entra. Para más información, vea Inicio rápido: Creación de una base de datos única: Azure SQL Database.
export ENTRA_ADMIN_NAME=$(az account show --query user.name --output tsv)
az sql server create \
--name $SQL_SERVER_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--enable-ad-only-auth \
--external-admin-principal-type User \
--external-admin-name $ENTRA_ADMIN_NAME \
--external-admin-sid $(az ad signed-in-user show --query id --output tsv)
az sql db create \
--resource-group $RESOURCE_GROUP_NAME \
--server $SQL_SERVER_NAME \
--name $DB_NAME \
--edition GeneralPurpose \
--compute-model Serverless \
--family Gen5 \
--capacity 2
Después, agregue la dirección IP local a las reglas de firewall del servidor de Azure SQL Database para permitir que la máquina local se conecte a la base de datos para realizar pruebas locales más adelante.
export AZ_LOCAL_IP_ADDRESS=$(curl -s https://whatismyip.akamai.com)
az sql server firewall-rule create \
--resource-group $RESOURCE_GROUP_NAME \
--server $SQL_SERVER_NAME \
--name AllowLocalIP \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS
Nota
En este artículo se deshabilita la autenticación de SQL para ilustrar los procedimientos recomendados de seguridad. Se usa Microsoft Entra ID para autenticar la conexión con el servidor. Si necesita habilitar la autenticación de SQL, vea az sql server create
.
En esta sección, creará una conexión de servicio entre el clúster de AKS y Azure SQL Database mediante Id. de carga de trabajo de Microsoft Entra con Service Connector. Esta conexión permite que el clúster de AKS acceda a Azure SQL Database sin usar la autenticación de SQL.
En primer lugar, conceda a la aplicación permisos de proveedor de recursos de Azure Service Connector para la instancia de Application Gateway implementada antes. Este paso es necesario para crear correctamente una conexión de servicio entre el clúster de AKS y Azure SQL Database.
Después, ejecute los comandos siguientes para crear una conexión entre el clúster de AKS y la base de datos SQL mediante Id. de carga de trabajo de Microsoft Entra con Service Connector. Para más información, vea Creación de una conexión de servicio en AKS con Service Connector (versión preliminar).
# Register the Service Connector and Kubernetes Configuration resource providers
az provider register --namespace Microsoft.ServiceLinker --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
# Install the Service Connector passwordless extension
az extension add --name serviceconnector-passwordless
# Retrieve the AKS cluster and Azure SQL Server resource IDs
export AKS_CLUSTER_RESOURCE_ID=$(az aks show \
--resource-group $RESOURCE_GROUP_NAME \
--name $CLUSTER_NAME \
--query id \
--output tsv)
export AZURE_SQL_SERVER_RESOURCE_ID=$(az sql server show \
--resource-group $RESOURCE_GROUP_NAME \
--name $SQL_SERVER_NAME \
--query id \
--output tsv)
# Create a user-assigned managed identity used for workload identity
export USER_ASSIGNED_IDENTITY_NAME=workload-identity-uami
az identity create \
--resource-group ${RESOURCE_GROUP_NAME} \
--name ${USER_ASSIGNED_IDENTITY_NAME}
# Retrieve the user-assigned managed identity resource ID
export UAMI_RESOURCE_ID=$(az identity show \
--resource-group ${RESOURCE_GROUP_NAME} \
--name ${USER_ASSIGNED_IDENTITY_NAME} \
--query id \
--output tsv)
# Create a service connection between your AKS cluster and your SQL database using Microsoft Entra Workload ID
az aks connection create sql \
--connection akssqlconn \
--client-type java \
--source-id $AKS_CLUSTER_RESOURCE_ID \
--target-id $AZURE_SQL_SERVER_RESOURCE_ID/databases/$DB_NAME \
--workload-identity $UAMI_RESOURCE_ID
Nota
Se recomienda usar Id. de carga de trabajo de Microsoft Entra para el acceso seguro a la instancia de Azure SQL Database sin usar la autenticación de SQL. Si necesita usar la autenticación de SQL, omita los pasos anteriores de esta sección y use el nombre de usuario y la contraseña para conectarse a Azure SQL Database.
Para autenticarse en Azure SQL Database, debe obtener la cuenta de servicio y el secreto creados por Service Connector. Siga las instrucciones de la sección Actualización del contenedor de Tutorial: Conexión de una aplicación de AKS a Azure SQL Database. Elija la opción Crear directamente una implementación mediante el fragmento de código de ejemplo de YAML proporcionado y siga estos pasos:
En las secciones resaltadas del ejemplo de código YAML de implementación de Kubernetes, copie los valores serviceAccountName
y secretRef.name
, como se muestra en el ejemplo siguiente:
serviceAccountName: <service-account-name>
containers:
- name: raw-linux
envFrom:
- secretRef:
name: <secret-name>
Use los siguientes comandos para definir variables de entorno. Reemplace <service-account-name>
y <secret-name>
por los valores que copió en el paso anterior.
export SERVICE_ACCOUNT_NAME=<service-account-name>
export SECRET_NAME=<secret-name>
Estos valores se usan en la sección siguiente para implementar la aplicación Liberty en el clúster de AKS.
Nota
El secreto creado por Service Connector contiene AZURE_SQL_CONNECTIONSTRING
, que es una cadena de conexión sin contraseña a la instancia de Azure SQL Database. Para más información, vea el valor de ejemplo en la sección Autenticación de identidad administrada asignada por el usuario de Integración de Azure SQL Database con Service Connector.
Ahora que ha configurado la base de datos y el clúster de AKS, puede continuar con la preparación de AKS para hospedar la aplicación Open Liberty.
Siga los pasos que aparecen en esta sección para implementar la aplicación de ejemplo en el entorno de ejecución de Liberty. Esos pasos usan Maven.
Clone el código de ejemplo de este artículo. El ejemplo se encuentra en GitHub.
Hay algunos ejemplos en el repositorio. En este artículo se usa java-app. Ejecute los siguientes comandos para obtener el ejemplo:
git clone https://github.com/Azure-Samples/open-liberty-on-aks.git
cd open-liberty-on-aks
export BASE_DIR=$PWD
git checkout 20241107
Si ve un mensaje sobre estar en estado "HEAD desasociado", es seguro omitir este mensaje. El mensaje simplemente significa que ha extraído una etiqueta del repositorio.
Esta es la estructura de archivos de la aplicación, con los archivos y directorios importantes:
java-app
├─ src/main/
│ ├─ aks/
│ │ ├─ openlibertyapplication-agic-passwordless-db.yaml
│ ├─ docker/
│ │ ├─ Dockerfile
│ │ ├─ Dockerfile-wlp
│ ├─ liberty/config/
│ │ ├─ server.xml
│ ├─ java/
│ ├─ resources/
│ ├─ webapp/
├─ pom.xml
├─ pom-azure-identity.xml
Los directorios java, resources y webapp contienen el código fuente de la aplicación de ejemplo. El código declara y usa un origen de datos denominado jdbc/JavaEECafeDB
.
En el directorio aks, el archivo openlibertyapplication-agic-passwordless-db.yaml se usa para implementar la imagen de la aplicación con AGIC y conexión sin contraseña a Azure SQL Database. En este artículo se da por supuesto que usa este archivo.
En el directorio docker, hay dos archivos para crear la imagen de aplicación con Open Liberty o WebSphere Liberty.
En el directorio liberty/config, el archivo server.xml se usa para configurar la conexión de base de datos para el clúster de Open Liberty y WebSphere Liberty. Define una variable azure.sql.connectionstring
que se usa para conectarse a la instancia de Azure SQL Database.
El archivo pom.xml es el archivo del modelo de objetos de proyecto (POM) de Maven que contiene la información de configuración del proyecto. El archivo pom-azure-identity.xml declara una dependencia de azure-identity
. Este archivo se usa para autenticarse en los servicios de Azure mediante Microsoft Entra ID.
Nota
En este ejemplo se usa la biblioteca azure-identity
para autenticarse en Azure SQL Database mediante la autenticación de Microsoft Entra. Si necesita usar la autenticación de SQL en la aplicación Liberty, vea Conexiones de base de datos relacionales con JDBC.
Ahora que ha recopilado las propiedades necesarias, compile la aplicación. El archivo POM del proyecto lee muchas variables del entorno. Como parte de la compilación de Maven, estas variables se usan para rellenar los valores de los archivos YAML ubicados en src/main/aks. Si lo prefiere, puede hacer algo similar para la aplicación fuera de Maven.
cd $BASE_DIR/java-app
# The following variables are used for deployment file generation into the target.
export LOGIN_SERVER=${LOGIN_SERVER}
export SC_SERVICE_ACCOUNT_NAME=${SERVICE_ACCOUNT_NAME}
export SC_SECRET_NAME=${SECRET_NAME}
export INGRESS_TLS_SECRET=${INGRESS_TLS_SECRET}
mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources
Ejecute y pruebe el proyecto localmente antes de implementarlo en Azure. Para mayor comodidad, en este artículo se usa liberty-maven-plugin
. Para obtener más información sobre liberty-maven-plugin
, consulte el artículo Creación de una aplicación web con Maven de Open Liberty.
Nota
Si seleccionó una implementación de base de datos "sin servidor", compruebe que la base de datos SQL no ha entrado en modo de pausa. Una manera de hacerlo es iniciar sesión en el editor de consultas de la base de datos como se describe en Inicio rápido: Uso del editor de consultas de Azure Portal (versión preliminar) para consultar Azure SQL Database.
Inicie la aplicación mediante liberty:run
.
cd $BASE_DIR/java-app
# The value of environment variable AZURE_SQL_CONNECTIONSTRING is read by configuration variable `azure.sql.connectionstring` in server.xml
export AZURE_SQL_CONNECTIONSTRING="jdbc:sqlserver://$SQL_SERVER_NAME.database.windows.net:1433;databaseName=$DB_NAME;authentication=ActiveDirectoryDefault"
mvn liberty:run
Compruebe que la aplicación funciona según lo previsto. Debería ver un mensaje similar a [INFO] [AUDIT ] CWWKZ0001I: Application javaee-cafe started in 18.235 seconds.
en la salida del comando. Vaya a http://localhost:9080/
en el explorador y compruebe que la aplicación es accesible y que todas las funciones hacen su trabajo.
Presione Ctrl+C para detener. Presione Y si se le pide que finalice el trabajo por lotes.
Cuando haya terminado, elimine la regla de firewall que permite que la dirección IP local acceda a la instancia de Azure SQL Database mediante el comando siguiente:
az sql server firewall-rule delete \
--resource-group $RESOURCE_GROUP_NAME \
--server $SQL_SERVER_NAME \
--name AllowLocalIP
Ahora puede ejecutar el comando az acr build
para compilar la imagen, como se muestra en el ejemplo siguiente:
cd $BASE_DIR/java-app/target
az acr build \
--registry ${REGISTRY_NAME} \
--image javaee-cafe:v1 \
.
El comando az acr build
carga los artefactos especificados en el Dockerfile en la instancia de Container Registry, compila la imagen y la almacena en la instancia de Container Registry.
Siga estos pasos para implementar la aplicación de Liberty en el clúster de AKS.
Conéctese al clúster de AKS.
Pegue el valor de cmdToConnectToCluster
en un shell y ejecute el comando.
Ejecute los comandos siguientes para aplicar el archivo de implementación:
cd $BASE_DIR/java-app/target
# Apply deployment file
kubectl apply -f openlibertyapplication-agic-passwordless-db.yaml
Espere hasta que todos los pods se reinicien correctamente con el comando siguiente:
kubectl get pods --watch
Un resultado similar al siguiente ejemplo indica que todos los pods se están ejecutando:
NAME READY STATUS RESTARTS AGE
javaee-cafe-cluster-agic-67cdc95bc-2j2gr 1/1 Running 0 29s
javaee-cafe-cluster-agic-67cdc95bc-fgtt8 1/1 Running 0 29s
javaee-cafe-cluster-agic-67cdc95bc-h47qm 1/1 Running 0 29s
Cuando se ejecutan los pods, puede probar la aplicación mediante la dirección IP pública de la instancia de Application Gateway.
Ejecute el siguiente comando para obtener y mostrar la dirección IP pública de la instancia de Application Gateway, expuesta por el recurso de entrada creado por AGIC:
export APP_URL=https://$(kubectl get ingress | grep javaee-cafe-cluster-agic-ingress | cut -d " " -f14)/
echo $APP_URL
Copie la dirección URL y ábrala en el explorador para ver la página principal de la aplicación. Si la página web no se representa correctamente o devuelve un error 502 Bad Gateway
, la aplicación sigue empezando en segundo plano. Espere unos minutos y vuelva a intentarlo.
Para evitar los cargos de Azure, se recomienda limpiar los recursos que no sean necesarios. Cuando ya no necesite el clúster, use el comando az group delete
para quitar el grupo de recursos, el servicio de contenedor, el registro de contenedor, la base de datos y todos los recursos relacionados:
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Puede obtener más información en estas referencias:
Para más información sobre la implementación de la familia IBM WebSphere en Azure, vea ¿Cuáles son las soluciones para ejecutar la familia de productos WebSphere en Azure?.
Comentarios de Azure Kubernetes Service
Azure Kubernetes Service es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Eventos
Compilación de Intelligent Apps
17 mar, 23 - 21 mar, 23
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.
Regístrese ahoraCursos
Módulo
Implementación de una aplicación de Quarkus en Azure Container Apps - Training
Cree una aplicación de Quarkus, conéctela a una base de datos PostgreSQL y, después, impleméntela en Azure Container Apps.
Certificación
Microsoft Certified: Azure Database Administrator Associate - Certifications
Administre una infraestructura de base de datos de SQL Server para bases de datos relacionales locales e híbridas en la nube mediante las ofertas de bases de datos relacionales PaaS de Microsoft.