Kirin
Gestionar los gastos domésticos no es tarea sencilla, entre gastos fijos, compras mensuales, ahorros, ... al final es una cantidad enorme de información que se debe organizar correctamente para lograr terminar el año en positivo.
Para poder gestionar toda esta información construí a Kirin, un proyecto que ha ido evolucionando para adaptarse a nuevas necesidades.
Este está construido como un servicio REST que permite almacenar datos con total libertad.
Requisitos
La autenticación se realiza mediante OpenID Connect, cada usuario debe estar registrado en el Identity Provider y disponer del rol adecuado para acceder a Kirin.
Varios Identity Provider disponen de roles, pero únicamente se han realizado pruebas con los de Keycloak, así que podría no ser compatible con el resto.
Las diferentes secciones permiten categorizar los datos, para ello Kirin utiliza los datos de Toranku.
Los datos se almacenan en PostgreSQL.
Keycloak
Para acceder a Kirin, el usuario deberá tener el rol correcto:
Rol | Descripción |
---|---|
kirin:user | Servicio con acceso a Kirin |
Además, requiere un cliente específico para acceder a Toranku, explicado en su sección.
Despliegue
Más detalles en Artifact Hub.
Creamos el namespace.
kubectl create namespace kirin
Añadimos el repositorio.
helm repo add kirin https://moon-kirin.gitlab.io/helmrepo
helm repo update
Kirin está diseñado en Java, así que, si el Identity Provider o Toranku están bajo un certificado auto firmado, necesitaremos indicarle cómo validarlo. Para ello, Java dispone del almacén de certificados cacerts
donde indicaremos el certificado padre (CA).
Este fichero se debe crear previamente y añadirlo como un secret en el despliegue.
El fichero cacerts se puede encontrar en cualquier instalación o imagen con Java, también en la ruta /cacerts
de Kirin.
Con la herramienta keytool
de Java se incorporan certificados dentro de este fichero. El comando difiere ligeramente según la versión de la herramienta.
Una vez se dispone del fichero, se crea como un secret.
kubectl create secret generic java-cacerts --from-file=cacerts --namespace kirin
La configuración requiere exponer el servicio en la Extranet, asignar el cacerts
, la base de datos y los datos para conectar a Toranku.
ingress:
enabled: true
className: nginx-extranet
annotations:
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
host: kirin.domain.intranet
java:
cacerts: java-cacerts
cacertsKey: cacerts
database:
url: jdbc:postgresql://postgres.domain.intranet:5432/kirin
username: dbUser
password: dbPassword
oidc:
url: https://keycloak.domain.cat/realms/Extranet
toranku:
url: https://toranku.domain.intranet
oidcUrl: https://keycloak.domain.cat/realms/Intranet
oidcClientId: ClientId
oidcSecret: Secret
La contraseña de la base de datos y el secret de OIDC son almacenados en diferentes secrets.
Desplegamos el servicio.
helm upgrade --install kirin kirin/kirin \
-f kirin-values.yaml \
--namespace kirin