viernes, 20 de mayo de 2022

Deployar aplicación BWCE con Maven en Azure Kubernetes - Container Registry desde Jenkins

Cómo deployar aplicación BWCE con Maven en Azure Kubernetes - Container Registry desde Jenkins

Hola

Diferente al post anterior, en esta ocasión voy a describir cómo desplegar un servicio REST de TIBCO BusinessWorks Container Edition desde Jenkins usando el plugin de Maven. El deployment será en Azure Kubernetes con un Container registry también en Microsoft Azure.

Prerrequisitos


-Código fuente de la aplicación en un repositorio de git  
-Maven 3.8.5
-Jenkins instalado y configurado con Maven plugin y ruta de instalación de Maven
-Microsoft Azure CLI conectado a Microsoft Azure
-Docker (En este ejercicio no se requiere ya que no estoy creando ninguna imagen). Se da por entendido que la imagen ya existe en el Azure Container Registry

Procedimiento


1.- Agregar plugin de Maven: Maven Integration plugin

2.- Ir a Administrar Jenkins > Configuración de herramientas
  • En la sección Maven, clic en el botón Maven Installations
  • Ingresar un Nombre 
  • Ingresar la ruta de instalación de Maven (ej. /usr/local/Cellar/maven/3.8.5/libexec/)
3.- Desde Jenkins crear un proyecto de tipo Maven

En la configuración del proyecto, ingresar los siguiente información:

