Skip to content

Supported configuration

The full matrix of Envoy configuration Arion accepts: bootstrap, listeners, filters, routing, clusters and TLS, with what is refused.

Arion accepts a subset of Envoy configuration, and any config it accepts behaves essentially as it would in Envoy. Anything it cannot honour the same way is refused at load — or NACKed over xDS — rather than silently ignored; the reasoning behind this promise is on the Envoy compatibility page.

A field listed as not supported only causes an error when it is actually set to a non-default value, so configs that merely could use an unsupported feature still load. Errors name the offending field and its YAML path.

Bootstrap

AreaStatusNotes
nodePartialid and cluster only, both required; metadata, locality and the rest are refused.
adminPartialaddress (socket address) only; access_log, allow_paths, profile_path are refused.
static_resourcesSupportedlisteners, clusters, secrets.
dynamic_resourcesPartialads_config.grpc_services with envoy_grpc targets only; lds_config, cds_config and google_grpc are refused. See xDS resource types.
stats_flush_intervalSupportedApplies to stats sinks.
stats_sinksPartialThe OpenTelemetry sink (envoy.extensions.stat_sinks.open_telemetry.v3.SinkConfig): grpc_service and prefix only.
tracing, layered_runtime, overload_manager, watchdog, cluster_manager, stats_config, hds_config, bootstrap extensionsNot supportedTracing is configured on the HTTP connection manager instead.

Listeners

Reference: listeners.

AreaStatusNotes
address.socket_addressPartialLiteral IP addresses only; hostnames are not resolved for listener binds.
Internal listenersSupportedVia internal_listener: {} in place of an address; reachable from clusters through internal addresses.
socket_optionsPartialAt most one option, used for SO_BINDTODEVICE (requires CAP_NET_RAW).
tcp_backlog_sizeSupportedDefault 128.
Listener access_logSupportedFile, stdout and stderr loggers.
filter_chainsSupportedEach chain needs a unique filter_chain_match and a name.
filter_chain_matchPartialdestination_port, prefix_ranges, source_prefix_ranges, source_ports, server_names (no bare * entry). transport_protocol, application_protocols, source_type, address_suffix are refused.
default_filter_chainNot supportedRefused when set; a chain without a filter_chain_match acts as the catch-all instead.
listener_filtersPartialtls_inspector, proxy_protocol, listener local_ratelimit — see the listener filter reference.
Chain transport_socketPartialDownstreamTlsContext and RawBuffer; require_client_certificate supported, require_sni refused.
UDP / QUIC listenersNot supportedTCP only.
additional_addresses, use_original_dst, filter_chain_matcher, connection_balance_config, reuse_port, bind_to_port, per_connection_buffer_limit_bytes, listener-filter timeoutsNot supportedRefused when set.

Network filters

Five network filters exist. RBAC, RateLimit and ConnectionLimit must appear before the terminal filter of a chain, which is either the HTTP connection manager or the TCP proxy.

Filter (@type under typed_config)StatusNotes
envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManagerSupportedSee the HCM reference and the section below.
envoy.extensions.filters.network.tcp_proxy.v3.TcpProxyPartialcluster / weighted_clusters and access_log; idle timeouts, tunneling and hash policy are refused. Reference.
envoy.extensions.filters.network.rbac.v3.RBACSupportedConnection-level allow/deny. Reference.
envoy.extensions.filters.network.ratelimit.v3.RateLimitSupportedGlobal rate limiting over gRPC. Reference.
envoy.extensions.filters.network.connection_limit.v3.ConnectionLimitSupportedPer-filter-chain connection cap. Reference.

HTTP connection manager

