Skip to content

Latest commit

 

History

History
164 lines (153 loc) · 25.3 KB

current.rst

File metadata and controls

164 lines (153 loc) · 25.3 KB

1.16.0 (Pending)

Incompatible Behavior Changes

Changes that are expected to cause an incompatibility if applicable; deployment changes are likely required

  • build: added visibility rules for upstream. If these cause visibility related breakage, see notes in //BUILD.
  • dns: envoy.restart_features.use_apple_api_for_dns_lookups is on by default. This flag only affects Apple platforms (macOS, iOS). It is incompatible to have the runtime flag set to true at the same time as specifying the use_tcp_for_dns_lookups option or custom dns resolvers. Doing so will cause failure.
  • watchdog: added two guarddogs, breaking the aggregated stats for the single guarddog system. The aggregated stats for the guarddogs will have the following prefixes: main_thread and workers. Concretely, anything monitoring server.watchdog_miss and server.watchdog_mega_miss will need to be updated.

Minor Behavior Changes

Changes that may cause incompatibilities for some users, but should not for most

  • adaptive concurrency: added a response body / grpc-message header for rejected requests.
  • build: an :ref:`Ubuntu based debug image <install_binaries>` is built and published in DockerHub.
  • build: the debug information will be generated separately to reduce target size and reduce compilation time when build in compilation mode dbg and opt. Users will need to build dwp file to debug with gdb.
  • compressor: always insert Vary headers for compressible resources even if it's decided not to compress a response due to incompatible Accept-Encoding value. The Vary header needs to be inserted to let a caching proxy in front of Envoy know that the requested resource still can be served with compression applied.
  • decompressor: headers-only requests were incorrectly not advertising accept-encoding when configured to do so. This is now fixed.
  • ext_authz filter: request timeout will now count from the time the check request is created, instead of when it becomes active. This makes sure that the timeout is enforced even if the ext_authz cluster's circuit breaker is engaged. This behavior can be reverted by setting runtime feature envoy.reloadable_features.ext_authz_measure_timeout_on_check_created to false. When enabled, a new ext_authz.timeout stat is counted when timeout occurs. See :ref:`stats // <config_http_filters_ext_authz_stats>`.
  • http: added :ref:`contains <envoy_api_msg_type.matcher.StringMatcher>` a new string matcher type which matches if the value of the string has the substring mentioned in contains matcher.
  • http: added :ref:`contains <envoy_api_msg_route.HeaderMatcher>` a new header matcher type which matches if the value of the header has the substring mentioned in contains matcher.
  • http: added :ref:`headers_to_add <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.ResponseMapper.headers_to_add>` to :ref:`local reply mapper <config_http_conn_man_local_reply>` to allow its users to add/append/override response HTTP headers to local replies.
  • http: added HCM level configuration of :ref:`error handling on invalid messaging <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_error_on_invalid_http_message>` which substantially changes Envoy's behavior when encountering invalid HTTP/1.1 defaulting to closing the connection instead of allowing reuse. This can temporarily be reverted by setting envoy.reloadable_features.hcm_stream_error_on_invalid_message to false, or permanently reverted by setting the HTTP/1 configuration :ref:`override_stream_error_on_invalid_http_message <envoy_v3_api_field_config.core.v3.Http1ProtocolOptions.override_stream_error_on_invalid_http_message>` to true to restore prior HTTP/1.1 behavior (i.e. connection isn't terminated) and to retain prior HTTP/2 behavior (i.e. connection is terminated).
  • http: added HCM level configuration of :ref:`error handling on invalid messaging <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_error_on_invalid_http_message>` which substantially changes Envoy's behavior when encountering invalid HTTP/1.1 defaulting to closing the connection instead of allowing reuse. This can temporarily be reverted by setting envoy.reloadable_features.hcm_stream_error_on_invalid_message to false, or permanently reverted by setting the :ref:`HCM option <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_error_on_invalid_http_message>` to true to restore prior HTTP/1.1 beavior and setting the new HTTP/2 configuration :ref:`override_stream_error_on_invalid_http_message <envoy_v3_api_field_config.core.v3.Http2ProtocolOptions.override_stream_error_on_invalid_http_message>` to false to retain prior HTTP/2 behavior.
  • http: applying route level header modifications to local replies sent on that route. This behavior may be temporarily reverted by setting envoy.reloadable_features.always_apply_route_header_rules to false.
  • http: changed Envoy to send GOAWAY to HTTP2 downstreams when the :ref:`disable_keepalive <config_overload_manager_overload_actions>` overload action is active. This behavior may be temporarily reverted by setting envoy.reloadable_features.overload_manager_disable_keepalive_drain_http2 to false.
  • http: changed Envoy to send error headers and body when possible. This behavior may be temporarily reverted by setting envoy.reloadable_features.allow_response_for_timeout to false.
  • http: changed empty trailers encoding behavior by sending empty data with end_stream true (instead of sending empty trailers) for HTTP/2. This behavior can be reverted temporarily by setting runtime feature envoy.reloadable_features.http2_skip_encoding_empty_trailers to false.
  • http: changed how local replies are processed for requests which transform from grpc to not-grpc, or not-grpc to grpc. Previously the initial generated reply depended on which filter sent the reply, but now the reply is consistently generated the way the downstream expects. This behavior can be temporarily reverted by setting envoy.reloadable_features.unify_grpc_handling to false.
  • http: clarified and enforced 1xx handling. Multiple 100-continue headers are coalesced when proxying. 1xx headers other than {100, 101} are dropped.
  • http: fixed a bug in access logs where early stream termination could be incorrectly tagged as a downstream disconnect, and disconnects after partial response were not flagged.
  • http: fixed the 100-continue response path to properly handle upstream failure by sending 5xx responses. This behavior can be temporarily reverted by setting envoy.reloadable_features.allow_500_after_100 to false.
  • http: the per-stream FilterState maintained by the HTTP connection manager will now provide read/write access to the downstream connection FilterState. As such, code that relies on interacting with this might see a change in behavior.
  • logging: added fine-grain logging for file level log control with logger management at administration interface. It can be enabled by option --enable-fine-grain-logging.
  • logging: changed default log format to "[%Y-%m-%d %T.%e][%t][%l][%n] [%g:%#] %v" and default value of :option:`--log-format-prefix-with-location` to 0.
  • logging: nghttp2 log messages no longer appear at trace level unless ENVOY_NGHTTP2_TRACE is set in the environment.
  • lua: changed the response body returned by httpCall() API to raw data. Previously, the returned data was string.
  • router: added transport failure reason to response body when upstream reset happens. After this change, the response body will be of the form upstream connect error or disconnect/reset before headers. reset reason:{}, transport failure reason:{}.This behavior may be reverted by setting runtime feature envoy.reloadable_features.http_transport_failure_reason_in_body to false.
  • router: now consumes all retry related headers to prevent them from being propagated to the upstream. This behavior may be reverted by setting runtime feature envoy.reloadable_features.consume_all_retry_headers to false.
  • thrift_proxy: special characters {'0', 'r', 'n'} will be stripped from thrift headers.
  • watchdog: replaced single watchdog with separate watchdog configuration for worker threads and for the main thread :ref:`Watchdogs<envoy_v3_api_field_config.bootstrap.v3.Bootstrap.watchdogs>`. It works with :ref:`watchdog<envoy_v3_api_field_config.bootstrap.v3.Bootstrap.watchdog>` by having the worker thread and main thread watchdogs have same config.

