Kong v2.6.0 Release Notes

  • πŸš€ > Release date: 2021/10/04

    Dependencies

    • ⬆️ Bumped openresty from 1.19.3.2 to 1.19.9.1 #7430
    • ⬆️ Bumped openssl from 1.1.1k to 1.1.1l 7767
    • ⬆️ Bumped lua-resty-http from 0.15 to 0.16.1 #7797
    • ⬆️ Bumped Penlight to 1.11.0 #7736
    • ⬆️ Bumped lua-resty-http from 0.15 to 0.16.1 #7797
    • ⬆️ Bumped lua-protobuf from 0.3.2 to 0.3.3 #7656
    • ⬆️ Bumped lua-resty-openssl from 0.7.3 to 0.7.4 #7657
    • ⬆️ Bumped lua-resty-acme from 0.6 to 0.7.1 #7658
    • ⬆️ Bumped grpcurl from 1.8.1 to 1.8.2 #7659
    • ⬆️ Bumped luasec from 1.0.1 to 1.0.2 #7750
    • ⬆️ Bumped lua-resty-ipmatcher to 0.6.1 #7703 Thanks EpicEric for the patch!

    🚚 All Kong Gateway OSS plugins will be moved from individual repositories and centralized into the main Kong Gateway (OSS) repository. We are making a gradual transition. On this πŸš€ release:

    • 🚚 Moved AWS-Lambda inside the Kong repo #7464.
    • 🚚 Moved ACME inside the Kong repo #7464.
    • 🚚 Moved Prometheus inside the Kong repo #7666.
    • 🚚 Moved Session inside the Kong repo #7738.
    • 🚚 Moved GRPC-web inside the Kong repo #7782.
    • 🚚 Moved Serverless functions inside the Kong repo #7792.

    βž• Additions

    Core

    • πŸ†• New schema entity validator: mutually_exclusive. It accepts a list of fields. If more than 1 of those fields is set simultaneously, the entity is considered invalid. #7765

    🐎 Performance

    πŸš€ On this release we've done some special efforts with regards to performance.

    🐎 There's a new performance workflow which periodically checks new code additions against some typical scenarios #7030 #7547

    🐎 In addition to that, the following changes were specifically included to improve performance:

    • ⬇️ Reduced unnecessary reads of ngx.var #7840
    • Loaded more indexed variables #7849
    • ⚑️ Optimized table creation in Balancer #7852
    • ⚑️ Reduce calls to ngx.update_time #7853
    • πŸ‘‰ Use read-only replica for PostgreSQL meta-schema reading #7454
    • URL escaping detects cases when it's not needed and early-exits #7742
    • Accelerated variable loading via indexes #7818
    • βœ‚ Removed unnecessary call to get_phase in balancer #7854

    πŸ”§ Configuration

    • πŸ‘ Enable IPV6 on dns_order as unsupported experimental feature. Please give it a try and report back any issues #7819.
    • The template renderer can now use os.getenv #6872.

    Hybrid Mode

    • Data plane is able to eliminate some unknown fields when Control Plane is using a more modern version #7827.

    Admin API

    • βž• Added support for the HTTP HEAD method for all Admin API endpoints #7796
    • βž• Added better support for OPTIONS requests. Previously, the Admin API replied the same on all OPTIONS requests, where as now OPTIONS request will only reply to routes that our Admin API has. Non-existing routes will have a 404 returned. It also adds Allow header to responses, both Allow and Access-Control-Allow-Methods now contain only the methods that the specific API supports. #7830

    πŸ”Œ Plugins

    • AWS-Lambda: The plugin will now try to detect the AWS region by using AWS_REGION and AWS_DEFAULT_REGION environment variables (when not specified with the plugin configuration). This allows to specify a 'region' on a per Kong node basis, hence adding the ability to invoke the Lamda in the same region where Kong is located. #7765
    • Datadog: host and port config options can be configured from environment variables KONG_DATADOG_AGENT_HOST and KONG_DATADOG_AGENT_PORT. This allows to set different destinations on a per Kong node basis, which makes multi-DC setups easier and in Kubernetes allows to run the datadog agents as a daemon-set. #7463 Thanks rallyben for the patch!
    • Prometheus: A new metricΒ data_plane_cluster_cert_expiry_timestampΒ is added to expose the Data Plane'sΒ cluster_certΒ expiry timestamp for improved monitoring in Hybrid Mode.Β #7800.

    Request Termination:

    • πŸ†• New trigger config option, which makes the plugin only activate for any requests with a header or query parameter named like the trigger. This can be a great debugging aid, without impacting actual traffic being processed. #6744.
    • πŸ”Œ The request-echo config option was added. If set, the plugin responds with a copy of the incoming request. This eases troubleshooting when Kong is behind one or more other proxies or LB's, especially when combined with the new 'trigger' option. #6744.

    GRPC-Gateway:

    • Fields of type .google.protobuf.Timestamp on the gRPC side are now transcoded to and from ISO8601 strings in the REST side. #7538
    • URI arguments like ..?foo.bar=x&foo.baz=y are interpreted as structured fields, equivalent to {"foo": {"bar": "x", "baz": "y"}} #7564 Thanks git-torrent for the patch!

    πŸ›  Fixes

    Core

    • Balancer retries now correctly set the :authority pseudo-header on balancer retries #7725.
    • Healthchecks are now stopped while the Balancer is being recreated #7549.
    • πŸ›  Fixed an issue in which a malformed Accept header could cause unexpected HTTP 500 #7757.
    • 🚚 Kong no longer removes Proxy-Authentication request header and Proxy-Authenticate response header #7724.
    • πŸ›  Fixed an issue where Kong would not sort correctly Routes with both regex and prefix paths #7695 Thanks jiachinzhao for the patch!

    Hybrid Mode

    • Ensure data plane config thread is terminated gracefully, preventing a semi-deadlocked state #7568 Thanks flrgh for the patch!
    • πŸ”Œ Older data planes using aws-lambda, grpc-web or request-termination plugins can now talk with newer control planes by ignoring new plugin fields. #7881
    CLI
    • πŸ”Œ kong config parse no longer crashes when there's a Go plugin server enabled #7589.
    πŸ”§ Configuration
    • πŸ”§ Declarative Configuration parser now prints more correct errors when pointing unknown foreign references #7756.
    • πŸ”§ YAML anchors in Declarative Configuration are properly processed #7748.
    Admin API
    • GET /upstreams/:upstreams/targets/:target no longer returns 404 when target weight is 0 #7758.
    PDK
    • kong.response.exit now uses customized "Content-Length" header when found #7828.
    πŸ”Œ Plugins
    • ACME: Dots in wildcard domains are escaped #7839.
    • Prometheus: Upstream's health info now includes previously missing subsystem field #7802.
    • Proxy-Cache: Fixed an issue where the plugin would sometimes fetch data from the cache but not return it #7775 Thanks agile6v for the patch!

    Back to TOC