diff --git a/Dockerfile b/Dockerfile index a4a3d63..9c6a177 100644 --- a/Dockerfile +++ b/Dockerfile @@ -45,4 +45,4 @@ RUN mkdir /site/ WORKDIR /site/ EXPOSE 4000 # Note --incremental mode is ineffective on the Mac owing to https://github.com/containers/podman/issues/22343. Use force_regenerate.sh to trigger the incremental reload after changing the file on the host. -CMD [ "bash", "-c", "eval \"$(rbenv init -)\" && cp -r /css/_sass/bootstrap /site/_sass/ && bundle exec jekyll serve --host ${JEKYLL_SERVE_BIND} --incremental --disable-disk-cache --destination /tmp/site"] +CMD [ "bash", "-c", "eval \"$(rbenv init -)\" && cp -r /css/_sass/bootstrap /site/_sass/ && bundle exec jekyll serve ${JEKYLL_SERVE_ARGS} --host ${JEKYLL_SERVE_BIND} --incremental --disable-disk-cache --destination /tmp/site"] diff --git a/_posts/2026-04-01-release-0_20_0.md b/_posts/2026-04-01-release-0_20_0.md new file mode 100644 index 0000000..c710fef --- /dev/null +++ b/_posts/2026-04-01-release-0_20_0.md @@ -0,0 +1,51 @@ +--- +layout: post +title: "Kroxylicious release 0.20.0" +date: 2026-04-01 00:00:00 +0000 +author: "Rob Young" +author_url: "https://github.com/robobario" +# noinspection YAMLSchemaValidation +categories: blog kroxylicious-proxy releases +tags: [ "releases", "kroxylicious-proxy" ] +--- + +We're excited to announce the release of [Kroxylicious 0.20.0](https://github.com/kroxylicious/kroxylicious/releases/tag/v0.20.0)! There's been a lot of action, check out the full [Changelog](https://github.com/kroxylicious/kroxylicious/blob/main/CHANGELOG.md#0200) for everything including deprecations, changes, and removals. + +Here are the highlights: + +### Connection Expiration Filter + +Thanks to the work of [May-Abo](https://github.com/May-Abo), a new filter joins the family! The Connection Expiration filter closes client connections after a configurable maximum age. This is perfect for dynamic environments like Kubernetes where you want to rebalance connections across proxy instances as pods scale up or down. + +### Entity Isolation Filter + +Multi-tenancy gets even better with the Entity Isolation filter. Initially supporting `groupId` and `transactionalId` entity types, this filter helps you enforce isolation boundaries between tenants sharing a cluster. + +### Record Validation Filter - Apicurio v3 Upgrade + +- Record validation just got a major upgrade with Apicurio v3. The default schema identification has changed from `globalId` to `contentId` for better interoperability with Confluent-based Kafka clients. To support migrations, you can still use the old behavior by setting `wireFormatVersion` to `V2`, though this mode is deprecated and will be removed in a future release. +- The schema validation filter can now connect to a schema registry protected by internally signed TLS certificates. One less obstacle for air-gapped or enterprise environments. + +### Kubernetes Operator Enhancements + +Two improvements for Kubernetes users: +- **OpenShift Route Support**: Enable external access to Virtual Clusters via OpenShift Routes using `KafkaProxyIngress.spec.openShiftRoute`. Off-cluster client access is now a breeze on OpenShift. +- **Server-Side Apply**: The operator now uses Server-Side Apply for all dependent resources. Existing deployments are unaffected, and externally-applied patches (like annotations from observability tooling) will now survive operator reconciles. + +### Javadocs on the Website + +Public API Javadocs are now published alongside version-specific documentation on [kroxylicious.io](https://kroxylicious.io/documentation/0.20.0/javadoc/index.html), making it easier to explore our APIs without leaving your browser. + +### Configuration Improvements + +- **Configurable Netty shutdown**: New `shutdownQuietPeriod` and `shutdownTimeout` fields give you fine-grained control over Netty shutdown behavior with Go-style durations. +- **Duration serialization**: Filter Config classes can now use `Duration` types that automatically serialize to/from Go-style strings (e.g., "1h") without any annotations. + +### Artefacts + +Binary distributions and container images are available on the [download](https://kroxylicious.io/download/0.20.0/) page. + +### Feedback + +We'd love to hear from you! Whether you're kicking the tyres, running Kroxylicious in production, or just find the project interesting — drop by and say hello. +You can reach us through [Slack](https://kroxylicious.slack.com), [GitHub](https://github.com/kroxylicious/kroxylicious/issues) or even [bsky](https://bsky.app/profile/kroxylicious.io)), or tell us in person on one of our upcoming [community calls]({% link join-us/community-call/index.md %}). diff --git a/run-snapshot.sh b/run-snapshot.sh index 624a469..875aa98 100755 --- a/run-snapshot.sh +++ b/run-snapshot.sh @@ -24,4 +24,5 @@ cd ${KROXYLICIOUS_DIR} mvn -P dist clean package -pl :kroxylicious-docs cp -r kroxylicious-docs/target/web/* ${SCRIPT_DIR} cd ${SCRIPT_DIR} +export JEKYLL_SERVE_ARGS=--future exec ./run.sh diff --git a/run.sh b/run.sh index 921cdc9..3a8e08c 100755 --- a/run.sh +++ b/run.sh @@ -15,12 +15,16 @@ else RUN_ARGS+=(--net host) fi +if [ -n "${JEKYLL_SERVE_ARGS}" ]; then + RUN_ARGS+=(--env JEKYLL_SERVE_ARGS="${JEKYLL_SERVE_ARGS}") +fi + if [ "$CONTAINER_ENGINE" = 'podman' ]; then RUN_ARGS+=(-v $(pwd):/site/:Z) fi RUN_ARGS+=(--rm --name jekll_serve -it kroxylicious-website) -${CONTAINER_ENGINE} build . -t kroxylicious-website +${CONTAINER_ENGINE} build . -t kroxylicious-website ${CONTAINER_ENGINE} run "${RUN_ARGS[@]}"