Bug Fixes

Changes expected to improve the state of the world and are unlikely to have negative effects

  • csrf: fixed issues with regards to origin and host header parsing.
  • dynamic_forward_proxy: only perform DNS lookups for routes to Dynamic Forward Proxy clusters since other cluster types handle DNS lookup themselves.
  • fault: fixed an issue with active_faults gauge not being decremented for when abort faults were injected.
  • fault: made the HeaderNameValues::prefix() method const.
  • grpc-web: fixed an issue with failing HTTP/2 requests on some browsers. Notably, WebKit-based browsers (https://bugs.webkit.org/show_bug.cgi?id=210108), Internet Explorer 11, and Edge (pre-Chromium).
  • http: fixed CVE-2020-25018 by rolling back the GURL dependency to previous state (reverted: 2d69e30, d828958, and c9c4709 commits) due to potential of crashing when Unicode URIs are present in requests.
  • http: made the HeaderValues::prefix() method const.
  • jwt_authn: supports jwt payload without "iss" field.
  • listener: fixed crash at listener inplace update when connetion load balancer is set.
  • rocketmq_proxy network-level filter: fixed an issue involving incorrect header lengths. In debug mode it causes crash and in release mode it causes underflow.
  • thrift_proxy: fixed crashing bug on request overflow.
  • udp_proxy: fixed a crash due to UDP packets being processed after listener removal.

Removed Config or Runtime

Normally occurs at the end of the :ref:`deprecation period <deprecated>`

  • http: removed legacy header sanitization and the runtime guard envoy.reloadable_features.strict_header_validation.
  • http: removed legacy transfer-encoding enforcement and runtime guard envoy.reloadable_features.reject_unsupported_transfer_encodings.
  • http: removed configurable strict host validation and runtime guard envoy.reloadable_features.strict_authority_validation.
  • http: removed the connection header sanitization runtime guard envoy.reloadable_features.connection_header_sanitization.

New Features

Deprecated