Kong Gateway, configurar con yaml o interfaz!!??
Esta es la continuación de un artículo que escribí hace poco tiempo sobre usar Kong Gateway, algunas de sus ventajas e instalación.
Artículo anterior aquí.
Qué decisión tomar cuando tenemos dos formas de hacer algo!
A continuación analizaremos las dos formas que tenemos en Kong Gateway para construir los recursos(proxy’s, router’s, etc), aplicar plugins, crear consumers y sus credenciales.
Configurar Kong Gateway con interfaz de usuario (UI).
Podemos comenzar aclarando que Kong Gateway no posee una (UI) oficial que sea gratuita. Eso nos lleva a buscar UI disponibles, encontrando a Konga y Kong admin UI, gracias a la colaboración de desarrolladores que les gusta aportar con su conocimiento y trabajo.
Habas UI nos permiten crear Service’s, exponerlos con Route’s, a su vez le podemos asociar plugins de seguridad como:
- Basic Authentication — APIs contain a basic authentication feature.
- Key Authentication — You can add a key authentication to your APIs.
- OAuth 2.0 Authentication — You can integrate OAuth 2.0 authentication to your APIs.
- HMAC Authentication — You can add HMAC Authentication to your APIs
- JWT — Authenticate and verify JSON Web Tokens
- LDAP Authentication — Integrate Kong with a LDAP server
- Security — Protect your services with additional security layer
- ACL — Manage and authenticate access to APIs
- CORS — Developers can make request from the browser
- Dynamic SSL — Integrate an SSL certificate for the service
- IP Restriction — Whitelist or blacklist IPs that can make requests
- Bot Detection — You can detect bots.
También podemos integrar herramientas de Logging y Monitoreo con:
Logging
- TCP — You can request and response logs to a TCP server
- UDP — You can send request and response logs to a UDP server
- File — Response data to a log file on disk
- StatsD — You can send request and response logs to StatsD
- Syslog — You can send request and response logs to Syslog
- Loggly — You can send request and response logs to Loggly
Monitoring
- Datadog — Visualize API metrics on Datadog
- Prometheus — Expose metrics related to Kong and proxied upstream
- Zipkin — Propagate Zipkin distributed tracing spans, and report.
Además podemos usar complementos de Traffic Control, Serverless, Transformations y muchos más.
Adicionalmente a partir de las últimas versiones podemos programar nuestros propios complementos con Golang, que antes solo se podían programar con Lua.
Si bien las UI son útil para trabajos rápidos, para ver si un configuración está bien por parte de áreas como “Operaciones” o pruebas que se hagan durante el desarrollo, no son recomendadas para un ambiente productivo.
Otra desventaja es que al hacer las configuraciones directamente en la UI, no van quedando versionadas, y al final se convierte en un proceso complejo tener los ambientes(desarrollo, test, producción) homologados. De esta forma es casi imposible implementar un proceso de DevOps aceptable para una empresa.
Configurar Kong Gateway con Recursos personalizados (yaml).
Siempre me gusta empezar por lo malo, y en este punto hay que mencionar que la curva de aprendizaje es mucho más lenta y la documentación no es tan rica en ejemplo como quisiéramos.
La siguiente imagen muestra cómo funciona:
Al usar los recursos personalizados que no entrega Kong Ingress Controller, podemos tener todas las ventajas y opciones que podíamos hacer con las UI, y a demás nuestras configuraciones podrán ser versionadas en archivos .yaml. Lo que nos da la ventaja de poder implementar un flujo de DevOps con pipelines para que podamos llevar nuestras proxy’s y sus configuraciones hasta producción con el menor esfuerzo posible. Un ejemplo de yaml para crear un consumer es:
apiVersion: configuration.konghq.com/v1
kind: KongConsumer
metadata:
name: consumerapi
namespace: api
username: userone
custom_id: 62eb165c070a41d
Teniendo claro cuales son las desventajas y ventajas de cada forma, es fácil decidir cuál queremos usar. Usando los “Recursos Personalizados” sacrificamos un poco de tiempo aprendiendo cómo son las estructuras de los yaml y cómo se despliegan, pero ganamos algunas ventajas que pueden decidir el éxito de un proyecto.
Un claro ejemplo de que “Ágile no significa hacerlo rápido, sino hacerlo bien y que entregue valor”.
Espero les halla sido de valor, y siempre sera un agrado sus opiniones y/o comentarios.
Agradezco a Panagis Tselentis y a Pocketdigi por sus esfuerzos por crear UI para que se haga más fácil y entendible trabajar con Kong Gateway Community.