Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

onUpstreamData(end_stream=true) is never raised when using cluster with TLS transport socket #13856

Closed
PiotrSikora opened this issue Nov 2, 2020 · 0 comments · Fixed by #13858

Comments

@PiotrSikora
Copy link
Contributor

PiotrSikora commented Nov 2, 2020

It looks that onUpstreamData(..., end_stream=true) and onWrite(..., end_stream=true) events are never raised when using cluster with TLS transport socket.

Repro steps:

Start Envoy:

$ bazel-bin/source/exe/envoy-static -c /tmp/onwrite.yaml -l trace | grep end_stream=

Proxy HTTPS request as TCP using raw buffer (TLS established between curl and httpbin.org):

$ curl --resolve httpbin.org:9091:127.0.0.1 https://httpbin.org:9091/headers

Proxy HTTP request as TCP using TLS transport socket (TLS established between Envoy and httpbin.org):

$ curl --resolve httpbin.org:9092:127.0.0.1 httpbin.org:9092/headers

Config:

$ cat /tmp/onwrite.yaml
admin:
  access_log_path: "/dev/null"
  address:
    socket_address:
      protocol: TCP
      address: 127.0.0.1
      port_value: 9090

static_resources:
  listeners:
  - address:
      socket_address:
        protocol: TCP
        address: 0.0.0.0
        port_value: 9091
    filter_chains:
    - filters:
      - name: envoy.tcp_proxy
        config:
          stat_prefix: tcp_proxy
          cluster: httpbin
  - address:
      socket_address:
        protocol: TCP
        address: 0.0.0.0
        port_value: 9092
    filter_chains:
    - filters:
      - name: envoy.tcp_proxy
        config:
          stat_prefix: tcp_proxy
          cluster: httpbins

  clusters:
  - name: httpbin
    connect_timeout: 0.25s
    type: LOGICAL_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    hosts:
      - socket_address:
          protocol: TCP
          address: httpbin.org
          port_value: 443
  - name: httpbins
    connect_timeout: 0.25s
    type: LOGICAL_DNS
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    hosts:
      - socket_address:
          protocol: TCP
          address: httpbin.org
          port_value: 443
    tls_context:
      sni: "httpbin.org"

Logs:

When proxying HTTPS request as TCP using raw buffer (TLS established between curl and httpbin.org):

[C2] downstream connection received 517 bytes, end_stream=false
[C2] upstream connection received 5288 bytes, end_stream=false
[C2] downstream connection received 126 bytes, end_stream=false
[C2] upstream connection received 120 bytes, end_stream=false
[C2] downstream connection received 222 bytes, end_stream=false
[C2] downstream connection received 38 bytes, end_stream=false
[C2] upstream connection received 38 bytes, end_stream=false
[C2] upstream connection received 371 bytes, end_stream=false
[C2] downstream connection received 31 bytes, end_stream=false
[C2] downstream connection received 0 bytes, end_stream=true
[C2] upstream connection received 0 bytes, end_stream=true

When proxying HTTP request as TCP using TLS transport socket (TLS established between Envoy and httpbin.org):

[C4] downstream connection received 87 bytes, end_stream=false
[C4] upstream connection received 403 bytes, end_stream=false
[C4] downstream connection received 0 bytes, end_stream=true

The extra events when proxying HTTPS request as TCP using raw buffer are due to the TLS handshake and shutdown process, so that difference is expected and not an issue.

The issue is that when proxying HTTP request as TCP using TLS transport socket, there is no upstream connection received 0 bytes, end_stream=true event triggered, and the network filters cannot detect when upstream stream ended.