AreaStatusNotes
codec_typePartialAUTO, HTTP1, HTTP2; HTTP/3 is not supported.
route_config / rdsSupportedInline route config, or RDS with config_source: { ads: {} } only.
http_filtersSupportedThe final filter must be the router, which cannot be disabled.
request_timeoutSupportedWhole-request timeout.
upgrade_configsPartialwebsocket only; CONNECT upgrades are refused.
XFF handlingSupporteduse_remote_address, skip_xff_append, xff_num_trusted_hops.
Request IDsSupportedgenerate_request_id, preserve_external_request_id, always_set_request_id_in_response.
tracingSupportedOpenTelemetry tracer — see tracing.
access_logPartialFile, stdout, stderr with text format strings; see Observability below.
early_header_mutation_extensionsSupportedHeader mutations applied before routing.
normalize_path, merge_slashes, local_reply_config, stream_idle_timeout, server_name, max_request_headers_kb, forward_client_cert_details, HTTP/1–2 protocol options on the HCMNot supportedRefused when set; stat_prefix is accepted but ignored with a warning.

HTTP filters

Ten HTTP filters exist. Per-route overrides go in a route's typed_per_filter_config, either directly or wrapped in envoy.config.route.v3.FilterConfig (which adds disabled); virtual-host and route-config level overrides are not supported.

Filter (@type)StatusPer-route overrideNotes
envoy.extensions.filters.http.router.v3.RouterSupported—Required terminal filter; its option fields are refused when set. Reference.
envoy.extensions.filters.http.cors.v3.Cors / CorsPolicySupported—Reference.
envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimitSupportedLocalRateLimitReference.
envoy.extensions.filters.http.rbac.v3.RBACSupportedRBACPerRouteReference.
envoy.extensions.filters.http.jwt_authn.v3.JwtAuthenticationSupported—Local and remote JWKS. Reference.
envoy.extensions.filters.http.ext_proc.v3.ExternalProcessorSupportedExtProcPerRouteReference.
envoy.extensions.filters.http.wasm.v3.WasmPartial—Local module code only; remote fetch is refused. Reference.
arion.extensions.filters.http.mcp.mcp_gateway.v3.McpGatewaySupported—Arion extension. Reference.
arion.extensions.filters.http.user_rate_limit.v3.UserRateLimiterSupported—Arion extension. Reference.
arion.extensions.filters.http.cedar.cedar_policy.v3.CedarPolicySupported—Arion extension. Reference.

Routing

Reference: routes.

AreaStatusNotes
Virtual host domainsSupportedExact and wildcard domains, longest match wins.
Path matchSupportedprefix, path, safe_regex, path_separated_prefix; case_sensitive.
Header matchSupportedExact, prefix, suffix, contains, safe_regex and present matchers.
Query parameter matchSupportedpresent_match and string_match.
ActionsSupportedroute, redirect, direct_response.
Cluster selectionSupportedcluster, weighted_clusters, cluster_header.
Path rewritesSupportedprefix_rewrite and regex_rewrite.
Retry policySupportedretry_on (5xx, gateway-error, reset, connect-failure, envoy-ratelimited, retriable-4xx, refused-stream, retriable-status-codes, retriable-headers, http3-post-connect-failure), num_retries, per_try_timeout, backoff, retriable status codes and headers; per virtual host or per route.
Hash policySupportedSource IP, header or query parameter, with terminal; used by ring-hash and Maglev clusters.
Header mutationsSupportedRequest/response add and remove at route-config, virtual-host and route level; most_specific_header_mutations_wins.
Route timeoutSupportedDefault 15s; cluster_not_found_response_code configurable.
prioritySupportedDEFAULT and HIGH, matching circuit-breaker threshold sets.
Host rewrite, request mirroring, hedgingNot supportedhost_rewrite_specifier, request_mirror_policies and hedge_policy are refused when set.

Clusters

Reference: clusters.

