Releases: cloudfoundry/routing-release
0.341.0
0.341.0
Release Date: June 24, 2025
Changes
- Added the ability for operators to completely override the BBR metadata to control what restores block on.
⚠️ Removed the deprecated router.max_header_kb property. Please use router.max_request_header_kb. Thanks @kart2bc !⚠️ Removed the ability for operators to configure logging timestamps. Only RFC3339 is permitted now. Thanks @kart2bc !- Bumped to a newer version of the cf-cli for acceptance tests
Bosh Job Spec changes:
diff --git a/jobs/gorouter/spec b/jobs/gorouter/spec
index 8378da138..a9e55d41a 100644
--- a/jobs/gorouter/spec
+++ b/jobs/gorouter/spec
@@ -287,20 +287,13 @@ properties:
router.route_services_strict_signature_validation:
description: "Enforce strict validation of a route service signature"
default: false
- router.max_header_kb:
- description: |
- Deprecated, use router.max_request_header_kb instead which is equivalent to this option.
- default: 1024 # 1Mb
router.max_request_header_kb:
description: |
This value controls the maximum number of bytes (in KB) the gorouter will read
parsing the request header's keys and values, including the request
line. It does not limit the size of the request body. Requests with
larger headers will result in a 431 status code. Must be between 1 and 1024kb.
- Note: This value takes precedence over router.max_header_kb but has no default to not break
- existing setups. If you previously configured router.max_header_kb it is recommended to
- switch to this property instead.
- example: 1024 # 1Mb
+ default: 1024 # 1Mb
router.max_response_header_kb:
description: |
This value controls the maximum number of bytes (in KB) the gorouter will read
@@ -352,13 +345,6 @@ properties:
stderr logs.
Available fields are: backend_time, dial_time, dns_time, failed_attempts, failed_attempts_time, local_address, tls_time
default: []
- router.logging.format.timestamp:
- description: |
- Format for timestamp in component logs. Valid values are 'rfc3339', 'deprecated', and 'unix-epoch'."
- 'rfc3339' is the recommended format. It will result in all timestamps controlled by gorouter to be in RFC3339 format, which is human readable. This includes stdout, pre-start, and post-start logs. This does not include stderr logs from golang libraries.
- 'deprecated' will result in all timestamps being in the format they were before the rfc3339 flag was introduced. This format is different for different logs. We do not recommend using this flag unless you have scripts that expect a particular timestamp format.
- 'unix-epoch' is an old flag that we do not recommend using, but we are keeping for backwards compatibility. It will result in the gorouter logs to be in unix-epoch format. This does not effect pre-start or post-start logs. This does not effect stderr logs from golang libaries.
- default: "rfc3339"
router.enable_proxy:
description: "Enables support for the popular PROXY protocol, allowing downstream load balancers that do not support HTTP to pass along client information."
default: false
diff --git a/jobs/routing-api/spec b/jobs/routing-api/spec
index bea7e6ca1..751eefe2f 100644
--- a/jobs/routing-api/spec
+++ b/jobs/routing-api/spec
@@ -232,6 +232,13 @@ properties:
description: "Local port to listen on with admin endpoint (used for backup/restore locking)"
default: 15897
+ routing_api.bbr.metadata:
+ description: "BBR Metadata"
+ default: |
+ ---
+ restore_should_be_locked_before:
+ - job_name: uaa
+ release: uaa
release_level_backup:
default: false
✨ Built with go 1.24.4
Full Changelog: v0.340.0...v0.341.0
Resources
0.340.0
0.340.0
Release Date: June 06, 2025
Changes
- Bumped to golang 1.24.4
- Bumped to jq 1.8.0
Bosh Job Spec changes:
diff --git a/jobs/gorouter/spec b/jobs/gorouter/spec
index a88b19ab..8378da13 100644
--- a/jobs/gorouter/spec
+++ b/jobs/gorouter/spec
@@ -255,6 +255,10 @@ properties:
Maximum number of attempts on failing requests against route service URLs.
The minimum value for this setting is 1. This prevents gorouter from getting blocked by indefinite retries.
default: 3
+ router.route_services.enable_websockets:
+ description: |
+ Enable websocket connections for application routes bound to Route Services.
+ default: true
router.route_services.cert_chain:
description: Certificate chain used for client authentication to TLS-registered route services. In PEM format.
router.route_services.private_key:
✨ Built with go 1.24.4
Full Changelog: v0.339.0...v0.340.0
Resources
0.339.0
0.339.0
Release Date: June 04, 2025
Changes
- feat: RouteAdded and RouteDeleted metrics have been introduced - a3c5487. Thanks @Soha-Albaghdady / @maxmoehl
- feat: websockets are now supported via route services by default and can be disabled via:
router.route_services.enable_websockets: false
. #474. Thanks @Dariquest / @maxmoehl - refactor: 100-continue specific proxy has been removed, golang 1.23 handles it correctly - #483. Thanks @geofffranks
- refactor: route registry metrics have been fixed to report correct result #468 and #478. Thanks @maxmoehl / @hoffmaen
- ci: PR validation has been introduced to run linters and unit/integration tests. Trigger PR validation via label
ready-to-run
. Thanks @kart2bc - misc: pre-start checks below were merged prior to 0.338.0 via #481. They are kept for reference and were missed during CI migrations
Bosh Job Spec changes:
diff --git a/jobs/tcp_router/spec b/jobs/tcp_router/spec
index aa6b764c..234e3db9 100644
--- a/jobs/tcp_router/spec
+++ b/jobs/tcp_router/spec
@@ -19,6 +19,7 @@ templates:
haproxy.conf.template.erb: config/haproxy.conf.template
bpm.yml.erb: config/bpm.yml
drain.erb: bin/drain
+ pre-start.erb: bin/pre-start
post-start.erb: bin/post-start
packages:
✨ Built with go 1.24.3
Full Changelog: v0.338.0...v0.339.0
Resources
0.338.0
0.338.0
Release Date: May 16, 2025
Changes
- Update dependencies
✨ Built with go 1.24.3
Full Changelog: v0.337.0...v0.338.0
Resources
0.337.0
0.337.0
Release Date: May 07, 2025
Changes
- gorouter source code has been inlined directly into this release, and the separate repo has been archived. Thank you so much @maxmoehl!!! 🎉
- Additional request timeout properties have been added to routing-release + gorouter to provide more flexibility with overall request timeouts. Previously
request_timeout_in_seconds
applied to both HTTP/1 and HTTP/2 requests. This limited the ability to guard against slowloris attacks for HTTP/1 requests while also allowing GRPC streams over HTTP/2 to live indefinitely.request_timeout_in_seconds
is now used as a default value for the newhttp_1_request_timeout_in_seconds
andhttp_2_request_timeout_in_seconds
properties. See the property descriptions below for more information. Thanks @kart2bc! - Dependency updates
Bosh Job Spec changes:
diff --git a/jobs/gorouter/spec b/jobs/gorouter/spec
index d373561e..a88b19ab 100644
--- a/jobs/gorouter/spec
+++ b/jobs/gorouter/spec
@@ -523,6 +523,16 @@ properties:
Requests from router to backend endpoints that are longer than this duration will be canceled and logged as
`backend-request-timeout` errors. If set to 0 this timeout is disabled.
default: 900
+ http_1_request_timeout_in_seconds:
+ description: |
+ The amount of time HTTP/1 requests from the Gorouter to apps are allowed to live before being canceled.
+ Enter value in seconds. Set to -1 to disable timeouts. If set to 0, it inherits the value from request_timeout_in_seconds.
+ default: 0
+ http_2_request_timeout_in_seconds:
+ description: |
+ The amount of time HTTP/2 requests from the Gorouter to apps are allowed to live before being canceled.
+ Enter value in seconds. Set to -1 to disable timeouts. If set to 0, it inherits the value from request_timeout_in_seconds.
+ default: 0
endpoint_dial_timeout_in_seconds:
description: |
Maximum time in seconds for gorouter to establish a TCP connection with a backend. This timeout comes before `tls_handshake_timeout_in_seconds`
✨ Built with go 1.24.2
Full Changelog: v0.336.0...v0.337.0
Resources
0.336.0
0.336.0
Release Date: April 28, 2025
Changes
- haproxy bumped to v2.8.15
- When retrying retriable requests, Gorouter will now refresh the backend pool to detect backends that have been registered after the initial request was made. Thanks @mariash!
✨ Built with go 1.24.2
Full Changelog: v0.335.0...v0.336.0
Resources
0.335.0
0.335.0
Release Date: April 16, 2025
Changes
- feat: introduce gorouter_time metrics - cloudfoundry/gorouter#473 - Thanks @kart2bc
- fix: add OU in client-cert field_map - #464 - Thanks @plowin
- dep: various dependency bumps and golang patch
✨ Built with go 1.24.2
Full Changelog: v0.334.0...v0.335.0
Resources
0.334.0
0.334.0
Release Date: March 31, 2025
Changes
- feat: Introduce switch for envelope v1 metrics - #456 - Thanks @b1tamara and @mike-jc !
- revert fix for race condition now that race condition does not exist - cloudfoundry/gorouter#469
- This change + Go 1.24 changes how 1XX responses are handled. This might affect users:
Transport’s limit on 1xx informational responses received in response to a request has changed. It previously aborted a request and returned an error after receiving more than 5 1xx responses. It now returns an error if the total size of all 1xx responses exceeds the Transport.MaxResponseHeaderBytes configuration setting.
- This change + Go 1.24 changes how 1XX responses are handled. This might affect users:
Bosh Job Spec changes:
diff --git a/jobs/gorouter/spec b/jobs/gorouter/spec
index 1feb42f7..d373561e 100644
--- a/jobs/gorouter/spec
+++ b/jobs/gorouter/spec
@@ -76,8 +76,14 @@ properties:
description: "TLS Certificate used for the TLS listener of the LB healthcheck endpoint"
router.status.tls.key:
description: "Private Key used for the TLS listener of the LB healthcheck endpoint"
+ router.enable_envelope_v1_metrics:
+ description: "Enables support for metrics reported via Envelope."
+ default: true
router.prometheus.port:
- description: "Port for the prometheus endpoint."
+ description: "Port for the prometheus endpoint. Automatically enables Prometheus support."
+ router.prometheus.enable_scraper:
+ description: "Activate the Prometheus scraper to collect metrics from the gorouter."
+ default: true
router.prometheus.server_name:
description: "The server name used in the certificate for the metrics endpoint."
router.prometheus.ca_cert:
@@ -89,6 +95,18 @@ properties:
router.prometheus.key:
description: "TLS private key for prometheus server."
default: ""
+ router.prometheus.meters.route_lookup_time_histogram_buckets:
+ description: "Upper limits in nanoseconds of the ranges in which the observed value of route lookup time is expected to fall"
+ default: [10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000]
+ router.prometheus.meters.route_registration_latency_histogram_buckets:
+ description: "Upper limits in milliseconds of the ranges in which the observed value of route registration latency is expected to fall"
+ default: [0.1, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4]
+ router.prometheus.meters.routing_response_latency_histogram_buckets:
+ description: "Upper limits in milliseconds of the ranges in which the observed value of route response latency is expected to fall"
+ default: [1, 2, 4, 6, 8, 10, 20, 40, 50, 100, 500, 1000]
+ router.prometheus.meters.http_latency_histogram_buckets:
+ description: "Upper limits in seconds of the ranges in which the observed value of the latency of http requests from gorouter and back"
+ default: [0.1, 0.2, 0.4, 0.8, 1.6, 3.2, 6.4, 12.8, 25.6]
router.requested_route_registration_interval_in_seconds:
description: |
On startup, the router will delay listening for requests by this duration to increase likelihood that it has a complete routing table before serving requests.
✨ Built with go 1.24.1
Full Changelog: v0.333.0...v0.334.0
Resources
0.333.0
0.333.0
Release Date: March 24, 2025
Changes
- Upgrade go to 1.24!
⚠️ Minor Go bumps often cause some turbulence with routing-release. You can read the full go 1.24 release notes here.⚠️ Go 1.24 changes how 1XX responses are handled. This might affect users:
Transport’s limit on 1xx informational responses received in response to a request has changed. It previously aborted a request and returned an error after receiving more than 5 1xx responses. It now returns an error if the total size of all 1xx responses exceeds the Transport.MaxResponseHeaderBytes configuration setting.
Bosh Job Spec changes:
diff --git a/jobs/acceptance_tests/spec b/jobs/acceptance_tests/spec
index 51a81762..109e7e3f 100644
--- a/jobs/acceptance_tests/spec
+++ b/jobs/acceptance_tests/spec
@@ -7,7 +7,7 @@ templates:
bpm.yml.erb: config/bpm.yml
packages:
- - golang-1.23-linux
+ - golang-1.24-linux
- acceptance_tests
- rtr
- cf-cli-8-linux
diff --git a/jobs/smoke_tests/spec b/jobs/smoke_tests/spec
index 4ea8eb07..1260ab4f 100644
--- a/jobs/smoke_tests/spec
+++ b/jobs/smoke_tests/spec
@@ -7,7 +7,7 @@ templates:
bpm.yml.erb: config/bpm.yml
packages:
- - golang-1.23-linux
+ - golang-1.24-linux
- acceptance_tests
- cf-cli-8-linux
✨ Built with go 1.24.1
Full Changelog: v0.332.0...v0.333.0
Resources
0.332.0
0.332.0
Release Date: March 20, 2025
Changes
- In-line submodules - #457 - thank you @maxmoehl !
- move timing info to extra access log fields logic - #455 - thank you @maxmoehl !
- Add routing via X-CF-PROCESS-INSTANCE - cloudfoundry/gorouter#467 - Thanks @ameowlia !
Bosh Job Spec changes:
diff --git a/jobs/gorouter/spec b/jobs/gorouter/spec
index 9d694a02..1feb42f7 100644
--- a/jobs/gorouter/spec
+++ b/jobs/gorouter/spec
@@ -328,7 +328,7 @@ properties:
this property and operators have to explicitly enable them. This is done to prevent breaking
log parsing in existing setups by the introduction of new fields. Does not affect stdout /
stderr logs.
- Available fields are: local_address
+ Available fields are: backend_time, dial_time, dns_time, failed_attempts, failed_attempts_time, local_address, tls_time
default: []
router.logging.format.timestamp:
description: |
✨ Built with go 1.23.7
Full Changelog: v0.331.0...v0.332.0