docs: HTTP connection manager (#256)
I will defer RDS into another PR. I will also do another cleanup pass over all of this later but want to get most of this in place first. Signed-off-by: Matt Klein <mklein@lyft.com>pull/262/merge
parent
069ae5dc5e
commit
24792bd944
10 changed files with 409 additions and 299 deletions
@ -0,0 +1,260 @@ |
||||
.. _config_http_filters_http_conn_man_v1: |
||||
|
||||
HTTP connection manager |
||||
======================= |
||||
|
||||
* HTTP connection manager :ref:`architecture overview <arch_overview_http_conn_man>`. |
||||
* HTTP protocols :ref:`architecture overview <arch_overview_http_protocols>`. |
||||
|
||||
.. code-block:: json |
||||
|
||||
{ |
||||
"name": "http_connection_manager", |
||||
"config": { |
||||
"codec_type": "...", |
||||
"stat_prefix": "...", |
||||
"rds": "{...}", |
||||
"route_config": "{...}", |
||||
"filters": [], |
||||
"add_user_agent": "...", |
||||
"tracing": "{...}", |
||||
"http1_settings": "{...}", |
||||
"http2_settings": "{...}", |
||||
"server_name": "...", |
||||
"idle_timeout_s": "...", |
||||
"drain_timeout_ms": "...", |
||||
"access_log": [], |
||||
"use_remote_address": "...", |
||||
"forward_client_cert": "...", |
||||
"set_current_client_cert": "...", |
||||
"generate_request_id": "..." |
||||
} |
||||
} |
||||
|
||||
.. _config_http_conn_man_codec_type: |
||||
|
||||
codec_type |
||||
*(required, string)* Supplies the type of codec that the connection manager should use. Possible |
||||
values are: |
||||
|
||||
http1 |
||||
The connection manager will assume that the client is speaking HTTP/1.1. |
||||
|
||||
http2 |
||||
The connection manager will assume that the client is speaking HTTP/2 (Envoy does not require |
||||
HTTP/2 to take place over TLS or to use ALPN. Prior knowledge is allowed). |
||||
|
||||
auto |
||||
For every new connection, the connection manager will determine which codec to use. This mode |
||||
supports both ALPN for TLS listeners as well as protocol inference for plaintext listeners. |
||||
If ALPN data is available, it is preferred, otherwise protocol inference is used. In almost |
||||
all cases, this is the right option to choose for this setting. |
||||
|
||||
.. _config_http_conn_man_stat_prefix: |
||||
|
||||
stat_prefix |
||||
*(required, string)* The human readable prefix to use when emitting statistics for the |
||||
connection manager. See the :ref:`statistics <config_http_conn_man_stats>` documentation |
||||
for more information. |
||||
|
||||
.. _config_http_conn_man_rds_option: |
||||
|
||||
:ref:`rds <config_http_conn_man_rds>` |
||||
*(sometimes required, object)* The connection manager configuration must specify one of *rds* or |
||||
*route_config*. If *rds* is specified, the connection manager's route table will be dynamically |
||||
loaded via the RDS API. See the :ref:`documentation <config_http_conn_man_rds>` for more |
||||
information. |
||||
|
||||
.. _config_http_conn_man_route_config: |
||||
|
||||
:ref:`route_config <config_http_conn_man_route_table>` |
||||
*(sometimes required, object)* The connection manager configuration must specify one of *rds* or |
||||
*route_config*. If *route_config* is specified, the :ref:`route table <arch_overview_http_routing>` |
||||
for the connection manager is static and is specified in this property. |
||||
|
||||
:ref:`filters <config_http_conn_man_filters>` |
||||
*(required, array)* A list of individual :ref:`HTTP filters <arch_overview_http_filters>` that |
||||
make up the filter chain for requests made to the connection manager. Order matters as the filters |
||||
are processed sequentially as request events happen. |
||||
|
||||
.. _config_http_conn_man_add_user_agent: |
||||
|
||||
add_user_agent |
||||
*(optional, boolean)* Whether the connection manager manipulates the |
||||
:ref:`config_http_conn_man_headers_user-agent` and |
||||
:ref:`config_http_conn_man_headers_downstream-service-cluster` headers. See the linked |
||||
documentation for more information. Defaults to false. |
||||
|
||||
:ref:`tracing <config_http_conn_man_tracing>` |
||||
*(optional, object)* Presence of the object defines whether the connection manager |
||||
emits :ref:`tracing <arch_overview_tracing>` data to the :ref:`configured tracing provider |
||||
<config_tracing>`. |
||||
|
||||
.. _config_http_conn_man_http1_settings: |
||||
|
||||
http1_settings |
||||
*(optional, object)* Additional HTTP/1 settings that are passed to the HTTP/1 codec. |
||||
|
||||
allow_absolute_url |
||||
*(optional, boolean)* Handle http requests with absolute urls in the requests. These requests |
||||
are generally sent by clients to forward/explicit proxies. This allows clients to configure |
||||
envoy as their http proxy. In Unix, for example, this is typically done by setting the |
||||
http_proxy environment variable. |
||||
|
||||
.. _config_http_conn_man_http2_settings: |
||||
|
||||
http2_settings |
||||
*(optional, object)* Additional HTTP/2 settings that are passed directly to the HTTP/2 codec. |
||||
Currently supported settings are: |
||||
|
||||
hpack_table_size |
||||
*(optional, integer)* `Maximum table size <http://httpwg.org/specs/rfc7541.html#rfc.section.4.2>`_ |
||||
(in octets) that the encoder is permitted to use for |
||||
the dynamic HPACK table. Valid values range from 0 to 4294967295 (2^32 - 1) and defaults to 4096. |
||||
0 effectively disables header compression. |
||||
|
||||
max_concurrent_streams |
||||
*(optional, integer)* `Maximum concurrent streams |
||||
<http://httpwg.org/specs/rfc7540.html#rfc.section.5.1.2>`_ |
||||
allowed for peer on one HTTP/2 connection. |
||||
Valid values range from 1 to 2147483647 (2^31 - 1) and defaults to 2147483647. |
||||
|
||||
.. _config_http_conn_man_http2_settings_initial_stream_window_size: |
||||
|
||||
initial_stream_window_size |
||||
*(optional, integer)* `Initial stream-level flow-control window |
||||
<http://httpwg.org/specs/rfc7540.html#rfc.section.6.9.2>`_ size. Valid values range from 65535 |
||||
(2^16 - 1, HTTP/2 default) to 2147483647 (2^31 - 1, HTTP/2 maximum) and defaults to 268435456 |
||||
(256 * 1024 * 1024). |
||||
|
||||
NOTE: 65535 is the initial window size from HTTP/2 spec. We only support increasing the default window |
||||
size now, so it's also the minimum. |
||||
|
||||
This field also acts as a soft limit on the number of bytes Envoy will buffer per-stream in the |
||||
HTTP/2 codec buffers. Once the buffer reaches this pointer, watermark callbacks will fire to |
||||
stop the flow of data to the codec buffers. |
||||
|
||||
initial_connection_window_size |
||||
*(optional, integer)* Similar to :ref:`initial_stream_window_size |
||||
<config_http_conn_man_http2_settings_initial_stream_window_size>`, but for connection-level flow-control |
||||
window. Currently , this has the same minimum/maximum/default as :ref:`initial_stream_window_size |
||||
<config_http_conn_man_http2_settings_initial_stream_window_size>`. |
||||
|
||||
These are the same options available in the upstream cluster :ref:`http2_settings |
||||
<config_cluster_manager_cluster_http2_settings>` option. |
||||
|
||||
.. _config_http_conn_man_server_name: |
||||
|
||||
server_name |
||||
*(optional, string)* An optional override that the connection manager will write to the |
||||
:ref:`config_http_conn_man_headers_server` header in responses. If not set, the default is |
||||
*envoy*. |
||||
|
||||
idle_timeout_s |
||||
*(optional, integer)* The idle timeout in seconds for connections managed by the connection |
||||
manager. The idle timeout is defined as the period in which there are no active requests. If not |
||||
set, there is no idle timeout. When the idle timeout is reached the connection will be closed. If |
||||
the connection is an HTTP/2 connection a drain sequence will occur prior to closing the |
||||
connection. See :ref:`drain_timeout_ms <config_http_conn_man_drain_timeout_ms>`. |
||||
|
||||
.. _config_http_conn_man_drain_timeout_ms: |
||||
|
||||
drain_timeout_ms |
||||
*(optional, integer)* The time in milliseconds that Envoy will wait between sending an HTTP/2 |
||||
"shutdown notification" (GOAWAY frame with max stream ID) and a final GOAWAY frame. This is used |
||||
so that Envoy provides a grace period for new streams that race with the final GOAWAY frame. |
||||
During this grace period, Envoy will continue to accept new streams. After the grace period, a |
||||
final GOAWAY frame is sent and Envoy will start refusing new streams. Draining occurs both |
||||
when a connection hits the idle timeout or during general server draining. The default grace |
||||
period is 5000 milliseconds (5 seconds) if this option is not specified. |
||||
|
||||
:ref:`access_log <config_access_log>` |
||||
*(optional, array)* Configuration for :ref:`HTTP access logs <arch_overview_access_logs>` |
||||
emitted by the connection manager. |
||||
|
||||
.. _config_http_conn_man_use_remote_address: |
||||
|
||||
use_remote_address |
||||
*(optional, boolean)* If set to true, the connection manager will use the real remote address |
||||
of the client connection when determining internal versus external origin and manipulating |
||||
various headers. If set to false or absent, the connection manager will use the |
||||
:ref:`config_http_conn_man_headers_x-forwarded-for` HTTP header. See the documentation for |
||||
:ref:`config_http_conn_man_headers_x-forwarded-for`, |
||||
:ref:`config_http_conn_man_headers_x-envoy-internal`, and |
||||
:ref:`config_http_conn_man_headers_x-envoy-external-address` for more information. |
||||
|
||||
.. _config_http_conn_man_forward_client_cert: |
||||
|
||||
forward_client_cert |
||||
*(optional, string)* How to handle the |
||||
:ref:`config_http_conn_man_headers_x-forwarded-client-cert` (XFCC) HTTP header. |
||||
Possible values are: |
||||
|
||||
1. **sanitize**: Do not send the XFCC header to the next hop. This is the default value. |
||||
2. **forward_only**: When the client connection is mTLS (Mutual TLS), forward the XFCC header in the request. |
||||
3. **always_forward_only**: Always forward the XFCC header in the request, regardless of whether the client connection is mTLS. |
||||
4. **append_forward**: When the client connection is mTLS, append the client certificate information to the request's XFCC header and forward it. |
||||
5. **sanitize_set**: When the client connection is mTLS, reset the XFCC header with the client certificate information and send it to the next hop. |
||||
|
||||
For the format of the XFCC header, please refer to |
||||
:ref:`config_http_conn_man_headers_x-forwarded-client-cert`. |
||||
|
||||
.. _config_http_conn_man_set_current_client_cert_details: |
||||
|
||||
set_current_client_cert_details |
||||
*(optional, array)* A list of strings, possible values are *Subject* and *SAN*. This field is |
||||
valid only when *forward_client_cert* is *append_forward* or *sanitize_set* and the client |
||||
connection is mTLS. It specifies the fields in the client certificate to be forwarded. Note that |
||||
in the :ref:`config_http_conn_man_headers_x-forwarded-client-cert` header, `Hash` is always set, |
||||
and `By` is always set when the client certificate presents the SAN value. |
||||
|
||||
generate_request_id |
||||
*(optional, boolean)* Whether the connection manager will generate the |
||||
:ref:`config_http_conn_man_headers_x-request-id` header if it does not exist. This defaults to |
||||
*true*. Generating a random UUID4 is expensive so in high throughput scenarios where this |
||||
feature is not desired it can be disabled. |
||||
|
||||
.. _config_http_conn_man_tracing: |
||||
|
||||
Tracing |
||||
------- |
||||
|
||||
.. code-block:: json |
||||
|
||||
{ |
||||
"tracing": { |
||||
"operation_name": "...", |
||||
"request_headers_for_tags": [] |
||||
} |
||||
} |
||||
|
||||
operation_name |
||||
*(required, string)* Span name will be derived from operation_name. "ingress" and "egress" |
||||
are the only supported values. |
||||
|
||||
request_headers_for_tags |
||||
*(optional, array)* A list of header names used to create tags for the active span. |
||||
The header name is used to populate the tag name, and the header value is used to populate the |
||||
tag value. The tag is created if the specified header name is present in the request's headers. |
||||
|
||||
.. _config_http_conn_man_filters: |
||||
|
||||
Filters |
||||
------- |
||||
|
||||
HTTP filter :ref:`architecture overview <arch_overview_http_filters>`. |
||||
|
||||
.. code-block:: json |
||||
|
||||
{ |
||||
"name": "...", |
||||
"config": "{...}" |
||||
} |
||||
|
||||
name |
||||
*(required, string)* The name of the filter to instantiate. The name must match a :ref:`supported |
||||
filter <config_http_filters>`. |
||||
|
||||
config |
||||
*(required, object)* Filter specific configuration which depends on the filter being |
||||
instantiated. See the :ref:`supported filters <config_http_filters>` for further documentation. |
@ -0,0 +1,8 @@ |
||||
HTTP filters |
||||
============ |
||||
|
||||
.. toctree:: |
||||
:glob: |
||||
:maxdepth: 2 |
||||
|
||||
* |
@ -1,21 +0,0 @@ |
||||
.. _config_http_conn_man_filters: |
||||
|
||||
Filters |
||||
======= |
||||
|
||||
HTTP filter :ref:`architecture overview <arch_overview_http_filters>`. |
||||
|
||||
.. code-block:: json |
||||
|
||||
{ |
||||
"name": "...", |
||||
"config": "{...}" |
||||
} |
||||
|
||||
name |
||||
*(required, string)* The name of the filter to instantiate. The name must match a :ref:`supported |
||||
filter <config_http_filters>`. |
||||
|
||||
config |
||||
*(required, object)* Filter specific configuration which depends on the filter being |
||||
instantiated. See the :ref:`supported filters <config_http_filters>` for further documentation. |
@ -1,23 +0,0 @@ |
||||
.. _config_http_conn_man_tracing: |
||||
|
||||
Tracing |
||||
======= |
||||
|
||||
.. code-block:: json |
||||
|
||||
{ |
||||
"tracing": { |
||||
"operation_name": "...", |
||||
"request_headers_for_tags": [] |
||||
} |
||||
} |
||||
|
||||
operation_name |
||||
*(required, string)* Span name will be derived from operation_name. "ingress" and "egress" |
||||
are the only supported values. |
||||
|
||||
request_headers_for_tags |
||||
*(optional, array)* A list of header names used to create tags for the active span. |
||||
The header name is used to populate the tag name, and the header value is used to populate the tag value. |
||||
The tag is created if the specified header name is present in the request's headers. |
||||
|
Loading…
Reference in new issue