-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Initial support for upstream HTTP/1.1 tunneling #13293
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
Changes from all commits
efcc5ed
40c2ac3
5ff338e
2e0857f
5d6d5de
0ddc44f
a1c9d98
eecf55c
3cfa1e9
3f7b4cb
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,44 @@ | ||
| # This configuration takes incoming data on port 10000 and encapsulates it in a CONNECT | ||
| # request which is sent upstream port 10001. | ||
| # It can be used to test TCP tunneling as described in docs/root/intro/arch_overview/http/upgrades.rst | ||
| # and running `curl --x 127.0.0.1:10000 https://www.google.com` | ||
|
|
||
| admin: | ||
| access_log_path: /tmp/admin_access.log | ||
| address: | ||
| socket_address: | ||
| protocol: TCP | ||
| address: 127.0.0.1 | ||
| port_value: 9903 | ||
| static_resources: | ||
| listeners: | ||
| - name: listener_0 | ||
| address: | ||
| socket_address: | ||
| protocol: TCP | ||
| address: 127.0.0.1 | ||
| port_value: 10000 | ||
| filter_chains: | ||
| - filters: | ||
| - name: tcp | ||
| typed_config: | ||
| "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy | ||
| stat_prefix: tcp_stats | ||
| cluster: "cluster_0" | ||
| tunneling_config: | ||
| hostname: host.com:443 | ||
| clusters: | ||
| - name: cluster_0 | ||
| connect_timeout: 5s | ||
| # This ensures HTTP/1.1 CONNECT is used for establishing the tunnel. | ||
| http_protocol_options: | ||
| {} | ||
| load_assignment: | ||
| cluster_name: cluster_0 | ||
| endpoints: | ||
| - lb_endpoints: | ||
| - endpoint: | ||
| address: | ||
| socket_address: | ||
| address: 127.0.0.1 | ||
| port_value: 10001 | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -26,10 +26,11 @@ static_resources: | |
| stat_prefix: tcp_stats | ||
| cluster: "cluster_0" | ||
| tunneling_config: | ||
| hostname: host.com | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. sorry, why 10002 when it's connecting to port 10001?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. My idea was to show that the destination port can be different from the port used by the upstream proxy, but maybe using
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sending CONNECT foo.com:1234 to foo.com:1235 seems odd to me, but if you think it's worth explicitly testing for that how about a comment so other folks don't think it's just an off by one error :-)
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. just to be sure we are on the same page, in this scenario, the CONNECT is sent to the upstream that is |
||
| hostname: host.com:443 | ||
| clusters: | ||
| - name: cluster_0 | ||
| connect_timeout: 5s | ||
| # This ensures HTTP/2 CONNECT is used for establishing the tunnel. | ||
| http2_protocol_options: | ||
| {} | ||
| load_assignment: | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,61 @@ | ||
| # This configuration terminates a CONNECT request and sends the CONNECT payload upstream. | ||
| # It can be used to test TCP tunneling as described in docs/root/intro/arch_overview/http/upgrades.rst | ||
| # or used to test CONNECT directly, by running `curl -k -v -x 127.0.0.1:10001 https://www.google.com` | ||
| admin: | ||
| access_log_path: /tmp/admin_access.log | ||
| address: | ||
| socket_address: | ||
| protocol: TCP | ||
| address: 127.0.0.1 | ||
| port_value: 9902 | ||
| static_resources: | ||
| listeners: | ||
| - name: listener_0 | ||
| address: | ||
| socket_address: | ||
| protocol: TCP | ||
| address: 127.0.0.1 | ||
| port_value: 10001 | ||
| filter_chains: | ||
| - filters: | ||
| - name: envoy.filters.network.http_connection_manager | ||
| typed_config: | ||
| "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager | ||
| stat_prefix: ingress_http | ||
| route_config: | ||
| name: local_route | ||
| virtual_hosts: | ||
| - name: local_service | ||
| domains: | ||
| - "*" | ||
| routes: | ||
| - match: | ||
| connect_matcher: | ||
| {} | ||
| route: | ||
| cluster: service_google | ||
| upgrade_configs: | ||
| - upgrade_type: CONNECT | ||
| connect_config: | ||
| {} | ||
| http_filters: | ||
| - name: envoy.filters.http.router | ||
| http_protocol_options: {} | ||
| upgrade_configs: | ||
| - upgrade_type: CONNECT | ||
| clusters: | ||
| - name: service_google | ||
| connect_timeout: 0.25s | ||
| type: LOGICAL_DNS | ||
| # Comment out the following line to test on v6 networks | ||
| dns_lookup_family: V4_ONLY | ||
| lb_policy: ROUND_ROBIN | ||
| load_assignment: | ||
| cluster_name: service_google | ||
| endpoints: | ||
| - lb_endpoints: | ||
| - endpoint: | ||
| address: | ||
| socket_address: | ||
| address: www.google.com | ||
| port_value: 443 |
Uh oh!
There was an error while loading. Please reload this page.