<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Design on Envoy Gateway</title><link>/contributions/design/</link><description>Recent content in Design on Envoy Gateway</description><generator>Hugo</generator><language>en</language><atom:link href="/contributions/design/index.xml" rel="self" type="application/rss+xml"/><item><title>Goals</title><link>/contributions/design/goals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/goals/</guid><description>&lt;p&gt;The high-level goal of the Envoy Gateway project is to attract more users to Envoy by lowering barriers to adoption
through expressive, extensible, role-oriented APIs that support a multitude of ingress and L7/L4 traffic routing
use cases; and provide a common foundation for vendors to build value-added products without having to re-engineer
fundamental interactions.&lt;/p&gt;



&lt;h2 id="objectives"&gt;Objectives&lt;a class="td-heading-self-link" href="#objectives" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;




&lt;h3 id="expressive-api"&gt;Expressive API&lt;a class="td-heading-self-link" href="#expressive-api" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The Envoy Gateway project will expose a simple and expressive API, with defaults set for many capabilities.&lt;/p&gt;</description></item><item><title>System Design</title><link>/contributions/design/system-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/system-design/</guid><description>&lt;h2 id="goals"&gt;Goals&lt;a class="td-heading-self-link" href="#goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Define the system components needed to satisfy the requirements of Envoy Gateway.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="non-goals"&gt;Non-Goals&lt;a class="td-heading-self-link" href="#non-goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create a detailed design and interface specification for each system component.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="terminology"&gt;Terminology&lt;a class="td-heading-self-link" href="#terminology" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Control Plane- A collection of inter-related software components for providing application gateway and routing
functionality. The control plane is implemented by Envoy Gateway and provides services for managing the data plane.
These services are detailed in the &lt;a href="/contributions/design/system-design/#components"&gt;components&lt;/a&gt; section.&lt;/li&gt;
&lt;li&gt;Data Plane- Provides intelligent application-level traffic routing and is implemented as one or more Envoy proxies.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="architecture"&gt;Architecture&lt;a class="td-heading-self-link" href="#architecture" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;


&lt;img src="/img/architecture.png" alt="Architecture"&gt;&lt;/p&gt;</description></item><item><title>Watching Components Design</title><link>/contributions/design/watching/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/watching/</guid><description>&lt;p&gt;Envoy Gateway is made up of several components that communicate in-process. Some of them (namely Providers) watch
external resources, and &amp;ldquo;publish&amp;rdquo; what they see for other components to consume; others watch what another publishes and
act on it (such as the resource translator watches what the providers publish, and then publishes its own results that
are watched by another component). Some of these internally published results are consumed by multiple components.&lt;/p&gt;</description></item><item><title>Gateway API Translator Design</title><link>/contributions/design/gatewayapi-translator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/gatewayapi-translator/</guid><description>&lt;p&gt;The Gateway API translates external resources, e.g. GatewayClass, from the configured Provider to the Intermediate
Representation (IR).&lt;/p&gt;



&lt;h2 id="assumptions"&gt;Assumptions&lt;a class="td-heading-self-link" href="#assumptions" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Initially target core conformance features only, to be followed by extended conformance features.&lt;/p&gt;



&lt;h2 id="inputs-and-outputs"&gt;Inputs and Outputs&lt;a class="td-heading-self-link" href="#inputs-and-outputs" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The main inputs to the Gateway API translator are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GatewayClass, Gateway, HTTPRoute, TLSRoute, Service, ReferenceGrant, Namespace, and Secret resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; ReferenceGrant is not fully implemented as of v0.2.&lt;/p&gt;
&lt;p&gt;The outputs of the Gateway API translator are:&lt;/p&gt;</description></item><item><title>Control Plane Observability: Metrics</title><link>/contributions/design/eg-metrics/</link><pubDate>Tue, 10 Oct 2023 00:00:00 +0000</pubDate><guid>/contributions/design/eg-metrics/</guid><description>&lt;p&gt;This document aims to cover all aspects of envoy gateway control plane metrics observability.&lt;/p&gt;