AreaStatusNotes
type: STATICSupportedRequires load_assignment.
type: STRICT_DNSSupportedRequires load_assignment; DNS tuning fields (dns_refresh_rate, respect_dns_ttl, resolvers) are refused.
type: EDSSupportedEndpoints over ADS; eds_cluster_config is refused, so the EDS resource name is the cluster name.
type: ORIGINAL_DSTSupportedRequires lb_policy: CLUSTER_PROVIDED; destination from the connection, an HTTP header, or a metadata key; upstream_port_override.
type: LOGICAL_DNSNot supportedRefused; use STRICT_DNS.
Custom cluster types (cluster_type)Not supportedRefused.
lb_policySupportedROUND_ROBIN, RANDOM, LEAST_REQUEST, RING_HASH, MAGLEV; CLUSTER_PROVIDED for original-destination clusters.
load_balancing_policyPartialThe standard policies above plus an override-host policy (pick the host named by a header or metadata, with a fallback policy).
EndpointsSupportedSocket, Unix pipe and internal addresses; per-endpoint load_balancing_weight and health status; endpoint groups carry priority, while locality itself is refused.
Health checksPartialHTTP, TCP and gRPC checkers; custom health checks and HTTP/3 codec are refused. See health checks.
circuit_breakersPartialPer-priority max_connections, max_requests, max_retries, track_remaining; max_pending_requests, retry_budget and max_connection_pools are refused.
outlier_detectionNot supportedRefused when set.
Protocol optionsPartialtyped_extension_protocol_options with HttpProtocolOptions: explicit HTTP/1.1 or HTTP/2 (with keepalive settings). auto_config, use_downstream_protocol_config and HTTP/3 are refused, as are the deprecated cluster-level protocol option fields.
transport_socketSupportedUpstreamTlsContext, PROXY protocol upstream transport (v1/v2, pass-through TLVs) and RawBuffer.
connect_timeout, cleanup_interval, upstream_bind_configSupportedBind config carries a bind device only.
lb_subset_config, common_lb_config, upstream filters, max_requests_per_connection, preconnect_policyNot supportedRefused when set.

Secrets and TLS

Reference: secrets.

AreaStatusNotes
Static secretsPartialtls_certificate (chain + key) and validation_context; generic_secret and session_ticket_keys are refused.
Certificate materialSupportedAny DataSource: file path, inline string or bytes, or an environment variable; watched_directory is refused.
SDSPartialReference by name only; the per-secret sds_config source is refused (delivery is always the ADS stream). Removal deletes the stored secret; existing listeners and clusters retain their built TLS contexts until those consumers are updated.
ValidationPartialtrusted_ca with trust_chain_verification (including ACCEPT_UNTRUSTED), inline or via SDS name; combined_validation_context and certificate providers are refused.
TLS parametersPartialTLS 1.2 and 1.3 only: minimum and maximum protocol version (default minimum 1.2, TLS 1.0/1.1 refused); ALPN, cipher-suite and curve selection are refused.
Client certificates (mTLS)Supportedrequire_client_certificate on the downstream context.

Observability outputs

AreaStatusNotes
Access loggersPartialenvoy.access_loggers.file, stdout, stderr with text formats (text_format or text_format_source, plus omit_empty_values); json_format, access-log filter, gRPC and OpenTelemetry loggers are refused. See access-log operators.
Stats sinksPartialOpenTelemetry gRPC sink only; delta reporting and tag options are refused.
TracingSupportedConfigured per HTTP connection manager — see tracing.

Commonly asked, not supported

Each of these is absent from Arion today. Setting the corresponding Envoy field or filter makes the config refuse to load, which is the intended behaviour: you find out at startup, not in production.

FeatureWhere it would appear
ext_authz (HTTP or network filter)http_filters / filter chains
OAuth2 / OIDC filtershttp_filters
Outlier detectionclusters[].outlier_detection
LOGICAL_DNS clustersclusters[].type
Host rewriteroute.host_rewrite_literal and friends
Request mirroringroute.request_mirror_policies
Hedgingroute.hedge_policy / HCM
Access log json_formataccess_log[].log_format
Access-log filters and gRPC access loggersaccess_log[]
Tap filterhttp_filters
Compression / decompression filtershttp_filters
UDP listeners, QUIC, HTTP/3listeners / codec / protocol options

For authorization needs usually met with ext_authz, see ext_proc, RBAC and Cedar policies.

Continue

Start typing to search the site.

↑ ↓ to move Enter to open Esc to close