Apache Camel Karavan es una herramienta de integración para Apache Camel que tiene como objetivo aumentar la productividad del desarrollador a través de la visualización de rutas de Camel, Karavan es una herramienta gratuita y de código abierto que se puede utilizar en cualquier entorno de desarrollo, incluido VS Code y su instalación en Kubernetes o Docker.
Karavan proporciona una serie de características que hacen que sea una herramienta poderosa para la integración de aplicaciones, que incluyen:
- Diseño visual de rutas de Apache Camel: Karavan proporciona una interfaz de arrastrar y soltar para diseñar rutas de Apache Camel, lo que facilita a los desarrolladores visualizar y comprender sus integraciones.
- Integración con entornos de ejecución: Karavan se integra con los entornos de ejecución de Apache Camel más populares, como Spring Boot y Quarkus, lo que facilita el despliegue y la administración de integraciones de Apache Camel.
- Pipelines para empaquetado, construcción de imágenes y despliegue: Karavan proporciona pipelines para empaquetar integraciones de Apache Camel en JAR o imágenes Docker, y desplegarlas en Kubernetes.
- Desarrollo de Kamelets personalizados: Karavan proporciona soporte para el desarrollo de Kamelets personalizados, que son componentes de integración reutilizables que se pueden implementar y administrar fácilmente.
Nuestro primer paseo en Karavan.
Requerimientos
Cosas que vas a necesitar para el siguiente ejemplo:
- Repositorio de Git - Usaré repositorio en Github.
- Registro de imágenes - Usaré el registro de Github. - ghcr.io
- Clúster de Kubernetes - Usaré una instancia de GKE.
- Instalación de JBang.
Instalar Karavan en GKE.
NOTA: "Los siguiente comandos utilizarán tu entorno de Kubernetes asegurate de estar conectado a tu clúster."
- Configura tus variables de entorno
export GITHUB_USERNAME=<DUMMY_USERNAME>
export GITHUB_REPOSITORY=<URL_REPOSITORY>
export GITHUB_TOKEN=<GITHUB_TOKEN>
export REGISTRY_URL=ghcr.io
export REGISTRY_USERNAME=<DUMMY_USER>
export REGISTRY_PASSWORD=<DUMMY_PASSWORD>
- Descarga el instalador de Maven Central
curl -O https://repo1.maven.org/maven2/org/apache/camel/karavan/karavan-installer/4.1.0/karavan-installer-4.1.0.jar
- Instalar Karavan
jbang org.apache.camel.karavan:karavan-installer:4.1.0 --image-registry=$REGISTRY_URL --image-group=$GITHUB_USERNAME --git-repository=$GITHUB_REPOSITORY --git-username=$GITHUB_USERNAME --git-password=$GITHUB_TOKEN --image-registry-username=$REGISTRY_USERNAME --image-registry-password=$REGISTRY_PASSWORD
Con esta configuración Karavan almacenará tus proyectos en el repositorio de Github para tener un control de versiones y guardará las imágenes de contenedores en el registro de artefactos de Github.
Como resultado obtendremos la creación del namespace "karavan", asi como los pods de infinispan y karavan.
kubectl get pods -n karavan
NAME READY STATUS RESTARTS AGE
infinispan-0 1/1 Running 0 4m39s
karavan-79f4b44cdd-nd67r 1/1 Running 0 4m38s
- Exponer servicio de Karavan para su consumo en internet
kubectl apply -f - <<EOF
---
apiVersion: "v1"
kind: "Service"
metadata:
name: "karavan-service"
namespace: "karavan"
labels:
app.kubernetes.io/runtime: "quarkus"
spec:
ports:
- protocol: "TCP"
port: 80
targetPort: 8080
selector:
app: "karavan"
type: "LoadBalancer"
loadBalancerIP: ""
EOF
- Cuando el servicio se haya creado correctamente obtenemos la IP publica para consumir la consola de Karavan
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
infinispan ClusterIP 10.8.17.201 <none> 11222/TCP 10m
karavan-service LoadBalancer 10.8.29.44 38.45.107.134 80:31998/TCP 42s
- Abre en tu navegador la siguiente dirección http://<MY_EXTERNAL_IP/ recuerda modificar por tu ip del servicio de Karavan
Crear una nueva ruta de integración con Karavan.
- En la página principal, da clic en "Create" para añadir un nuevo proyecto.
- Crea un nuevo proyecto con la siguiente información:
- Name: hello-world
- Description: Hello World Camel
- Project ID: hello-world
- Clic sobre el nombre de nuestro proyecto para añadir nuevas rutas de Camel.
- Crea una nueva Integración, dando clic sobre "Create"
- Crea una nueva Integración con la siguiente información:
- Type: Integration (camel.yaml)
- Name: hello-world
- Ahora se ha creado un nuevo archivo con el nombre hello-world-camel.yaml. Dentro del proyecto hello-world camel, seleccione la pestaña "Routes" y, a continuación, "Create route".
- En la pestaña "Components", busque la palabra "direct".
- Haga clic en el icono "Direct". Introduzca internal-route en el campo de "Name" en los parámetros.
- Añada más pasos a la ruta. Haga clic en el icono + bajo "Direct".
- Seleccione la pestaña "Integration Patterns" y, a continuación, busque la palabra "Log".
- Configurar el componente "Log" para imprimir el mensaje "${body}".
Crear una API REST.
- Haga clic en la pestaña "REST" y, a continuación, seleccione "Create service".
- Selecciona "Add Method".
- Elija el método "Post".
- Vincule los parámetros REST a la ruta "direct". Dentro de la configuración del método POST, seleccione To : direct:internal-route. Esto dirigirá la solicitud entrante a internal-route.
- Puede inspeccionar el contenido del archivo Camel YAML haciendo clic en la pestaña "YAML", los ID se generan aleatoriamente.
Ejecute y pruebe dentro de Karavan.
- Ejecute su Ruta de Camel dando clic en el botón "Run".
- Después de que el programa compile, verá la siguiente pantalla.
- Dentro de GKE estará en ejecución un pod llamado "hello-world".
kubectl get pods -n karavan
hello-world 1/1 Running 0 2m3s
infinispan-0 1/1 Running 0 4h44m
karavan-79f4b44cdd-nd67r 1/1 Running 0 4h44m
- Para probar de forma local haremos un port-forward usando kubectl.
kubectl port-forward hello-world 8080:8080 -n karavan
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080
- Mantenga el port-forward ejecutándose en el terminal actual. Abra una nueva terminal y pruebe el servicio utilizando siguiente comando cURL:
curl localhost:8080 -X POST -d "{\"hello\":\"world\"}" -H "Content-Type: application/json"
- Recibirá como respuesta.
{"hello":"world"}
- Vuelva a la aplicación de Karavan que ejecuta la ruta y verifique la impresión del Log donde ver el mensaje.
- Detenga la ejecución dando clic sobre el icono "Delete container".
Gestione las versiones de código de su ruta de Camel
- Clic sobre el nombre de nuestro proyecto.
- Almacene el código de su ruta en el repositorio de Github, dando clic sobre el boton "Push".
- Esto generará una nueva carpeta en su repositorio de Github.
Construya imagen de contenedor y despliegue dentro de GKE.
- Haga clic en la pestaña "Build" y, a continuación, de clic sobre el botón "Build".
- Después de que la tarea de construcción termine, verá la siguiente pantalla.
- Como resultado el servicio creara una nueva imagen de contenedor en el registro configurado en la instalación.
- Configure GKE para permitir el despliegue de la imagen de contenedor.
kubectl create secret docker-registry myregistrykey --docker-server=ghcr.io \
--docker-username=$REGISTRY_USERNAME --docker-password=$REGISTRY_PASSWORD \
--docker-email=<MY_EMAIL> -n karavan
- Permita hacer pull de la imagen de contenedor en su namespace.
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "myregistrykey"}]}'
- Para probar de forma local haremos un port-forward usando kubectl.
kubectl port-forward deployment/hello-world 8080:8080 -n karavan
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080
- Mantenga el port-forward ejecutándose en el terminal actual. Abra una nueva terminal y pruebe el servicio utilizando siguiente comando cURL:
curl localhost:8080 -X POST -d "{\"hello\":\"world\"}" -H "Content-Type: application/json"
- Recibirá como respuesta.
{"hello":"world"}
¡Felicidades! Has desplegado con éxito un servicio usando Apache Camel y Karavan.
Conclusión
Karavan es una herramienta útil para desarrolladores que desean crear integraciones de aplicaciones de forma rápida y sencilla. Es una herramienta especialmente útil para desarrolladores que no están familiarizados con Apache Camel.
Recordemos que Karavan es un proyecto comunitario, pero existen soluciones empresariales que se basan en este proyecto, que complementan la solución brindando soporte, seguridad y estabilidad.
Para más información visite Talisman Cloud.