&lt;div class="alert alert-secondary" role="alert"&gt;
&lt;h4 class="alert-heading"&gt;Note&lt;/h4&gt;

 &lt;strong&gt;Data plane&lt;/strong&gt; observability (while important) is outside of scope for this document. For data plane observability, refer to &lt;a href="/contributions/design/proxy-metrics/"&gt;here&lt;/a&gt;.

&lt;/div&gt;




&lt;h2 id="current-state"&gt;Current State&lt;a class="td-heading-self-link" href="#current-state" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;At present, the Envoy Gateway control plane provides logs and controller-runtime metrics, without traces. Logs are managed through our proprietary library (&lt;code&gt;internal/logging&lt;/code&gt;, a shim to &lt;code&gt;zap&lt;/code&gt;) and are written to &lt;code&gt;/dev/stdout&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Backend</title><link>/contributions/design/backend/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/backend/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This design document introduces the &lt;code&gt;Backend&lt;/code&gt; API allowing system administrators to represent backends without the use
of a K8s &lt;code&gt;Service&lt;/code&gt; resource.&lt;/p&gt;
&lt;p&gt;Common use cases for non-Service backends in the K8s and Envoy ecosystem include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cluster-external endpoints, which are currently second-class citizens in Gateway-API
(supported using &lt;a href="/latest/tasks/traffic/routing-outside-kubernetes/"&gt;Services and FQDN endpoints&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Host-local endpoints, such as sidecars or daemons that listen on &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/address.proto#envoy-v3-api-msg-config-core-v3-pipe"&gt;unix domain sockets&lt;/a&gt; or envoy &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/configuration/other_features/internal_listener"&gt;internal listeners&lt;/a&gt;,
that cannot be represented by a K8s service at all.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Several projects currently support backends that are not registered in the infrastructure-specific service registry.&lt;/p&gt;</description></item><item><title>BackendTrafficPolicy</title><link>/contributions/design/backend-traffic-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/backend-traffic-policy/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This design document introduces the &lt;code&gt;BackendTrafficPolicy&lt;/code&gt; API allowing users to configure
the behavior for how the Envoy Proxy server communicates with upstream backend services/endpoints.&lt;/p&gt;



&lt;h2 id="goals"&gt;Goals&lt;a class="td-heading-self-link" href="#goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add an API definition to hold settings for configuring behavior of the connection between the backend services
and Envoy Proxy listener.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="non-goals"&gt;Non Goals&lt;a class="td-heading-self-link" href="#non-goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Define the API configuration fields in this API.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="implementation"&gt;Implementation&lt;a class="td-heading-self-link" href="#implementation" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;BackendTrafficPolicy&lt;/code&gt; is an implied hierarchy type API that can be used to extend &lt;a href="https://gateway-api.sigs.k8s.io/"&gt;Gateway API&lt;/a&gt;.
It can target either a &lt;code&gt;Gateway&lt;/code&gt;, or an xRoute (&lt;code&gt;HTTPRoute&lt;/code&gt;/&lt;code&gt;GRPCRoute&lt;/code&gt;/etc.). When targeting a &lt;code&gt;Gateway&lt;/code&gt;,
it will apply the configured settings within ght &lt;code&gt;BackendTrafficPolicy&lt;/code&gt; to all children xRoute resources of that &lt;code&gt;Gateway&lt;/code&gt;.
If a &lt;code&gt;BackendTrafficPolicy&lt;/code&gt; targets an xRoute and a different &lt;code&gt;BackendTrafficPolicy&lt;/code&gt; targets the &lt;code&gt;Gateway&lt;/code&gt; that route belongs to,
then the configuration from the policy that is targeting the xRoute resource will win in a conflict.&lt;/p&gt;</description></item><item><title>Bootstrap Design</title><link>/contributions/design/bootstrap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/bootstrap/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/envoyproxy/gateway/issues/31"&gt;Issue 31&lt;/a&gt; specifies the need for allowing advanced users to specify their custom
Envoy Bootstrap configuration rather than using the default Bootstrap configuration
defined in Envoy Gateway. This allows advanced users to extend Envoy Gateway and
support their custom use cases such setting up tracing and stats configuration
that is not supported by Envoy Gateway.&lt;/p&gt;



&lt;h2 id="goals"&gt;Goals&lt;a class="td-heading-self-link" href="#goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Define an API field to allow a user to specify a custom Bootstrap&lt;/li&gt;
&lt;li&gt;Provide tooling to allow the user to generate the default Bootstrap configuration
as well as validate their custom Bootstrap.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="non-goals"&gt;Non Goals&lt;a class="td-heading-self-link" href="#non-goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Allow user to configure only a section of the Bootstrap&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="api"&gt;API&lt;a class="td-heading-self-link" href="#api" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Leverage the existing &lt;a href="/latest/api/extension_types/#envoyproxy"&gt;EnvoyProxy&lt;/a&gt; resource which can be attached to the &lt;a href="https://gateway-api.sigs.k8s.io/reference/1.4/spec/#gatewayclass"&gt;GatewayClass&lt;/a&gt; using
the &lt;a href="https://gateway-api.sigs.k8s.io/reference/1.4/spec/#parametersreference"&gt;parametersRef&lt;/a&gt; field, and define a &lt;code&gt;Bootstrap&lt;/code&gt; field within the resource. If this field is set,
the value is used as the Bootstrap configuration for all managed Envoy Proxies created by Envoy Gateway.&lt;/p&gt;</description></item><item><title>ClientTrafficPolicy</title><link>/contributions/design/client-traffic-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/client-traffic-policy/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This design document introduces the &lt;code&gt;ClientTrafficPolicy&lt;/code&gt; API allowing system administrators to configure
the behavior for how the Envoy Proxy server behaves with downstream clients.&lt;/p&gt;



&lt;h2 id="goals"&gt;Goals&lt;a class="td-heading-self-link" href="#goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add an API definition to hold settings for configuring behavior of the connection between the downstream
client and Envoy Proxy listener.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="non-goals"&gt;Non Goals&lt;a class="td-heading-self-link" href="#non-goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Define the API configuration fields in this API.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="implementation"&gt;Implementation&lt;a class="td-heading-self-link" href="#implementation" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;ClientTrafficPolicy&lt;/code&gt; is a &lt;a href="https://gateway-api.sigs.k8s.io/references/policy-attachment/#direct-policy-attachment"&gt;Direct Policy Attachment&lt;/a&gt; type API that can be used to extend &lt;a href="https://gateway-api.sigs.k8s.io/"&gt;Gateway API&lt;/a&gt;
to define configuration that affect the connection between the downstream client and Envoy Proxy listener.&lt;/p&gt;</description></item><item><title>Configuration API Design</title><link>/contributions/design/config-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/config-api/</guid><description>&lt;h2 id="motivation"&gt;Motivation&lt;a class="td-heading-self-link" href="#motivation" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/envoyproxy/gateway/issues/51"&gt;Issue 51&lt;/a&gt; specifies the need to design an API for configuring Envoy Gateway. The control plane is configured
statically at startup and the data plane is configured dynamically through Kubernetes resources, primarily
&lt;a href="https://gateway-api.sigs.k8s.io/"&gt;Gateway API&lt;/a&gt; objects. Refer to the Envoy Gateway &lt;a href="../system-design/"&gt;design doc&lt;/a&gt; for additional details regarding
Envoy Gateway terminology and configuration.&lt;/p&gt;



&lt;h2 id="goals"&gt;Goals&lt;a class="td-heading-self-link" href="#goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Define an &lt;strong&gt;initial&lt;/strong&gt; API to configure Envoy Gateway at startup.&lt;/li&gt;
&lt;li&gt;Define an &lt;strong&gt;initial&lt;/strong&gt; API for configuring the managed data plane, e.g. Envoy proxies.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="non-goals"&gt;Non-Goals&lt;a class="td-heading-self-link" href="#non-goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Implementation of the configuration APIs.&lt;/li&gt;
&lt;li&gt;Define the &lt;code&gt;status&lt;/code&gt; subresource of the configuration APIs.&lt;/li&gt;
&lt;li&gt;Define a &lt;strong&gt;complete&lt;/strong&gt; set of APIs for configuring Envoy Gateway. As stated in the &lt;a href="/contributions/design/config-api/#goals"&gt;Goals&lt;/a&gt;, this document
defines the initial configuration APIs.&lt;/li&gt;
&lt;li&gt;Define an API for deploying/provisioning/operating Envoy Gateway. If needed, a future Envoy Gateway operator would be
responsible for designing and implementing this type of API.&lt;/li&gt;
&lt;li&gt;Specify tooling for managing the API, e.g. generate protos, CRDs, controller RBAC, etc.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="control-plane-api"&gt;Control Plane API&lt;a class="td-heading-self-link" href="#control-plane-api" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;EnvoyGateway&lt;/code&gt; API defines the control plane configuration, e.g. Envoy Gateway. Key points of this API are:&lt;/p&gt;</description></item><item><title>Data Plane Observability: Accesslog</title><link>/contributions/design/proxy-accesslog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/proxy-accesslog/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Envoy supports extensible accesslog to different sinks, File, gRPC etc.&lt;/p&gt;
&lt;p&gt;Envoy supports customizable access log formats using predefined fields as well as arbitrary HTTP request and response headers.&lt;/p&gt;
&lt;p&gt;Envoy supports several built-in access log filters and extension filters that are registered at runtime.&lt;/p&gt;
&lt;p&gt;Envoy Gateway leverages &lt;a href="https://gateway-api.sigs.k8s.io/"&gt;Gateway API&lt;/a&gt; for configuring managed Envoy proxies. Gateway API defines core, extended, and implementation-specific API &lt;a href="https://gateway-api.sigs.k8s.io/concepts/conformance/?h=extended#2-support-levels"&gt;support levels&lt;/a&gt; for implementers such as Envoy Gateway to expose features. Since accesslog is not covered by &lt;code&gt;Core&lt;/code&gt; or &lt;code&gt;Extended&lt;/code&gt; APIs, EG should provide an easy to config access log formats and sinks per &lt;code&gt;EnvoyProxy&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Data Plane Observability: Metrics</title><link>/contributions/design/proxy-metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/proxy-metrics/</guid><description>&lt;p&gt;This document aims to cover all aspects of envoy gateway data plane metrics observability.&lt;/p&gt;


&lt;div class="alert alert-secondary" role="alert"&gt;
&lt;h4 class="alert-heading"&gt;Note&lt;/h4&gt;

 &lt;strong&gt;Control plane&lt;/strong&gt; observability (while important) is outside of scope for this document. For control plane observability, refer to &lt;a href="/contributions/design/eg-metrics/"&gt;here&lt;/a&gt;.

&lt;/div&gt;




&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Envoy provide robust platform for metrics, Envoy support three different kinds of stats: counter, gauges, histograms.&lt;/p&gt;
&lt;p&gt;Envoy enables prometheus format output via the &lt;code&gt;/stats/prometheus&lt;/code&gt; &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/operations/admin"&gt;admin endpoint&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Envoy support different kinds of sinks, but EG will only support &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/stat_sinks/open_telemetry/v3/open_telemetry.proto"&gt;Open Telemetry sink&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Data Plane Observability: Tracing</title><link>/contributions/design/proxy-tracing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/proxy-tracing/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Envoy supports extensible tracing to different sinks, Zipkin, OpenTelemetry etc. Overview of Envoy tracing can be found &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/observability/tracing"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Envoy Gateway leverages &lt;a href="https://gateway-api.sigs.k8s.io/"&gt;Gateway API&lt;/a&gt; for configuring managed Envoy proxies. Gateway API defines core, extended, and implementation-specific API &lt;a href="https://gateway-api.sigs.k8s.io/concepts/conformance/?h=extended#2-support-levels"&gt;support levels&lt;/a&gt; for implementers such as Envoy Gateway to expose features. Since tracing is not covered by &lt;code&gt;Core&lt;/code&gt; or &lt;code&gt;Extended&lt;/code&gt; APIs, EG should provide an easy to config tracing per &lt;code&gt;EnvoyProxy&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Only OpenTelemetry sink can be configured currently, you can use &lt;a href="https://opentelemetry.io/docs/collector/"&gt;OpenTelemetry Collector&lt;/a&gt; to export to other tracing backends.&lt;/p&gt;</description></item><item><title>Debug support in Envoy Gateway</title><link>/contributions/design/pprof/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/pprof/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Envoy Gateway exposes endpoints at &lt;code&gt;localhost:19000/debug/pprof&lt;/code&gt; to run Golang profiles to aid in live debugging.&lt;/p&gt;
&lt;p&gt;The endpoints are equivalent to those found in the http/pprof package. &lt;code&gt;/debug/pprof/&lt;/code&gt; returns an HTML page listing the available profiles.&lt;/p&gt;



&lt;h2 id="goals"&gt;Goals&lt;a class="td-heading-self-link" href="#goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add admin server to Envoy Gateway control plane, separated with admin server.&lt;/li&gt;
&lt;li&gt;Add pprof support to Envoy Gateway control plane.&lt;/li&gt;
&lt;li&gt;Define an API to allow Envoy Gateway to custom admin server configuration.&lt;/li&gt;
&lt;li&gt;Define an API to allow Envoy Gateway to open envoy gateway config dump in logs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following are the different types of profiles end-user can run:&lt;/p&gt;</description></item><item><title>egctl Design</title><link>/contributions/design/egctl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/egctl/</guid><description>&lt;h2 id="motivation"&gt;Motivation&lt;a class="td-heading-self-link" href="#motivation" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;EG should provide a command line tool with following capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Collect configuration from envoy proxy and gateway&lt;/li&gt;
&lt;li&gt;Analyse system configuration to diagnose any issues in envoy gateway&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This tool is named &lt;code&gt;egctl&lt;/code&gt;.&lt;/p&gt;



&lt;h2 id="syntax"&gt;Syntax&lt;a class="td-heading-self-link" href="#syntax" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Use the following syntax to run &lt;code&gt;egctl&lt;/code&gt; commands from your terminal window:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-style:italic"&gt;egctl [command] [entity] [name] [flags]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;where &lt;code&gt;command&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, and &lt;code&gt;flags&lt;/code&gt; are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;command&lt;/code&gt;: Specifies the operation that you want to perform on one or more resources,
for example &lt;code&gt;config&lt;/code&gt;, &lt;code&gt;version&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Envoy Gateway Extensions Design</title><link>/contributions/design/extending-envoy-gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/extending-envoy-gateway/</guid><description>&lt;p&gt;As outlined in the &lt;a href="https://github.com/envoyproxy/gateway/blob/main/GOALS.md#extensibility"&gt;official goals&lt;/a&gt; for the Envoy Gateway project, one of the main goals is to &amp;ldquo;provide a common foundation for vendors to build value-added products
without having to re-engineer fundamental interactions&amp;rdquo;. Development of the Envoy Gateway project has been focused on developing the core features for the project and
Kubernetes Gateway API conformance. This system focuses on the “common foundation for vendors” component by introducing a way for vendors to extend Envoy Gateway.&lt;/p&gt;</description></item><item><title>EnvoyExtensionPolicy</title><link>/contributions/design/envoy-extension-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/envoy-extension-policy/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This design document introduces the &lt;code&gt;EnvoyExtensionPolicy&lt;/code&gt; API allowing system administrators to configure traffic
processing extensibility policies, based on existing Network and HTTP Envoy proxy &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/extending/extending"&gt;extension points&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Envoy Gateway already provides two methods of control plane extensibility that can be used to achieve this functionality:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="/latest/api/extension_types/#envoypatchpolicy"&gt;Envoy Patch Policy&lt;/a&gt; can be used to patch Listener filters and HTTP Connection Manager filters.&lt;/li&gt;
&lt;li&gt;&lt;a href="/contributions/design/extending-envoy-gateway/"&gt;Envoy Extension Manager&lt;/a&gt; can be used to programmatically mutate Listener filters and HTTP Connection Manager filters.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These approaches require a high level of Envoy and Envoy Gateway expertise and may create a significant operational
burden for users (see &lt;a href="/contributions/design/envoy-extension-policy/#Alternatives"&gt;Alternatives&lt;/a&gt; for more details). For this reason, this document proposes to support Envoy
data plane extensibility options as first class citizens of Envoy Gateway.&lt;/p&gt;</description></item><item><title>EnvoyPatchPolicy</title><link>/contributions/design/envoy-patch-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/envoy-patch-policy/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This design introduces the &lt;code&gt;EnvoyPatchPolicy&lt;/code&gt; API allowing users to modify the generated Envoy xDS Configuration
that Envoy Gateway generates before sending it to Envoy Proxy.&lt;/p&gt;
&lt;p&gt;Envoy Gateway allows users to configure networking and security intent using the
upstream &lt;a href="https://gateway-api.sigs.k8s.io/"&gt;Gateway API&lt;/a&gt; as well as implementation specific &lt;a href="/latest/api/extension_types/"&gt;Extension APIs&lt;/a&gt; defined in this project
to provide a more batteries included experience for application developers.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;These APIs are an abstracted version of the underlying Envoy xDS API to provide a better user experience for the application developer, exposing and setting only a subset of the fields for a specific feature, sometimes in a opinionated way (e.g &lt;a href="/contributions/design/rate-limit/"&gt;RateLimit&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;These APIs do not expose all the features capabilities that Envoy has either because these features are desired but the API
is not defined yet or the project cannot support such an extensive list of features.
To alleviate this problem, and provide an interim solution for a small section of advanced users who are well versed in
Envoy xDS API and its capabilities, this API is being introduced.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="goals"&gt;Goals&lt;a class="td-heading-self-link" href="#goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add an API allowing users to modify the generated xDS Configuration&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="non-goals"&gt;Non Goals&lt;a class="td-heading-self-link" href="#non-goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Support multiple patch mechanisims&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="implementation"&gt;Implementation&lt;a class="td-heading-self-link" href="#implementation" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;EnvoyPatchPolicy&lt;/code&gt; is a &lt;a href="https://gateway-api.sigs.k8s.io/references/policy-attachment/#direct-policy-attachment"&gt;Direct Policy Attachment&lt;/a&gt; type API that can be used to extend &lt;a href="https://gateway-api.sigs.k8s.io/"&gt;Gateway API&lt;/a&gt;
Modifications to the generated xDS configuration can be provided as a JSON Patch which is defined in
&lt;a href="https://datatracker.ietf.org/doc/html/rfc6902"&gt;RFC 6902&lt;/a&gt;. This patching mechanism has been adopted in &lt;a href="https://kubernetes.io/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch/"&gt;Kubernetes&lt;/a&gt; as well as &lt;a href="https://github.com/kubernetes-sigs/kustomize/blob/master/examples/jsonpatch.md"&gt;Kustomize&lt;/a&gt; to update
resource objects.&lt;/p&gt;</description></item><item><title>Fuzzing</title><link>/contributions/design/fuzzing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/fuzzing/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This design document introduces &lt;strong&gt;Fuzz Testing&lt;/strong&gt; in Envoy Gateway.
Its goal is to detect unexpected crashes, memory leaks, and undefined behaviors in the translation of Gateway
API resources and configuration parsing, areas that may not be fully covered by unit tests.&lt;/p&gt;
&lt;p&gt;Additionally, &lt;a href="https://github.com/google/oss-fuzz"&gt;OSS-Fuzz&lt;/a&gt;
provides a continuous fuzzing infrastructure for popular open-source projects. By writing fuzz tests,
we can leverage OSS-Fuzz to continuously fuzz Envoy Gateway against a wide range of inputs,
improving its resilience and reliability.&lt;/p&gt;</description></item><item><title>Metadata in XDS resources</title><link>/contributions/design/metadata/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/metadata/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;In Envoy, &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/base.proto#envoy-v3-api-msg-config-core-v3-metadata"&gt;static metadata&lt;/a&gt; can be configured on various resources: &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/listener/v3/listener.proto#envoy-v3-api-msg-config-listener-v3-listener"&gt;listener&lt;/a&gt;, &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#config-route-v3-virtualhost"&gt;virtual host&lt;/a&gt;, &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-msg-config-route-v3-route"&gt;route&lt;/a&gt; and &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/cluster/v3/cluster.proto"&gt;cluster&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Static metadata can be used for various purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Observability: enrichment of access logs and traces with &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/formatter/metadata/v3/metadata.proto.html#formatter-extension-for-printing-various-types-of-metadata-proto"&gt;metadata formatters&lt;/a&gt; and &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/type/tracing/v3/custom_tag.proto.html#envoy-v3-api-msg-type-tracing-v3-customtag-metadata"&gt;custom tags&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Processing: provide configuration context to filters in a certain scope (e.g. vhost, route, etc.).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This document describes how Envoy Gateway manages &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/base.proto#envoy-v3-api-msg-config-core-v3-metadata"&gt;static metadata&lt;/a&gt; for various XDS resource such as listeners, virtual hosts, routes, clusters and endpoints.&lt;/p&gt;



&lt;h2 id="configuration"&gt;Configuration&lt;a class="td-heading-self-link" href="#configuration" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Envoy Gateway propagates certain attributes of &lt;a href="https://gateway-api.sigs.k8s.io"&gt;Gateway-API&lt;/a&gt; resources to XDS resources. Attributes include:&lt;/p&gt;</description></item><item><title>Rate Limit Design</title><link>/contributions/design/rate-limit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/rate-limit/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Rate limit is a feature that allows the user to limit the number of incoming requests
to a predefined value based on attributes within the traffic flow.&lt;/p&gt;
&lt;p&gt;Here are some reasons why a user may want to implement Rate limits&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To prevent malicious activity such as DDoS attacks.&lt;/li&gt;
&lt;li&gt;To prevent applications and its resources (such as a database) from getting overloaded.&lt;/li&gt;
&lt;li&gt;To create API limits based on user entitlements.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="scope-types"&gt;Scope Types&lt;a class="td-heading-self-link" href="#scope-types" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The rate limit type here describes the scope of rate limits.&lt;/p&gt;</description></item><item><title>Running Envoy Gateway locally</title><link>/contributions/design/local-envoy-gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/local-envoy-gateway/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Today, Envoy Gateway runs only on Kubernetes. This is an ideal solution
when the applications are running in Kubernetes.
However there might be cases when the applications are running on the host which would
require Envoy Gateway to run locally.&lt;/p&gt;



&lt;h2 id="goals"&gt;Goals&lt;a class="td-heading-self-link" href="#goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Define an API to allow Envoy Gateway to retrieve configuration while running locally.&lt;/li&gt;
&lt;li&gt;Define an API to allow Envoy Gateway to deploy the managed Envoy Proxy fleet on the host
machine.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="non-goals"&gt;Non Goals&lt;a class="td-heading-self-link" href="#non-goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Support multiple ways to retrieve configuration while running locally.&lt;/li&gt;
&lt;li&gt;Support multiple ways to deploy the Envoy Proxy fleet locally on the host.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="api"&gt;API&lt;a class="td-heading-self-link" href="#api" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;provider&lt;/code&gt; field within the &lt;code&gt;EnvoyGateway&lt;/code&gt; configuration only supports
&lt;code&gt;Kubernetes&lt;/code&gt; today which provides two features - the ability to retrieve
resources from the Kubernetes API Server as well as deploy the managed
Envoy Proxy fleet on Kubernetes.&lt;/li&gt;
&lt;li&gt;This document proposes adding a new top level &lt;code&gt;provider&lt;/code&gt; type called &lt;code&gt;Custom&lt;/code&gt;
with two fields called &lt;code&gt;resource&lt;/code&gt; and &lt;code&gt;infrastructure&lt;/code&gt; to allow the user to configure
the sub providers for providing resource configuration and an infrastructure to deploy
the Envoy Proxy data plane in.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;File&lt;/code&gt; resource provider will be introduced to enable retrieving configuration locally
by reading from the configuration from a file.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;Host&lt;/code&gt; infrastructure provider will be introduced to allow Envoy Gateway to spawn a
Envoy Proxy child process on the host.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is an example configuration&lt;/p&gt;</description></item><item><title>SecurityPolicy</title><link>/contributions/design/security-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/security-policy/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;a class="td-heading-self-link" href="#overview" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This design document introduces the &lt;code&gt;SecurityPolicy&lt;/code&gt; API allowing system administrators to configure
authentication and authorization policies to the traffic entering the gateway.&lt;/p&gt;



&lt;h2 id="goals"&gt;Goals&lt;a class="td-heading-self-link" href="#goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add an API definition to hold settings for configuring authentication and authorization rules
on the traffic entering the gateway.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="non-goals"&gt;Non Goals&lt;a class="td-heading-self-link" href="#non-goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Define the API configuration fields in this API.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="implementation"&gt;Implementation&lt;a class="td-heading-self-link" href="#implementation" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;SecurityPolicy&lt;/code&gt; is a &lt;a href="https://gateway-api.sigs.k8s.io/references/policy-attachment"&gt;Policy Attachment&lt;/a&gt; type API that can be used to extend &lt;a href="https://gateway-api.sigs.k8s.io/"&gt;Gateway API&lt;/a&gt;
to define authentication and authorization rules.&lt;/p&gt;</description></item><item><title>TCP and UDP Proxy Design</title><link>/contributions/design/tcp-udp-design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/tcp-udp-design/</guid><description>&lt;p&gt;Even though most of the use cases for Envoy Gateway are at Layer-7, Envoy Gateway can also work at Layer-4 to proxy TCP
and UDP traffic. This document will explore the options we have when operating Envoy Gateway at Layer-4 and explain the
design decision.&lt;/p&gt;
&lt;p&gt;Envoy can work as a non-transparent proxy or a transparent proxy for both &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/other_features/ip_transparency#arch-overview-ip-transparency-original-src-listener"&gt;TCP&lt;/a&gt;
and &lt;a href="https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/udp/udp_proxy/v3/udp_proxy.proto#envoy-v3-api-msg-extensions-filters-udp-udp-proxy-v3-udpproxyconfig"&gt;UDP&lt;/a&gt;
, so ideally, Envoy Gateway should also be able to work in these two modes:&lt;/p&gt;</description></item><item><title>Wasm OCI Image Support</title><link>/contributions/design/wasm-extension/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/contributions/design/wasm-extension/</guid><description>&lt;h2 id="motivation"&gt;Motivation&lt;a class="td-heading-self-link" href="#motivation" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Envoy Gateway (EG) should support Wasm OCI image as a remote wasm code source.
This feature will allow users to deploy Wasm modules from OCI registries, such as Docker Hub,
Google Container Registry, and Amazon Elastic Container Registry, to Envoy proxies managed by EG.
Deploying Wasm modules from OCI registries has several benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Versioning&lt;/strong&gt;: Users can use the tag feature of the OCI image to manage the version of the Wasm module.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Users can use private registries to store the Wasm module.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distribution&lt;/strong&gt;: Users can use the existing distribution mechanism of the OCI registry to distribute the Wasm module.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="goals"&gt;Goals&lt;a class="td-heading-self-link" href="#goals" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Define the system components needed to support Wasm OCI images as remote Wasm code sources.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="architecture"&gt;Architecture&lt;a class="td-heading-self-link" href="#architecture" aria-label="Heading self-link"&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;


&lt;img src="/img/wasm-extension.png"&gt;&lt;/p&gt;</description></item></channel></rss>