KrakenD EE v2.9 released: Redis Cluster Support, LRU, WebSockets Upgrades & More!
by Albert Lombarte
We’re excited to announce the release of KrakenD Enterprise Edition (EE) 2.9, packed with powerful new features and enhancements across a lot of components. This release brings greater flexibility, caching improvements, Redis Cluster support, enhanced WebSockets, and more. See below the most relevant changes.
More data on the sequential proxy
The sequential proxy was limited to passing previous calls’ data to the next call’s URL. Now you can propagate parameters or the entire body response of previous calls, allowing more flexibility when passing data from one backend to the other. The limitation of passing data only on the url_pattern
is now history. See an example of passing a previous body to the next call.
The sequential has also been reworked to improve its performance.
Automatically generate boilerplate for Go plugins
Developers writing custom plugins will be delighted with the new krakend plugin init
command that generates the necessary source code to work with custom plugins, accelerating development and customization. It produces the .go
and Makefile
of the steps needed to stop worrying about plugin compilation. The generated source code implements every possible interface and includes examples and comments to accelerate your adoption.
See the new Plugin generator
Redis cluster support for rate limiting
The Redis configuration extends its connection options to onboard Redis Clusters, making it easier to distribute rate limits across multiple Redis nodes. You can add clusters
in addition to the existing connection_pools
declaration.
See the Redis cluster configuration
Enhanced LRU Caching Mechanism
A new LRU Cache is now available, providing better memory management and control. When you add the two attributes below, you control the amount of content you allow the system to cache, and it also enables the LRU algorithm (Least Recently Used) to rotate items once the capacity is full.
max_size
: Defines the maximum cache size.max_items
: Limits the number of stored items.
Offline linter support
The KrakenD linter can now work without an internet connection using the --lint-no-network
flag. The new flag accelerates the execution in CI/CD pipelines and allows customers in air-gapped environments to lint the configurations offline.
Replace krakend check --lint
by --lint-no-network
.
From plugin to native component
We are continuing to migrate the few pending Enterprise plugins to convert them to native components. In this release:
content-replacer
: Now implemented asmodifier/response-body
, offering expanded features.minimum-response
: Replaced byvalidation/response-json-schema
for response validation.
WebSockets enhancements
The WebSockets and gRPC components have received enhancements, like enabling header propagation in direct connections, supporting binary communication transparently, or adding custom subprotocols to integrate technologies like Streamlit.
The release contains more changes, which you can see below. Ready to upgrade?
🚀 Summary of changes for EEv2.9
- The sequential proxy can now propagate parameters or the entire body response of previous calls. It has also been reworked to improve its performance.
-
Added a new plugin generator command
krakend plugin init
that generates all the boilerplate necessary to work with plugins - Support for Redis Clusters in the Redis Service Rate Limit
-
Added an LRU Cache with
max_size
andmax_items
attributes. -
The linter can work now offline with
--lint-no-network
or can use a custom schema with--lint-schema
-
Lua functions now include a
headerList
helper to set headers with multiple values. -
Lua function
http_response
has been added to themodifier/lua-endpoint
add more flexibility. -
Lua’s
debug.dump()
function can now dump a nativehttp_response
object. -
The plugin
content-replacer
is now implemented as a native componentmodifier/response-body
with more features -
The plugin
response-schema-validator
is now implemented as a native componentvalidation/response-json-schema
- WebSockets direct connection supports now header propagation.
-
WebSockets supports now binary WS transparently and allows custom
subprotocols
(e.g., Streamlit support). -
The
audit
command has added new rules. -
In the gRPC client when one of the inputs for a well known type of
Timestamp
orDuration
is a string instead of fields, you can treat the string as a RFC3339 time value forTimestamp
, or a duration string. - Added support for insecure HTTP connections on OpenTelemetry (as opposed to only HTTPS)
-
New attribute
input_assume_bytes
in the gRPC client. - Fix message type presence on gRPC
- Corrected OpenTelemetry bug where the value of router errors was always 404 even if it was a 405
-
The attribute
use_h2c
under therouter
entry was deprecated in previous versions and has been removed. Place it at the root level instead. -
The parameter
connection_pool
in the Redis rate limit configuration has been renamed toconnection_name
to support the addition of Redis clusters. The old parameter will be removed in future versions. -
The plugin
response-schema-validator
has been deprecated and replaced by the native componentvalidation/response-json-schema
(See migration notes). The old plugin will be removed in future versions. -
The plugin
content-replacer
has been deprecated and replaced by the native componentmodifier/response-body
(See migration notes). The old plugin will be removed in future versions. -
The
public_key
andprivate_key
fields in thetls
configuration were deprecated in the previous version and have been removed. Migrate to the newer syntax -
The commands
krakend generate openapi
andkrakend generate from openapi
were deprecated on 2.3 and have been removed. Please use the commandkrakend openapi
instead. -
The commands
krakend check-plugin
andkrakend test-plugin
are deprecated and will be removed. Please rename them tokrakend plugin check
andkrakend plugin test
, no functionality changes. - Upgraded go to 1.22.12
- Upgrade Docker image base to Alpine 3.21
Upgrading to the latest version is always advised.