General
Github project: Liga al repositorio git donde se encuentra el código de la aplicación (ej. https://github.com/compensar/streaming/)

Source Code Management
Git > Repositories > Repository URL: Liga al repositorio git donde se encuentra el código de la aplicación (ej. https://github.com/compensar/streaming/)
Branches to build: Nombre del branch (ej. */master)

Build
Root POM: Path al archivo POM principal (ej. OrderMgmt.application.parent/pom.xml)
Goals and options: Maven goals a ejecutar (initialize com.tibco.plugins:bw6-maven-plugin:bwfabric8json fabric8:resource fabric8:apply -e -X)

4.- Guardar el proyecto

5.- Con esas configuraciones clic en Build Now para ejecutar el proyecto.


Les dejo un video de cómo hacerlo.




Espero les sirva.



miércoles, 18 de mayo de 2022

Desplegar aplicación BWCE con Maven en Azure Kubernetes - Container Registry desde TIBCO Business Studio

Cómo desplegar aplicación BWCE con Maven en Azure Kubernetes - Container Registry desde TIBCO Business Studio

Hola

En este post voy a describir cómo desplegar una servicio REST de TIBCO BusinessWorks Container Edition desde TIBCO Business Studio usando el plugin de Maven en Azure Kubernetes con un Container registry también en Microsoft Azure.

Prerrequisitos

-TIBCO BusinessWorks Container Edition 2.7.0 con Maven plugin.
-Microsoft Azure CLI conectado a Microsoft Azure
-Maven 3.8.5 (Si se quiere ejecutar fuera de TIBCO Business Studio)
-Docker (En este ejercicio no se requiere ya que no estoy creando ninguna imagen). Se da por entendido que la imagen ya existe en el Azure Container Registry

Procedimiento

Es necesario generar el archivo POM del proyecto para poder realizar un despliegue con Maven. 

1.- Clic derecho sobre la aplicación y seleccionar Generate POM for Application

Ingresar la información referente al proyecto.

  • Deploy options: Docker
  • Image name: Imagen de Docker (ej. miazureregistry.azurecr.io/imagename:tag)
  • BWCE image: Imagen base de Docker (ej. miazureregistry.azurecr.io/imagename:tag)
  • Run on Docker host. Ingresar puertos usados por la aplicación.
  • Select platform: Kubernetes/Openshift (Para un servicio de AKS)
  • Deployment name
  • Service name
  • Service Type
  • Container Port
Los siguientes archivos de propiedades son generados sobre la carpeta de la aplicación:
  • docker-dev.properties
  • docker-host-env-dev.properties
  • docker-host-env-prod.properties
  • docker-prod.properties
  • k8s-dev.properties
  • k8s-prod.properties
2.- Desde TIBCO Business Studio seleccionar Run > Run configurations

3.- Crear un Maven build configuration con los siguientes goals:

clean initialize com.tibco.plugins:bw6-maven-plugin:bwfabric8json fabric8:resource fabric8:apply -Ddocker.property.file=docker-dev.properties -Dk8s.property.file=k8s-dev.properties

Los goals arriba especificados van a realizar las siguientes tareas:

Clean: Borra los archivos, folders generados de una construcción anterior de recursos.
Initialize: Carga los valores especificados en los archivos de configuración (docker-dev.properties,
k8s-dev.properties)
com.tibco.plugins:bw6-maven-plugin:bwfabric8json:  Genera los templates .yml para el deployment
fabric8:resource: Crea los archivos yml para el deployment (target/classes/META-INF/fabric8/kubernetes/kubernetes.yml) 
fabric8:apply: Ejecuta el deployment en Kubernetes

Las properties se especifican en el formato -Dpropiedad:

-Ddocker.property.file=docker-dev.properties
-Dk8s.property.file=k8s-dev.properties
-e -X son parámetros para ver logs con detalles y errores

4.- Clic en Ejecutar

5.- Opcionalmente se puede ejecutar el despliegue fuera de TIBCO Business Studio teniendo instalado Maven.

Para esto, ir a la ruta donde se encuentra el archivo POM principal sobre la carpeta de aplicación.parent y ejecutar la misma linea de goals con el prefijo de Maven (mvn)

mvn clean initialize com.tibco.plugins:bw6-maven-plugin:bwfabric8json fabric8:resource fabric8:apply -Ddocker.property.file=docker-dev.properties -Dk8s.property.file=k8s-dev.properties


6.- Verificar que el despliegue haya sido exitoso en Azure Kubernetes

Les dejo un video de cómo realizar este procedimiento.



Espero les sirva


martes, 17 de mayo de 2022

Azure AKS deployment ErrImagePull ImagePullBackOff

Azure deployment ErrImagePull ImagePullBackOff

Hola

Estoy obteniendo el siguiente error al momento de la creación de un Pod al hacer pull de una imagen de un Container Registry en Azure

En la console de Azure y al hacer un describe pod obtengo lo siguiente: 

Failed to pull image "miazureregistry.azurecr.io/tibco/ordermgmt/v1": rpc error: code = Unknown desc = failed to pull and unpack image
"miazureregistry.azurecr.io/tibco/ordermgmt/v1:latest": failed to resolve reference "miazureregistry.azurecr.io/tibco/ordermgmt/v1:latest": failed to
authorize: failed to fetch anonymous token: unexpected status: 401
Unauthorized


El deployment lo estoy haciendo en un Azure Kubernetes Service y utiliza una imagen de un Container Registry también en Azure.

Los he creado de manera independiente por lo que no hay comunicación ni permisos entre ellos.

Para conocer el estatus entre ambos ejecuto la siguiente instrucción: 

az aks check-acr --name micluster --resource-group jhernand --acr miazureregistry.azurecr.io

[2022-05-17T16:04:39Z] Checking host name resolution (miazureregistry.azurecr.io): SUCCEEDED

[2022-05-17T16:04:39Z] Canonical name for ACR (miazureregistry.azurecr.io): r0419eus-3.eastus.cloudapp.azure.com.

[2022-05-17T16:04:39Z] ACR location: eastus

[2022-05-17T16:04:39Z] Loading azure.json file from /etc/kubernetes/azure.json

[2022-05-17T16:04:39Z] Checking managed identity...

[2022-05-17T16:04:39Z] Cluster cloud name: AzurePublicCloud

[2022-05-17T16:04:39Z] Kubelet managed identity client ID: ed10dc89-3346-4a8b-818b-dcb41ee87960

[2022-05-17T16:04:39Z] Validating managed identity existance: SUCCEEDED

[2022-05-17T16:04:39Z] Validating image pull permission: FAILED

[2022-05-17T16:04:39Z] ACR miazureregistry.azurecr.io rejected token exchange: ACR token exchange endpoint returned error status: 403. body: {"errors":[{"code":"DENIED","message":"retrieving permissions failed"}]}


Como ven el AKS no tiene permisos para hacer pull de imágenes sobre el container registry.

Solución 


Para solucionar el problema hay que ejecutar la siguiente instrucción:

az aks update -n micluster -g jhernand --attach-acr miazureregistry

......

  "fqdnSubdomain": null,

  "httpProxyConfig": null,

  "id": "/subscriptions/974aac80-0f88-44cc-b5d9-740d870dd50f/resourcegroups/jhernand/providers/Microsoft.ContainerService/managedClusters/micluster",

  "identity": {

    "principalId": "838f72dc-be60-45d3-afef-bb4bd3985f5e",

    "tenantId": "cde6fa59-abb3-4971-be01-2443c417cbda",

    "type": "SystemAssigned",

    "userAssignedIdentities": null

  },

  "identityProfile": {

    "kubeletidentity": {

      "clientId": "ed10dc89-3346-4a8b-818b-dcb41ee87960",

      "objectId": "194333ab-cf81-422d-8185-e9f8e75f2cb9",

      "resourceId": "/subscriptions/974aac80-0f88-44cc-b5d9-740d870dd50f/resourcegroups/MC_jhernand_micluster_eastus/providers/Microsoft.ManagedIdentity/userAssignedIdentities/micluster-agentpool"

    }

  },

  "kubernetesVersion": "1.22.6",

  "linuxProfile": null,

......


La instrucción asigna permisos de Pull (AcrPull) sobre el Managed Identity micluster-agentpool con lo que los Pod ya puede jalar la imagen exitosamente.

Una vez hecho, esperar algunos minutos para que se replique el cambio y después checar nuevamente:

jangel-MBP13:~ jhernand$ az aks check-acr --name micluster --resource-group jhernand --acr miazureregistry.azurecr.io

Merged "micluster" as current context in /var/folders/k1/cbw5hqpd0m3d6s9sxf24m7br0000gq/T/tmp18_0ut_a

Error attaching, falling back to logs: unable to upgrade connection: container canipull-fdb7ecea-32f1-41e9-ac31-4b1224a38f28 not found in pod canipull-fdb7ecea-32f1-41e9-ac31-4b1224a38f28_default

[2022-05-17T16:22:25Z] Checking host name resolution (miazureregistry.azurecr.io): SUCCEEDED

[2022-05-17T16:22:25Z] Canonical name for ACR (miazureregistry.azurecr.io): r0419eus-3.eastus.cloudapp.azure.com.

[2022-05-17T16:22:25Z] ACR location: eastus

[2022-05-17T16:22:25Z] Loading azure.json file from /etc/kubernetes/azure.json

[2022-05-17T16:22:25Z] Checking managed identity...

[2022-05-17T16:22:25Z] Cluster cloud name: AzurePublicCloud

[2022-05-17T16:22:25Z] Kubelet managed identity client ID: ed10dc89-3346-4a8b-818b-dcb41ee87960

[2022-05-17T16:22:25Z] Validating managed identity existance: SUCCEEDED

[2022-05-17T16:22:25Z] Validating image pull permission: SUCCEEDED

[2022-05-17T16:22:25Z] 

Your cluster can pull images from miazureregistry.azurecr.io!


Después de esto, verificar que los Pods arranquen correctamente después de algunos minutos o borrarlos y recrearlos.

Les dejo video de cómo realizar el proceso.




Espero les sirva




viernes, 6 de mayo de 2022

Subir imagen de Docker a Container Registry de Azure

Cómo subir imagen de Docker a Container Registry de Azure

Hola.

En este post voy a explicar cómo subir una imagen de Docker a un Container registry de Microsoft Azure.

Prerequisitos

  • Cuenta en azure con una suscripción y un resource group válidos.
  • Crear un Container Registry en Azure y obtener el nombre del Login Server
  • Azure CLI instalado.
  • Docker local instalado con la imagen que queremos subir al Container registry.

Procedimiento


Desde una terminal ingresar los comandos de Azure CLI

1.- Hacer login en el Container Registry con el siguiente comando y el nombre del Container Registry 

az acr login -n miazureregistry

Para ver todos los container registries, usa el siguiente comando.

az acr list

2.- Verificar que la imagen de Docker a subir está disponible con el siguiente comando.

docker images

3.- Etiquetar la imagen a subir utilizando el nombre del Login Server de Azure como en el siguiente comando:

docker tag tibco/bwce miazureregistry.azurecr.io/tibco/bwce

4.- Hacer Docker push para subir la imagen al Container registry de Azure

docker push miazureregistry.azurecr.io/tibco/bwce

5.- Para verificar que la imagen fue subida, ejecutar el siguiente comando. También se puede verificar desde la interfaz gráfica en el portal de Azure.

az acr repository list --name miazureregistry

También dejo aquí abajo video de cómo realizar este procedimiento.

Espero les sirva.

martes, 3 de mayo de 2022

Connection timed out after 20 seconds of inactivity

FTP connection error: Connection timed out after 20 seconds of inactivity


Hola.

Estoy obteniendo el siguiente error al intentar conectarme a un sitio FTP básico en IIS. El sitio FTP está configurado y puedo accederlo internamente desde el servidor mismo pero no desde fuera. El sitio no tiene seguridad activada (No SSL

Obtengo el siguiente mensaje al utilizar un cliente de FTP (FileZilla)

Connection timed out after 20 seconds of inactivity

Status:      Resolving address of medicamentos.bo

Status:      Connecting to 72.167.20.94:21...

Error:        Connection timed out after 20 seconds of inactivity

Error:        Could not connect to server


Para resolver este problema, realicé los siguientes pasos:

1.- En el sitio FTP seleccionar FTP Firewall Support.

En el campo de External IP Address of Firewall introducir la IP publica del servidor

IIS - FTP Firewall Support

2.- Buscar Servicios, desde el Inicio y reiniciar el servicio Microsoft FTP Service. Este reinicio es muy importante porque los cambios hechos en IIS no se tomarán hasta que se reincide el servicio FTP.

Services - Microsoft FTP Service

3.- En el programa cliente de FTP verificar que la opción Encryption sea: Only use plain FTP (insecure) como en la siguiente imagen.

FileZilla - Site Manager

4.- Clic en conectar y ya deben poder acceder al sitio FTP. 

Status:      Resolving address of medicamentos.bo

Status:      Connecting to 72.167.20.94:21...

Status:      Connection established, waiting for welcome message...

Status:      Plain FTP is insecure. Please switch to FTP over TLS.

Status:      Logged in

Status:      Retrieving directory listing of "/"...

Status:      Calculating timezone offset of server...

Status:      Timezone offset of server is -14400 seconds.

Status:      Directory listing of "/" successful


Espero les sirva.