@PiotrSikora PiotrSikora added bug triage Issue requires triage labels Nov 2, 2020
@PiotrSikora PiotrSikora changed the title onWrite(end_stream=true) is never raised when using cluster with TLS transport socket onUpstreamData(end_stream=true) is never raised when using cluster with TLS transport socket Nov 2, 2020
PiotrSikora added a commit to PiotrSikora/envoy that referenced this issue Nov 2, 2020
@mattklein123 mattklein123 added area/tls and removed triage Issue requires triage labels Nov 3, 2020
@mattklein123 mattklein123 added this to the 1.17.0 milestone Nov 3, 2020
ggreenway pushed a commit that referenced this issue Nov 4, 2020
PiotrSikora added a commit to PiotrSikora/envoy that referenced this issue Nov 19, 2020
istio-testing pushed a commit to istio/envoy that referenced this issue Nov 20, 2020
* build: update rules_rust to allow Rustc in RBE (envoyproxy#13595)

Signed-off-by: Lizan Zhou <[email protected]>
Signed-off-by: Piotr Sikora <[email protected]>

* fix macos v8 build (envoyproxy#13572)

Signed-off-by: Rama Chavali <[email protected]>

* wasm: update proxy-wasm-cpp-host (envoyproxy#13606)

The PR updates proxy-wasm-cpp-host dependency for enhancing the capability and fixing a bug in WASM extensions.

The change consists of three PRs in proxy-wasm-cpp-host:

1. proxy-wasm/proxy-wasm-cpp-host#68 @PiotrSikora
2. proxy-wasm/proxy-wasm-cpp-host#65 @mathetake (me)
3. proxy-wasm/proxy-wasm-cpp-host#64 @mathetake (me)

The code change can be found at proxy-wasm/proxy-wasm-cpp-host@49ed20e...c5658d3 .

1 & 2 enhance WASM capability, and 3 fixes a bug in situations where users share vm_id for multiple filters. For details, please take a look at these original PRs.

Signed-off-by: mathetake <[email protected]>
Signed-off-by: Piotr Sikora <[email protected]>

* wasm: re-enable tests with precompiled modules. (envoyproxy#13583)

Fixes envoyproxy#12335.

Signed-off-by: Piotr Sikora <[email protected]>

* wasm: flip the meaning of the "repository" in envoy_wasm_cc_binary(). (envoyproxy#13621)

Change the meaning of the "repository" parameter to refer to an external
Bazel repository, instead of using "@envoy" in targets that are included
in the Envoy repository.

This aligns with other envoy_* rules.

Signed-off-by: Piotr Sikora <[email protected]>

* build: support ppc64le with wasm (envoyproxy#13657)

The build has only been tested with gn git sha 5da62d5 as
recommended by ppc64 maintainers of the v8 runtime.

Signed-off-by: Christopher M. Luciano <[email protected]>

* wasm: remove no longer needed Emscripten metadata. (envoyproxy#13667)

Signed-off-by: Piotr Sikora <[email protected]>

* fix wasm compilation (envoyproxy#13765)

Signed-off-by: Asra Ali <[email protected]>

* wasm: strip only Custom Sections with precompiled Wasm modules. (envoyproxy#13775)

Signed-off-by: Piotr Sikora <[email protected]>

* build: don't build shared libraries for zlib and zlib-ng. (envoyproxy#13652)

Signed-off-by: Piotr Sikora <[email protected]>

* wasm: update V8 to v8.7.220.10. (envoyproxy#13568)

Signed-off-by: Piotr Sikora <[email protected]>

* build: exclude wee8/out from inputs (envoyproxy#13866)

If you build without sandboxing for performance, the output files from
this custom build genrule contained timestamps which caused it to
rebuild every single build.

Signed-off-by: Keith Smiley <[email protected]>

* tls: fix detection of the upstream connection close event. (envoyproxy#13858)

Fixes envoyproxy#13856.

Signed-off-by: Piotr Sikora <[email protected]>

* wasm: Force stop iteration after local response is sent (envoyproxy#13930)

Resolves envoyproxy#13857

ref:
-proxy-wasm/proxy-wasm-rust-sdk#44
-proxy-wasm/proxy-wasm-cpp-host#88
-proxy-wasm/proxy-wasm-cpp-host#93

Signed-off-by: mathetake <[email protected]>
Signed-off-by: Piotr Sikora <[email protected]>

* wasm: fix order of callbacks for paused requests. (envoyproxy#13840)

Fixes proxy-wasm/proxy-wasm-rust-sdk#43.

Signed-off-by: Piotr Sikora <[email protected]>

* wasm: fix network leak (envoyproxy#13836)

Signed-off-by: Kuat Yessenov <[email protected]>

Co-authored-by: Lizan Zhou <[email protected]>
Co-authored-by: Rama Chavali <[email protected]>
Co-authored-by: Takeshi Yoneda <[email protected]>
Co-authored-by: cmluciano <[email protected]>
Co-authored-by: asraa <[email protected]>
Co-authored-by: Keith Smiley <[email protected]>
Co-authored-by: Takeshi Yoneda <[email protected]>
Co-authored-by: Kuat <[email protected]>
cpakulski pushed a commit to cpakulski/envoy that referenced this issue Dec 22, 2020
antoniovicente pushed a commit that referenced this issue Dec 29, 2020
… event. (#13858) (#14452)

Fixes #13856.

This change also contains the following backports:
- build: Fix some unused variable warnings (#13987)
- test: Check in all TLS test certs (#13702)

Signed-off-by: Piotr Sikora <[email protected]>
Signed-off-by: Christoph Pakulski <[email protected]>
cpakulski pushed a commit to cpakulski/envoy that referenced this issue Jan 5, 2021
antoniovicente pushed a commit that referenced this issue Jan 8, 2021
… event. (#13858) (#14568)

Fixes #13856.

Signed-off-by: Piotr Sikora <[email protected]>
Signed-off-by: Christoph Pakulski <[email protected]>
istio-testing pushed a commit to istio/envoy that referenced this issue Jan 8, 2021
* docs: kick-off 1.15.1 release. (envoyproxy#12166)

Signed-off-by: Piotr Sikora <[email protected]>

* tls: update BoringSSL-FIPS to 20190808. (envoyproxy#12170)

Signed-off-by: Piotr Sikora <[email protected]>

* test: Exclude wasm_vm_test from CI by making it a "manual" test. (#207)

The wee v8 build times out in CI under --config=asan because the machine the job is scheduled on is too small.

Signed-off-by: Antonio Vicente <[email protected]>

* [v1.15] http: header map security fixes for duplicate headers (#197) (#200)

Previously header matching did not match on all headers for
non-inline headers. This patch changes the default behavior to
always logically match on all headers. Multiple individual
headers will be logically concatenated with ',' similar to what
is done with inline headers. This makes the behavior effectively
consistent. This behavior can be temporary reverted by setting
the runtime value "envoy.reloadable_features.header_match_on_all_headers"
to "false".

Targeted fixes have been additionally performed on the following
extensions which make them consider all duplicate headers by default as
a comma concatenated list:
1) Any extension using CEL matching on headers.
2) The header to metadata filter.
3) The JWT filter.
4) The Lua filter.
Like primary header matching used in routing, RBAC, etc. this behavior
can be disabled by setting the runtime value
"envoy.reloadable_features.header_match_on_all_headers" to false.

Finally, the setCopy() header map API previously only set the first
header in the case of duplicate non-inline headers. setCopy() now
behaves similiarly to the other set*() APIs and replaces all found
headers with a single value. This may have had security implications
in the extauth filter which uses this API. This behavior can be disabled
by setting the runtime value
"envoy.reloadable_features.http_set_copy_replace_all_headers" to false.

Fixes https://github.com/envoyproxy/envoy-setec/issues/188

Signed-off-by: Matt Klein <[email protected]>

* backport to v1.15: Fix Kafka Repository Location (#223)

Update mirror used to fetch kafka dependency to a valid, working mirror.

Based on envoyproxy#13025
Resolves envoyproxy#13011

Signed-off-by: Antonio Vicente <[email protected]>

* release: cutting 1.15.1 (#217)

Signed-off-by: Antonio Vicente <[email protected]>

* docs: Fix release notes for v1.15.1 release. (envoyproxy#13318)

Signed-off-by: Antonio Vicente <[email protected]>

* Backport flaky test and tsan fixes to releases/v1.15 branch (envoyproxy#13337)

* hds: fix integration test flakes (envoyproxy#12214)

Part of envoyproxy#12184

Signed-off-by: Matt Klein <[email protected]>
Signed-off-by: Antonio Vicente <[email protected]>

* Switch to a tsan-instrumented libc++ for tsan tests (envoyproxy#12134)

This fixes envoyproxy#9784 and re-enables vhds_integration_test

Risk Level: Low, but will most likely increase memory usage

Signed-off-by: Dmitri Dolguikh <[email protected]>

Signed-off-by: Antonio Vicente <[email protected]>

* test: shard hds_integration_test (envoyproxy#12482)

This should avoid TSAN timeout flakes.

Signed-off-by: Matt Klein <[email protected]>
Signed-off-by: Antonio Vicente <[email protected]>

* test: shard http2_integration_test (envoyproxy#11939)

This should mitigate TSAN timeout.

Signed-off-by: Lizan Zhou <[email protected]>
Signed-off-by: Antonio Vicente <[email protected]>

* test: fix http2_integration_test flake (envoyproxy#12450)

Fixes envoyproxy#12442

Signed-off-by: Matt Klein <[email protected]>
Signed-off-by: Antonio Vicente <[email protected]>

* Kick CI

Signed-off-by: Antonio Vicente <[email protected]>

Co-authored-by: Matt Klein <[email protected]>
Co-authored-by: Dmitri Dolguikh <[email protected]>
Co-authored-by: Lizan Zhou <[email protected]>

* docs: kick off v1.15.3-dev (envoyproxy#13695)

Signed-off-by: Christoph Pakulski <[email protected]>

* 1.15: CI fixes backport (envoyproxy#13697)

Backport following commits to 1.15:
748b2ab (mac ci: try ignoring update failure (envoyproxy#13658), 2020-10-20)
f95f539 (ci: various improvements (envoyproxy#13660), 2020-10-20)
73d78f8 (ci: use multiple stage (envoyproxy#13557), 2020-10-15)
b7a4756 (ci: use azp for api and go-control-plane sync (envoyproxy#13550), 2020-10-14)
876a6bb (ci use azp to sync filter example (envoyproxy#13501), 2020-10-12)
a0f31ee (ci: use azp to generate docs (envoyproxy#13481), 2020-10-12)

Signed-off-by: Lizan Zhou <[email protected]>
Co-authored-by: asraa <[email protected]>

* 1.15: fix CI script (envoyproxy#13724)

Signed-off-by: Lizan Zhou <[email protected]>

* Prevent SEGFAULT when disabling listener (envoyproxy#13515) (envoyproxy#13903)

This prevents the stop_listening overload action from causing
segmentation faults that can occur if the action is enabled after the
listener has already shut down.

Signed-off-by: Alex Konradi <[email protected]>
Signed-off-by: Christoph Pakulski <[email protected]>

* proxy protocol: set downstreamRemoteAddress on StreamInfo (envoyproxy#14131) (envoyproxy#14169)

This fixes a regression which resulted in the downstreamRemoteAddress
on the StreamInfo for a connection not having the address supplied by
the proxy protocol filter, but instead having the address of the
directly connected peer.

This issue does not affect HTTP filters.

Fixes envoyproxy#14087

Signed-off-by: Greg Greenway <[email protected]>
Signed-off-by: Christoph Pakulski <[email protected]>

* ci: temproray disable vhds_integration_test in TSAN (envoyproxy#12067) (envoyproxy#14217)

Signed-off-by: Lizan Zhou <[email protected]>

* tcmalloc changed and the data coming out of tcmalloc::MallocExtension::GetNumericProperty("generic.current_allocated_bytes") (envoyproxy#14165)

Commit Message: tcmalloc changed and the data coming out of tcmalloc::MallocExtension::GetNumericProperty("generic.current_allocated_bytes") no longer appears to be deterministic, even in unthreaded tests. So disable exact mem checks till we sort that out
Additional Description:
Risk Level: low
Testing: just thread_local_store_test
Docs Changes: n/a
Release Notes: n/a

no longer appears to be deterministic, even in unthreaded tests. So disable exact mem checks till we sort that out

Signed-off-by: Joshua Marantz <[email protected]>
Signed-off-by: Christoph Pakulski <[email protected]>

Co-authored-by: Joshua Marantz <[email protected]>

* backport to v1.15: connection: Remember transport socket read resumption requests and replay them when re-enabling read. (envoyproxy#13772) (envoyproxy#14173)

* connection: Remember transport socket read resumption requests and replay them when re-enabling read. (envoyproxy#13772)

Fixes SslSocket read resumption after readDisable when processing the SSL record that contains the last bytes of the HTTP message

Signed-off-by: Antonio Vicente <[email protected]>

* backport to 1.15: udp: properly handle truncated/dropped datagrams (envoyproxy#14122) (envoyproxy#14166)

Signed-off-by: Matt Klein <[email protected]>
Signed-off-by: Christoph Pakulski <[email protected]>
Co-authored-by: Matt Klein <[email protected]>
Co-authored-by: Christoph Pakulski <[email protected]>

* backport to 1.15: vrp: allow supervisord to open its log file (envoyproxy#14066) (envoyproxy#14280)

Commit Message: Allow supervisord to open its log file
Additional Description:
Change the default location of the log file and give supervisord
permissions to write to it.

Risk Level: low
Testing: built image locally
Docs Changes: n/a
Release Notes: n/a
Platform Specific Features: n/a

Signed-off-by: Alex Konradi <[email protected]>
Signed-off-by: Christoph Pakulski <[email protected]>

* rel 1.15: close release 1.15.3 (envoyproxy#14303)

Signed-off-by: Christoph Pakulski <[email protected]>

* Kick off rel 1.15.4. (envoyproxy#14323)

Signed-off-by: Christoph Pakulski <[email protected]>

* backport to 1.15: http: fix datadog and squash handling of responses without body (envoyproxy#13328) (envoyproxy#14458)

Commit Message: Fixing bugs in datadog and sqaush where unexpected bodyless responses would crash Envoy
Risk Level: low
Testing: new unit tests, updated certs
Docs Changes: n/a
Release Notes: inline
Signed-off-by: Christoph Pakulski <[email protected]>
Co-authored-by: alyssawilk <[email protected]>

* backport 1.15: http: fixing a bug with IPv6 hosts (envoyproxy#14273)

Fixing a bug where HTTP parser offsets for IPv6 hosts did not include [] and Envoy assumed it did.
This results in mis-parsing addresses for IPv6 CONNECT requests and IPv6 hosts in fully URLs over HTTP/1.1

Risk Level: low
Testing: new unit, integration tests
Docs Changes: n/a
Release Notes: inline

Signed-off-by: Shikugawa <[email protected]>
Co-authored-by: alyssawilk <[email protected]>

* backport to 1.15: tls: fix detection of the upstream connection close event. (envoyproxy#13858) (envoyproxy#14568)

Fixes envoyproxy#13856.

Signed-off-by: Piotr Sikora <[email protected]>
Signed-off-by: Christoph Pakulski <[email protected]>

Co-authored-by: Piotr Sikora <[email protected]>
Co-authored-by: antonio <[email protected]>
Co-authored-by: Matt Klein <[email protected]>
Co-authored-by: Dmitri Dolguikh <[email protected]>
Co-authored-by: Lizan Zhou <[email protected]>
Co-authored-by: Christoph Pakulski <[email protected]>
Co-authored-by: asraa <[email protected]>
Co-authored-by: Joshua Marantz <[email protected]>
Co-authored-by: Rei Shimizu <[email protected]>
Co-authored-by: alyssawilk <[email protected]>
cpakulski pushed a commit to cpakulski/envoy that referenced this issue Jan 8, 2021
cpakulski pushed a commit to cpakulski/envoy that referenced this issue Jan 8, 2021
htuch pushed a commit that referenced this issue Jan 15, 2021
… event. (#13858) (#14609)

backport to 1.14: tls: fix detection of the upstream connection close event. (#13858)

Fixes #13856

Signed-off-by: Christoph Pakulski <[email protected]>
Co-authored-by: Piotr Sikora <[email protected]>
htuch pushed a commit that referenced this issue Jan 15, 2021
… event. (#13858) (#14611)

backport to 1.13: tls: fix detection of the upstream connection close event. (#13858)

Fixes #13856.

Signed-off-by: Christoph Pakulski <[email protected]>
Co-authored-by: Piotr Sikora <[email protected]>
istio-testing pushed a commit to istio/envoy that referenced this issue Feb 5, 2021
* backport to 1.16: http: fixing a bug with IPv6 hosts (envoyproxy#14238)

Fixing a bug where HTTP parser offsets for IPv6 hosts did not include [] and Envoy assumed it did.
This results in mis-parsing addresses for IPv6 CONNECT requests and IPv6 hosts in fully URLs over HTTP/1.1

Risk Level: low
Testing: new unit, integration tests
Docs Changes: n/a
Release Notes: inline
Signed-off-by: Shikugawa <[email protected]>
Co-authored-by: alyssawilk <[email protected]>

* backport to 1.16: vrp: allow supervisord to open its log file (envoyproxy#14066) (envoyproxy#14279)

Commit Message: Allow supervisord to open its log file
Additional Description:
Change the default location of the log file and give supervisord
permissions to write to it.

Risk Level: low
Testing: built image locally
Docs Changes: n/a
Release Notes: n/a
Platform Specific Features: n/a

Signed-off-by: Alex Konradi <[email protected]>
Signed-off-by: Christoph Pakulski <[email protected]>

* Closing release 1.16.2. (envoyproxy#14308)

Signed-off-by: Christoph Pakulski <[email protected]>

* Kick-off rel 1.16.3. (envoyproxy#14321)

Signed-off-by: Christoph Pakulski <[email protected]>

* lua: reset downstream_ssl_connection in StreamInfoWrapper when object is marked dead by Lua GC (envoyproxy#14092) (envoyproxy#14449)

Co-authored-by: Marcin Falkowski <[email protected]>

* backport to 1.16: tls: fix detection of the upstream connection close event. (envoyproxy#13858) (envoyproxy#14452)

Fixes envoyproxy#13856.

This change also contains the following backports:
- build: Fix some unused variable warnings (envoyproxy#13987)
- test: Check in all TLS test certs (envoyproxy#13702)

Signed-off-by: Piotr Sikora <[email protected]>
Signed-off-by: Christoph Pakulski <[email protected]>

* backport to 1.16: aggregate cluster: fix TLS init issue (envoyproxy#14456)

Additional Description: Based on envoyproxy#14388
Risk Level: Low
Testing: Build and run the repro from envoyproxy#14119 without crashing, `bazel test test/extensions/clusters/aggregate:cluster_test`
Docs Changes: N/A
Release Notes:
envoyproxy#14119

Signed-off-by: Taylor Barrella <[email protected]>

Co-authored-by: Rei Shimizu <[email protected]>
Co-authored-by: Christoph Pakulski <[email protected]>
Co-authored-by: Marcin Falkowski <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants