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-schemafor 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
Enhanced sequential proxy performance, Redis Cluster support, offline linter, and more!
- 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 initthat 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_sizeandmax_itemsattributes. -
The linter can work now offline with
--lint-no-networkor can use a custom schema with--lint-schema -
Lua functions now include a
headerListhelper to set headers with multiple values. -
Lua function
http_responsehas been added to themodifier/lua-endpointadd more flexibility. -
Lua’s
debug.dump()function can now dump a nativehttp_responseobject. -
The plugin
content-replaceris now implemented as a native componentmodifier/response-bodywith more features -
The plugin
response-schema-validatoris 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
auditcommand has added new rules. -
In the gRPC client when one of the inputs for a well known type of
TimestamporDurationis 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_bytesin 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_h2cunder therouterentry was deprecated in previous versions and has been removed. Place it at the root level instead. -
The parameter
connection_poolin the Redis rate limit configuration has been renamed toconnection_nameto support the addition of Redis clusters. The old parameter will be removed in future versions. -
The plugin
response-schema-validatorhas 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-replacerhas been deprecated and replaced by the native componentmodifier/response-body(See migration notes). The old plugin will be removed in future versions. -
The
public_keyandprivate_keyfields in thetlsconfiguration were deprecated in the previous version and have been removed. Migrate to the newer syntax -
The commands
krakend generate openapiandkrakend generate from openapiwere deprecated on 2.3 and have been removed. Please use the commandkrakend openapiinstead. -
The commands
krakend check-pluginandkrakend test-pluginare deprecated and will be removed. Please rename them tokrakend plugin checkandkrakend 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.