From e360a71f4288d43feef197d6756b9097a1b94262 Mon Sep 17 00:00:00 2001 From: Arko Dasgupta Date: Sat, 23 Apr 2022 08:40:54 -0700 Subject: [PATCH 01/10] EnvoyGateway System Design Signed-off-by: Arko Dasgupta --- design/SYSTEM_DESIGN.md | 81 +++++++++++++++++++++++++++++++++ design/images/architecture.png | Bin 0 -> 40224 bytes 2 files changed, 81 insertions(+) create mode 100644 design/SYSTEM_DESIGN.md create mode 100644 design/images/architecture.png diff --git a/design/SYSTEM_DESIGN.md b/design/SYSTEM_DESIGN.md new file mode 100644 index 00000000000..5f6804d919d --- /dev/null +++ b/design/SYSTEM_DESIGN.md @@ -0,0 +1,81 @@ +### Architecture +![Architecture](images/architecture.png) + +### Configuration + +#### User Config +This configuration is based on the [Gateway API](https://gateway-api.sigs.k8s.io) and will provide: +* Infrastructure Management capabilities for the Infrastructure Administrator to provision the infrastructure required to run EnvoyProxy. +This is expressed using the [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway). +* Ingress and API Gateway capabilities for the application developer to define networking and security intent for their incoming traffic. +This is expressed using [HTTPRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute), [TLSRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tlsroute), +[TCPRoute or UDPRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tcproute-and-udproute). + +#### Bootstrap Config +This is the configuration provided by the Infrastructure Administrator that allows them to bootsrap and configure various internal aspects of EnvoyGateway controller. +This can either be specified as a commandline argument or be expressed as part of the [GatewayClass resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) +that is consumed by a separate process, the EnvoyGateway Operator to create an instance of EnvoyGateway. + +### Components + +#### Config Sources +This component is responsible for consuming the user configuration from various platforms. Data persistence should be tied to the specific config source’s capabilities. For e.g. in Kubernetes, the resources will persist in etcd, if using the path watcher, the resources will persist in a file. + +##### Kubernetes +The Kubernetes controller watches the Kubernetes API Server for resources, fetches them, and publishes it to the translators for further processing. + +##### Path Watcher +It watches for file changes in a path, allowing the user to configure EnvoyGateway using resource configurations saved in a file or directory. + +#### Config Server +This is a HTTP/gRPC Server (TBD) allowing EnvoyGateway to be configured from a remote endpoint. + +#### Intermediate Representation (IR) +This is an internal data model that user facing APIs are translated into allowing for internal services & components to be decoupled. + +#### Config Manager +This component consumes the Bootstrap Config, and spawns the appropriate internal services in EnvoyGateway based on the config. + +#### Message Service +This component allows internal services to publish message / data types as well as subscribe to them. A message bus architecture allows components to be loosely coupled +, work in an asynchronous manner and also scale out into multiple processes if needed. It can also aggregate resources from multiple publishers allowing configuration from +individual config sources to be aggregated before being processed by the translation layers. + +#### Service Resolver +This optional component preprocesses the IR resources and resolves the services into endpoints enabling precise load balancing and resilience policies. +For e.g. in Kubernetes, a controller service could watch for EndpointSlice resources, converting Services to Endpoints, allowing for Envoyproxy to skip kube-proxy’s +load balancing layer. This component is tied to the platform where it is running. When disabled, the services will be resolved by the underlying DNS resolver or +by explicitly specifying IPs. + +#### Gateway API Translator +This is a platform agnostic translator that translates Gateway API resources to an Intermediate Representation. + +#### EnvoyProxy Translator +This component translates the IR into EnvoyProxy Resources. + +#### xDS Server +This component is a xDS gRPC Server based on the [Envoy Go Control Plane](https://github.com/envoyproxy/go-control-plane) project that implements the xDS Server Protocol +and is responsible for configuring EnvoyProxy resources in EnvoyProxy. + +#### Provisioner +The provisioner configures any infrastruture needed based on the IR. + +##### Envoy +Provisions a Envoy based Load balancer service. This is a platform specific component. +For example, a Terraform or Ansible provisioner could be added in the future to provision the Envoy infra in a non-k8s env. + +##### Auxiliary Control Planes +These components are responsible for handling out of band control plane traffic sent by EnvoyProxy. + +###### Rate Limit service +This is based on the [Envoy Rate Limit Service](https://github.com/envoyproxy/ratelimit) and will consume the IR and translate it into the server side rate limiting config. +A similar EnvoyProxy translator sub component would translate the IR into Envoy’s ratelimit filter. + +### Design Decisions +* A single EnvoyGateway instance will consume many [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) to manage a fleet of EnvoyProxies with different configurations. +* The goal is to make the Provisioner & Translator layers extensible, but for the near future, extensibility can be achieved using xDS support that EnvoyGateway will provide. + +### Open Questions +* Which APIGateway and Ingress features will EnvoyGateway introduce in the near future ? + +The draft for this document is [here](https://docs.google.com/document/d/1riyTPPYuvNzIhBdrAX8dpfxTmcobWZDSYTTB5NeybuY/edit) diff --git a/design/images/architecture.png b/design/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..a40be64a91766c00010d0d8167d80c9ede0dfa7e GIT binary patch literal 40224 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

Js7x)D3`nqOk~X5tHt~ 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 THIt+XCMLL&$zqf)TbJ|?tRj7& literal 0 HcmV?d00001 From 32443963451770e53c46afd29faca1b60af3c502 Mon Sep 17 00:00:00 2001 From: Arko Dasgupta Date: Sun, 24 Apr 2022 20:17:58 -0700 Subject: [PATCH 02/10] address PR comments Signed-off-by: Arko Dasgupta --- {design => docs/design}/SYSTEM_DESIGN.md | 46 ++++++++++++++--------- {design => docs}/images/architecture.png | Bin 2 files changed, 28 insertions(+), 18 deletions(-) rename {design => docs/design}/SYSTEM_DESIGN.md (59%) rename {design => docs}/images/architecture.png (100%) diff --git a/design/SYSTEM_DESIGN.md b/docs/design/SYSTEM_DESIGN.md similarity index 59% rename from design/SYSTEM_DESIGN.md rename to docs/design/SYSTEM_DESIGN.md index 5f6804d919d..edb84911c06 100644 --- a/design/SYSTEM_DESIGN.md +++ b/docs/design/SYSTEM_DESIGN.md @@ -1,20 +1,30 @@ ### Architecture -![Architecture](images/architecture.png) +![Architecture](../images/architecture.png) ### Configuration #### User Config This configuration is based on the [Gateway API](https://gateway-api.sigs.k8s.io) and will provide: -* Infrastructure Management capabilities for the Infrastructure Administrator to provision the infrastructure required to run EnvoyProxy. +* Infrastructure Management capabilities to provision the infrastructure required to run Envoy Proxy. This is expressed using the [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway). * Ingress and API Gateway capabilities for the application developer to define networking and security intent for their incoming traffic. This is expressed using [HTTPRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute), [TLSRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tlsroute), [TCPRoute or UDPRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tcproute-and-udproute). #### Bootstrap Config -This is the configuration provided by the Infrastructure Administrator that allows them to bootsrap and configure various internal aspects of EnvoyGateway controller. -This can either be specified as a commandline argument or be expressed as part of the [GatewayClass resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) -that is consumed by a separate process, the EnvoyGateway Operator to create an instance of EnvoyGateway. +This is the configuration provided by the Infrastructure Administrator that allows them to bootsrap and configure various internal aspects of Envoy Gateway controller. + +#### Workflow +1. The Infrastructure Administrator spawns an Envoy Gateway process and provides a Bootstrap Configuration as part of the commandline argument. +2. *Optional* They can also configure a [GatewayClass resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) to modify default values +defined in the Bootstrap Config amd further tweak aspects of the Envoy Proxy that will be provisioned by Envoy Gateway. +3. They will configure a [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) linking it to a specific Envoy Gateway +with information about traffic listener information such as hostnames, protocol and ports. +Envoy Gateway consumes this configuration and provisions a new instance of Envoy Proxy with the paramters defined in the config. +4. Application developers can now expose their APIs by configuring [HTTPRoute resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute). +These routes are attached to a specific [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) allowing application traffic to reach +the upstream application using the Envoy Proxy instance mapped to the specific [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway). + ### Components @@ -25,16 +35,16 @@ This component is responsible for consuming the user configuration from various The Kubernetes controller watches the Kubernetes API Server for resources, fetches them, and publishes it to the translators for further processing. ##### Path Watcher -It watches for file changes in a path, allowing the user to configure EnvoyGateway using resource configurations saved in a file or directory. +It watches for file changes in a path, allowing the user to configure Envoy Gateway using resource configurations saved in a file or directory. #### Config Server -This is a HTTP/gRPC Server (TBD) allowing EnvoyGateway to be configured from a remote endpoint. +This is a HTTP/gRPC Server (TBD) allowing Envoy Gateway to be configured from a remote endpoint. #### Intermediate Representation (IR) This is an internal data model that user facing APIs are translated into allowing for internal services & components to be decoupled. #### Config Manager -This component consumes the Bootstrap Config, and spawns the appropriate internal services in EnvoyGateway based on the config. +This component consumes the Bootstrap Config, and spawns the appropriate internal services in Envoy Gateway based on the config. #### Message Service This component allows internal services to publish message / data types as well as subscribe to them. A message bus architecture allows components to be loosely coupled @@ -50,32 +60,32 @@ by explicitly specifying IPs. #### Gateway API Translator This is a platform agnostic translator that translates Gateway API resources to an Intermediate Representation. -#### EnvoyProxy Translator -This component translates the IR into EnvoyProxy Resources. +#### Envoy Proxy Translator +This component translates the IR into Envoy Proxy xDS Resources. #### xDS Server This component is a xDS gRPC Server based on the [Envoy Go Control Plane](https://github.com/envoyproxy/go-control-plane) project that implements the xDS Server Protocol -and is responsible for configuring EnvoyProxy resources in EnvoyProxy. +and is responsible for configuring xDS resources in Envoy Proxy. #### Provisioner The provisioner configures any infrastruture needed based on the IR. ##### Envoy -Provisions a Envoy based Load balancer service. This is a platform specific component. -For example, a Terraform or Ansible provisioner could be added in the future to provision the Envoy infra in a non-k8s env. +Provisions an Envoy based Load balancer service. This is a platform specific component. +For example, a Terraform or Ansible provisioner could be added in the future to provision the Envoy infra in a non-Kubernetes environment. ##### Auxiliary Control Planes -These components are responsible for handling out of band control plane traffic sent by EnvoyProxy. +These components are responsible for handling out of band control plane traffic sent by Envoy Proxy. ###### Rate Limit service This is based on the [Envoy Rate Limit Service](https://github.com/envoyproxy/ratelimit) and will consume the IR and translate it into the server side rate limiting config. -A similar EnvoyProxy translator sub component would translate the IR into Envoy’s ratelimit filter. +A similar Envoy Proxy translator sub component would translate the IR into Envoy’s ratelimit filter. ### Design Decisions -* A single EnvoyGateway instance will consume many [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) to manage a fleet of EnvoyProxies with different configurations. -* The goal is to make the Provisioner & Translator layers extensible, but for the near future, extensibility can be achieved using xDS support that EnvoyGateway will provide. +* A single Envoy Gateway instance will consume many [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) to manage a fleet of Envoy Proxies with different configurations. +* The goal is to make the Provisioner & Translator layers extensible, but for the near future, extensibility can be achieved using xDS support that Envoy Gateway will provide. ### Open Questions -* Which APIGateway and Ingress features will EnvoyGateway introduce in the near future ? +* Which APIGateway and Ingress features will Envoy Gateway introduce in the near future ? The draft for this document is [here](https://docs.google.com/document/d/1riyTPPYuvNzIhBdrAX8dpfxTmcobWZDSYTTB5NeybuY/edit) diff --git a/design/images/architecture.png b/docs/images/architecture.png similarity index 100% rename from design/images/architecture.png rename to docs/images/architecture.png From 2fc64ede3d60c4b3b6ca968b46a6cece0dff8d83 Mon Sep 17 00:00:00 2001 From: Arko Dasgupta Date: Wed, 27 Apr 2022 13:24:06 -0700 Subject: [PATCH 03/10] comments round 2 Signed-off-by: Arko Dasgupta --- docs/design/SYSTEM_DESIGN.md | 21 +++++++++++++-------- docs/images/architecture.png | Bin 40224 -> 49922 bytes 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/docs/design/SYSTEM_DESIGN.md b/docs/design/SYSTEM_DESIGN.md index edb84911c06..7e570b4fe99 100644 --- a/docs/design/SYSTEM_DESIGN.md +++ b/docs/design/SYSTEM_DESIGN.md @@ -1,3 +1,6 @@ +### Introduction +This document highlights the system components that Envoy Gateway comprises of. + ### Architecture ![Architecture](../images/architecture.png) @@ -16,23 +19,22 @@ This is the configuration provided by the Infrastructure Administrator that allo #### Workflow 1. The Infrastructure Administrator spawns an Envoy Gateway process and provides a Bootstrap Configuration as part of the commandline argument. -2. *Optional* They can also configure a [GatewayClass resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) to modify default values -defined in the Bootstrap Config amd further tweak aspects of the Envoy Proxy that will be provisioned by Envoy Gateway. -3. They will configure a [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) linking it to a specific Envoy Gateway -with information about traffic listener information such as hostnames, protocol and ports. +2. They will configure a [GatewayClass resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass), and optionally modify default values +defined in the Bootstrap Config to further tweak aspects of the Envoy Proxy Loadbalancer service that will be provisioned by Envoy Gateway. +3. They will configure a [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) linking it to a specific GatewayClass +with information about which traffic to intercept such as hostnames, protocol and ports. Envoy Gateway consumes this configuration and provisions a new instance of Envoy Proxy with the paramters defined in the config. 4. Application developers can now expose their APIs by configuring [HTTPRoute resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute). These routes are attached to a specific [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) allowing application traffic to reach the upstream application using the Envoy Proxy instance mapped to the specific [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway). - ### Components #### Config Sources This component is responsible for consuming the user configuration from various platforms. Data persistence should be tied to the specific config source’s capabilities. For e.g. in Kubernetes, the resources will persist in etcd, if using the path watcher, the resources will persist in a file. ##### Kubernetes -The Kubernetes controller watches the Kubernetes API Server for resources, fetches them, and publishes it to the translators for further processing. +The Kubernetes controller watches the Kubernetes API Server for resources, fetches them, and publishes it to the translators for further processing. ##### Path Watcher It watches for file changes in a path, allowing the user to configure Envoy Gateway using resource configurations saved in a file or directory. @@ -82,8 +84,11 @@ This is based on the [Envoy Rate Limit Service](https://github.com/envoyproxy/ra A similar Envoy Proxy translator sub component would translate the IR into Envoy’s ratelimit filter. ### Design Decisions -* A single Envoy Gateway instance will consume many [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) to manage a fleet of Envoy Proxies with different configurations. -* The goal is to make the Provisioner & Translator layers extensible, but for the near future, extensibility can be achieved using xDS support that Envoy Gateway will provide. +* A single Envoy Gateway controller will consume many [GatewayClass resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass). +* A single Envoy Gateway instance will consume many [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) to manage a fleet of Envoy Proxies with different configurations i.e. each [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) will map to a unique instance of Envoy Proxy created +by the Provisioner. +* The goal is to make the Provisioner & Translator layers extensible, but for the near future, extensibility can be achieved using xDS supportthat Envoy Gateway +will provide. ### Open Questions * Which APIGateway and Ingress features will Envoy Gateway introduce in the near future ? diff --git a/docs/images/architecture.png b/docs/images/architecture.png index a40be64a91766c00010d0d8167d80c9ede0dfa7e..b26fd54820fd8e670d451a9949e58bfe54622918 100644 GIT binary patch literal 49922 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 literal 40224 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

Js7x)D3`nqOk~X5tHt~ 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 THIt+XCMLL&$zqf)TbJ|?tRj7& From 5f571d68ca391dace6952a6cd5d481658bf63f13 Mon Sep 17 00:00:00 2001 From: Arko Dasgupta Date: Wed, 27 Apr 2022 17:49:27 -0700 Subject: [PATCH 04/10] added goals, rewrote aux cp, edited xDS translator Signed-off-by: Arko Dasgupta --- docs/design/SYSTEM_DESIGN.md | 61 ++++++++++++++++++----------------- docs/images/architecture.png | Bin 49922 -> 39799 bytes 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/docs/design/SYSTEM_DESIGN.md b/docs/design/SYSTEM_DESIGN.md index 7e570b4fe99..d52b79a1708 100644 --- a/docs/design/SYSTEM_DESIGN.md +++ b/docs/design/SYSTEM_DESIGN.md @@ -1,37 +1,41 @@ -### Introduction -This document highlights the system components that Envoy Gateway comprises of. +## System Design + +### Goals +* Define the system components needed to satisfy the requirements of Envoy Gateway. + +### Non-Goals +* Create a detailed design and interface specification for each system component. ### Architecture ![Architecture](../images/architecture.png) ### Configuration +#### Bootstrap Config +This is the configuration provided by the Infrastructure Administrator that allows them to bootstrap and configure various internal aspects of Envoy Gateway. + #### User Config This configuration is based on the [Gateway API](https://gateway-api.sigs.k8s.io) and will provide: * Infrastructure Management capabilities to provision the infrastructure required to run Envoy Proxy. -This is expressed using the [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway). +This is expressed using the [GatewayClass resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) and [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway). * Ingress and API Gateway capabilities for the application developer to define networking and security intent for their incoming traffic. This is expressed using [HTTPRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute), [TLSRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tlsroute), [TCPRoute or UDPRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tcproute-and-udproute). -#### Bootstrap Config -This is the configuration provided by the Infrastructure Administrator that allows them to bootsrap and configure various internal aspects of Envoy Gateway controller. - #### Workflow -1. The Infrastructure Administrator spawns an Envoy Gateway process and provides a Bootstrap Configuration as part of the commandline argument. -2. They will configure a [GatewayClass resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass), and optionally modify default values -defined in the Bootstrap Config to further tweak aspects of the Envoy Proxy Loadbalancer service that will be provisioned by Envoy Gateway. +1. The Infrastructure Administrator spawns an Envoy Gateway process using a Bootstrap Configuration to manage a fleet of Envoy Proxies. +2. They will configure a [GatewayClass resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass), that represents a class of Envoy Proxies. 3. They will configure a [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) linking it to a specific GatewayClass -with information about which traffic to intercept such as hostnames, protocol and ports. +with information such as hostnames, protocol and ports stating which traffic flows are of interest. Envoy Gateway consumes this configuration and provisions a new instance of Envoy Proxy with the paramters defined in the config. 4. Application developers can now expose their APIs by configuring [HTTPRoute resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute). These routes are attached to a specific [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) allowing application traffic to reach -the upstream application using the Envoy Proxy instance mapped to the specific [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway). +the upstream application. ### Components #### Config Sources -This component is responsible for consuming the user configuration from various platforms. Data persistence should be tied to the specific config source’s capabilities. For e.g. in Kubernetes, the resources will persist in etcd, if using the path watcher, the resources will persist in a file. +This component is responsible for consuming the user configuration from various platforms. Data persistence should be tied to the specific config source’s capabilities. For e.g. in Kubernetes, the resources will persist in `etcd`, if using the `path-watcher`, the resources will persist in a file. ##### Kubernetes The Kubernetes controller watches the Kubernetes API Server for resources, fetches them, and publishes it to the translators for further processing. @@ -40,18 +44,19 @@ The Kubernetes controller watches the Kubernetes API Server for resources, fetch It watches for file changes in a path, allowing the user to configure Envoy Gateway using resource configurations saved in a file or directory. #### Config Server -This is a HTTP/gRPC Server (TBD) allowing Envoy Gateway to be configured from a remote endpoint. +This is a HTTP/gRPC Server allowing Envoy Gateway to be configured from a remote endpoint. #### Intermediate Representation (IR) This is an internal data model that user facing APIs are translated into allowing for internal services & components to be decoupled. #### Config Manager -This component consumes the Bootstrap Config, and spawns the appropriate internal services in Envoy Gateway based on the config. +This component consumes the Bootstrap Config, and spawns the appropriate internal services in Envoy Gateway based on the config spec. For e.g. if the platform field +in the Bootsrap Config is set to `kubernetes`, the config manager will instantiate kubernetes controller services that implement the Config Source, Service Resolver +and the Envoy Provisioner interfaces. #### Message Service This component allows internal services to publish message / data types as well as subscribe to them. A message bus architecture allows components to be loosely coupled -, work in an asynchronous manner and also scale out into multiple processes if needed. It can also aggregate resources from multiple publishers allowing configuration from -individual config sources to be aggregated before being processed by the translation layers. +, work in an asynchronous manner and also scale out into multiple processes if needed. #### Service Resolver This optional component preprocesses the IR resources and resolves the services into endpoints enabling precise load balancing and resilience policies. @@ -62,7 +67,7 @@ by explicitly specifying IPs. #### Gateway API Translator This is a platform agnostic translator that translates Gateway API resources to an Intermediate Representation. -#### Envoy Proxy Translator +#### xDS Translator This component translates the IR into Envoy Proxy xDS Resources. #### xDS Server @@ -72,25 +77,21 @@ and is responsible for configuring xDS resources in Envoy Proxy. #### Provisioner The provisioner configures any infrastruture needed based on the IR. -##### Envoy -Provisions an Envoy based Load balancer service. This is a platform specific component. -For example, a Terraform or Ansible provisioner could be added in the future to provision the Envoy infra in a non-Kubernetes environment. - -##### Auxiliary Control Planes -These components are responsible for handling out of band control plane traffic sent by Envoy Proxy. +* Envoy - Provisions an Envoy based Load balancer service. This is a platform specific component. +For example, a Terraform or Ansible provisioner could be added in the future to provision the Envoy infrastructure in a non-Kubernetes environment. -###### Rate Limit service -This is based on the [Envoy Rate Limit Service](https://github.com/envoyproxy/ratelimit) and will consume the IR and translate it into the server side rate limiting config. -A similar Envoy Proxy translator sub component would translate the IR into Envoy’s ratelimit filter. +* Auxiliary Control Planes - These optional components are services needed to implement API Gateway features that require external integrations with Envoy Proxy. A good example is [Global Ratelimiting](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/other_features/global_rate_limiting) which would require instatiating and +configuring the [Envoy Rate Limit Service](https://github.com/envoyproxy/ratelimit) as well the [Rate Limit filter](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/http/ratelimit/v3/rate_limit.proto#envoy-v3-api-msg-extensions-filters-http-ratelimit-v3-ratelimit) using the IR passed to this component. Such features would +be exposed to the user using [Custom Route Filters](https://gateway-api.sigs.k8s.io/v1alpha2/api-types/httproute/#filters-optional) defined in the Gateway API. ### Design Decisions -* A single Envoy Gateway controller will consume many [GatewayClass resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass). -* A single Envoy Gateway instance will consume many [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) to manage a fleet of Envoy Proxies with different configurations i.e. each [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) will map to a unique instance of Envoy Proxy created +* A single Envoy Gateway will consume many [GatewayClass resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass). +* A single Envoy Gateway will consume many [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) to manage a fleet of Envoy Proxies with different configurations i.e. each [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) will map to a unique instance of Envoy Proxy created by the Provisioner. -* The goal is to make the Provisioner & Translator layers extensible, but for the near future, extensibility can be achieved using xDS supportthat Envoy Gateway +* The goal is to make the Provisioner & Translator layers extensible, but for the near future, extensibility can be achieved using xDS support that Envoy Gateway will provide. ### Open Questions -* Which APIGateway and Ingress features will Envoy Gateway introduce in the near future ? +* Which API Gateway and Ingress features will Envoy Gateway introduce in the near future? The draft for this document is [here](https://docs.google.com/document/d/1riyTPPYuvNzIhBdrAX8dpfxTmcobWZDSYTTB5NeybuY/edit) diff --git a/docs/images/architecture.png b/docs/images/architecture.png index b26fd54820fd8e670d451a9949e58bfe54622918..8b765c32fcc503373364f6ef4a2726db04df07e0 100644 GIT binary patch literal 39799 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

X*X9$B0xDqC2}l*9(7lUxm-bJ??jD;w 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 From 51cdf9b38c9ba9bb2bf1befe45150bc488aebfe5 Mon Sep 17 00:00:00 2001 From: Arko Dasgupta Date: Wed, 27 Apr 2022 17:54:58 -0700 Subject: [PATCH 05/10] fix image Signed-off-by: Arko Dasgupta --- docs/images/architecture.png | Bin 39799 -> 40021 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/architecture.png b/docs/images/architecture.png index 8b765c32fcc503373364f6ef4a2726db04df07e0..ec26d907b3d45d9800e27ea2e082ffd49479ff93 100644 GIT binary patch literal 40021 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ⅆ{UleetW)*um0mzoX`7z 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

X*X9$B0xDqC2}l*9(7lUxm-bJ??jD;w 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 Date: Thu, 28 Apr 2022 11:35:45 -0700 Subject: [PATCH 06/10] title typo & grammar fix Signed-off-by: Arko Dasgupta --- docs/design/SYSTEM_DESIGN.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/design/SYSTEM_DESIGN.md b/docs/design/SYSTEM_DESIGN.md index d52b79a1708..021a218de7e 100644 --- a/docs/design/SYSTEM_DESIGN.md +++ b/docs/design/SYSTEM_DESIGN.md @@ -43,7 +43,7 @@ The Kubernetes controller watches the Kubernetes API Server for resources, fetch ##### Path Watcher It watches for file changes in a path, allowing the user to configure Envoy Gateway using resource configurations saved in a file or directory. -#### Config Server +##### Config Server This is a HTTP/gRPC Server allowing Envoy Gateway to be configured from a remote endpoint. #### Intermediate Representation (IR) @@ -85,8 +85,8 @@ configuring the [Envoy Rate Limit Service](https://github.com/envoyproxy/ratelim be exposed to the user using [Custom Route Filters](https://gateway-api.sigs.k8s.io/v1alpha2/api-types/httproute/#filters-optional) defined in the Gateway API. ### Design Decisions -* A single Envoy Gateway will consume many [GatewayClass resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass). -* A single Envoy Gateway will consume many [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) to manage a fleet of Envoy Proxies with different configurations i.e. each [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) will map to a unique instance of Envoy Proxy created +* Each Envoy Gateway will consume many [GatewayClass resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass). +* Each Envoy Gateway will consume many [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) to manage a fleet of Envoy Proxies with different configurations i.e. each [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) will map to a unique instance of Envoy Proxy created by the Provisioner. * The goal is to make the Provisioner & Translator layers extensible, but for the near future, extensibility can be achieved using xDS support that Envoy Gateway will provide. From d41a60e0a937c34ebae4dc2663409aec21a80d67 Mon Sep 17 00:00:00 2001 From: Arko Dasgupta Date: Thu, 28 Apr 2022 15:05:05 -0700 Subject: [PATCH 07/10] address daneyon's comments Signed-off-by: Arko Dasgupta --- docs/design/SYSTEM_DESIGN.md | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/docs/design/SYSTEM_DESIGN.md b/docs/design/SYSTEM_DESIGN.md index 021a218de7e..2760f4f3457 100644 --- a/docs/design/SYSTEM_DESIGN.md +++ b/docs/design/SYSTEM_DESIGN.md @@ -17,7 +17,7 @@ This is the configuration provided by the Infrastructure Administrator that allo #### User Config This configuration is based on the [Gateway API](https://gateway-api.sigs.k8s.io) and will provide: * Infrastructure Management capabilities to provision the infrastructure required to run Envoy Proxy. -This is expressed using the [GatewayClass resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) and [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway). +This is expressed using [GatewayClass](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) and [Gateway](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway)resources. * Ingress and API Gateway capabilities for the application developer to define networking and security intent for their incoming traffic. This is expressed using [HTTPRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute), [TLSRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tlsroute), [TCPRoute or UDPRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tcproute-and-udproute). @@ -27,7 +27,7 @@ This is expressed using [HTTPRoute](https://gateway-api.sigs.k8s.io/concepts/api 2. They will configure a [GatewayClass resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass), that represents a class of Envoy Proxies. 3. They will configure a [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) linking it to a specific GatewayClass with information such as hostnames, protocol and ports stating which traffic flows are of interest. -Envoy Gateway consumes this configuration and provisions a new instance of Envoy Proxy with the paramters defined in the config. +Envoy Gateway consumes this configuration and provisions an instance of Envoy Proxy with the paramters defined in the config. 4. Application developers can now expose their APIs by configuring [HTTPRoute resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute). These routes are attached to a specific [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) allowing application traffic to reach the upstream application. @@ -38,7 +38,7 @@ the upstream application. This component is responsible for consuming the user configuration from various platforms. Data persistence should be tied to the specific config source’s capabilities. For e.g. in Kubernetes, the resources will persist in `etcd`, if using the `path-watcher`, the resources will persist in a file. ##### Kubernetes -The Kubernetes controller watches the Kubernetes API Server for resources, fetches them, and publishes it to the translators for further processing. +It watches the Kubernetes API Server for resources, fetches them, and publishes it to the translators for further processing. ##### Path Watcher It watches for file changes in a path, allowing the user to configure Envoy Gateway using resource configurations saved in a file or directory. @@ -51,7 +51,7 @@ This is an internal data model that user facing APIs are translated into allowin #### Config Manager This component consumes the Bootstrap Config, and spawns the appropriate internal services in Envoy Gateway based on the config spec. For e.g. if the platform field -in the Bootsrap Config is set to `kubernetes`, the config manager will instantiate kubernetes controller services that implement the Config Source, Service Resolver +in the Bootsrap Config is set to `kubernetes`, the Config Manager will instantiate kubernetes controller services that implement the Config Source, Service Resolver and the Envoy Provisioner interfaces. #### Message Service @@ -77,7 +77,7 @@ and is responsible for configuring xDS resources in Envoy Proxy. #### Provisioner The provisioner configures any infrastruture needed based on the IR. -* Envoy - Provisions an Envoy based Load balancer service. This is a platform specific component. +* Envoy - This is a platform specific component that provisions all the infrastructure required to run the managed Envoy Proxy fleet. For example, a Terraform or Ansible provisioner could be added in the future to provision the Envoy infrastructure in a non-Kubernetes environment. * Auxiliary Control Planes - These optional components are services needed to implement API Gateway features that require external integrations with Envoy Proxy. A good example is [Global Ratelimiting](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/other_features/global_rate_limiting) which would require instatiating and @@ -85,13 +85,10 @@ configuring the [Envoy Rate Limit Service](https://github.com/envoyproxy/ratelim be exposed to the user using [Custom Route Filters](https://gateway-api.sigs.k8s.io/v1alpha2/api-types/httproute/#filters-optional) defined in the Gateway API. ### Design Decisions -* Each Envoy Gateway will consume many [GatewayClass resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass). -* Each Envoy Gateway will consume many [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) to manage a fleet of Envoy Proxies with different configurations i.e. each [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) will map to a unique instance of Envoy Proxy created +* Each Envoy Gateway will consume one or more [GatewayClass resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass). +* Each Envoy Gateway will consume one or more [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) to manage a fleet of Envoy Proxies with different configurations i.e. each [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) will map to a unique instance of Envoy Proxy created by the Provisioner. * The goal is to make the Provisioner & Translator layers extensible, but for the near future, extensibility can be achieved using xDS support that Envoy Gateway will provide. -### Open Questions -* Which API Gateway and Ingress features will Envoy Gateway introduce in the near future? - The draft for this document is [here](https://docs.google.com/document/d/1riyTPPYuvNzIhBdrAX8dpfxTmcobWZDSYTTB5NeybuY/edit) From e12226c33526067d8ad009faa21abaa4f275609c Mon Sep 17 00:00:00 2001 From: Arko Dasgupta Date: Thu, 28 Apr 2022 16:19:39 -0700 Subject: [PATCH 08/10] 1:1 b/w GatewayClass:EnvoyProxy Signed-off-by: Arko Dasgupta --- docs/design/SYSTEM_DESIGN.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/design/SYSTEM_DESIGN.md b/docs/design/SYSTEM_DESIGN.md index 2760f4f3457..d46c44e00ed 100644 --- a/docs/design/SYSTEM_DESIGN.md +++ b/docs/design/SYSTEM_DESIGN.md @@ -25,9 +25,9 @@ This is expressed using [HTTPRoute](https://gateway-api.sigs.k8s.io/concepts/api #### Workflow 1. The Infrastructure Administrator spawns an Envoy Gateway process using a Bootstrap Configuration to manage a fleet of Envoy Proxies. 2. They will configure a [GatewayClass resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass), that represents a class of Envoy Proxies. +Envoy Gateway consumes this configuration and provisions a unique fleet of Envoy Proxies. 3. They will configure a [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) linking it to a specific GatewayClass with information such as hostnames, protocol and ports stating which traffic flows are of interest. -Envoy Gateway consumes this configuration and provisions an instance of Envoy Proxy with the paramters defined in the config. 4. Application developers can now expose their APIs by configuring [HTTPRoute resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute). These routes are attached to a specific [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) allowing application traffic to reach the upstream application. @@ -85,9 +85,9 @@ configuring the [Envoy Rate Limit Service](https://github.com/envoyproxy/ratelim be exposed to the user using [Custom Route Filters](https://gateway-api.sigs.k8s.io/v1alpha2/api-types/httproute/#filters-optional) defined in the Gateway API. ### Design Decisions -* Each Envoy Gateway will consume one or more [GatewayClass resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass). -* Each Envoy Gateway will consume one or more [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) to manage a fleet of Envoy Proxies with different configurations i.e. each [Gateway resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) will map to a unique instance of Envoy Proxy created -by the Provisioner. +* Each Envoy Gateway will consume one or more [GatewayClass resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) to manage a fleet of Envoy Proxies +with different configurations i.e. each [GatewayClass resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) will map to a unique set of Envoy Proxies +created by the Provisioner. * The goal is to make the Provisioner & Translator layers extensible, but for the near future, extensibility can be achieved using xDS support that Envoy Gateway will provide. From 7b0c7bcbc5fc513e33612c37ef4201e97c0c052d Mon Sep 17 00:00:00 2001 From: Arko Dasgupta Date: Thu, 28 Apr 2022 20:46:08 -0700 Subject: [PATCH 09/10] rm TCPRoutes & UDPRoutes Signed-off-by: Arko Dasgupta --- docs/design/SYSTEM_DESIGN.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/design/SYSTEM_DESIGN.md b/docs/design/SYSTEM_DESIGN.md index d46c44e00ed..06c747836bd 100644 --- a/docs/design/SYSTEM_DESIGN.md +++ b/docs/design/SYSTEM_DESIGN.md @@ -19,8 +19,7 @@ This configuration is based on the [Gateway API](https://gateway-api.sigs.k8s.io * Infrastructure Management capabilities to provision the infrastructure required to run Envoy Proxy. This is expressed using [GatewayClass](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) and [Gateway](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway)resources. * Ingress and API Gateway capabilities for the application developer to define networking and security intent for their incoming traffic. -This is expressed using [HTTPRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute), [TLSRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tlsroute), -[TCPRoute or UDPRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tcproute-and-udproute). +This is expressed using [HTTPRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute) and [TLSRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tlsroute). #### Workflow 1. The Infrastructure Administrator spawns an Envoy Gateway process using a Bootstrap Configuration to manage a fleet of Envoy Proxies. From 5b5e564c41a3e6c62deb117e79f9553d99b318bd Mon Sep 17 00:00:00 2001 From: Arko Dasgupta Date: Fri, 29 Apr 2022 17:00:16 -0700 Subject: [PATCH 10/10] mo examples + md links Signed-off-by: Arko Dasgupta --- docs/design/SYSTEM_DESIGN.md | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/docs/design/SYSTEM_DESIGN.md b/docs/design/SYSTEM_DESIGN.md index 06c747836bd..4eb7d0fa2e6 100644 --- a/docs/design/SYSTEM_DESIGN.md +++ b/docs/design/SYSTEM_DESIGN.md @@ -12,19 +12,27 @@ ### Configuration #### Bootstrap Config -This is the configuration provided by the Infrastructure Administrator that allows them to bootstrap and configure various internal aspects of Envoy Gateway. +This is the configuration provided by the Infrastructure Administrator that allows them to bootstrap and configure various internal aspects of Envoy Gateway. +It can be defined using a CLI argument similar to what [Envoy Proxy has](https://www.envoyproxy.io/docs/envoy/latest/operations/cli#cmdoption-c). +For e.g. users wanting to run Envoy Gateway in Kubernetes and use a custom [Envoy Proxy bootstrap config](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/bootstrap/v3/bootstrap.proto#envoy-v3-api-msg-config-bootstrap-v3-bootstrap) could define their Boostrap Config as - +``` +platform: kubernetes +envoyProxy: + bootstrap: + ...... +``` #### User Config This configuration is based on the [Gateway API](https://gateway-api.sigs.k8s.io) and will provide: -* Infrastructure Management capabilities to provision the infrastructure required to run Envoy Proxy. -This is expressed using [GatewayClass](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) and [Gateway](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway)resources. +* Infrastructure Management capabilities to provision the infrastructure required to run the data plane, Envoy Proxy. +This is expressed using [GatewayClass](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) and [Gateway](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) resources. * Ingress and API Gateway capabilities for the application developer to define networking and security intent for their incoming traffic. This is expressed using [HTTPRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute) and [TLSRoute](https://gateway-api.sigs.k8s.io/concepts/api-overview/#tlsroute). #### Workflow -1. The Infrastructure Administrator spawns an Envoy Gateway process using a Bootstrap Configuration to manage a fleet of Envoy Proxies. +1. The Infrastructure Administrator spawns an Envoy Gateway process using a [Bootstrap Config](#bootstrap-config) to manage a fleet of Envoy Proxies. 2. They will configure a [GatewayClass resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass), that represents a class of Envoy Proxies. -Envoy Gateway consumes this configuration and provisions a unique fleet of Envoy Proxies. +Envoy Gateway consumes this configuration and provisions a unique fleet of Envoy Proxies. the [GatawayClass parameters](https://gateway-api.sigs.k8s.io/v1alpha2/api-types/gatewayclass/#gatewayclass-parameters) section allows the infrastructure administrator to further modify attributes of the data plane. 3. They will configure a [Gateway resource](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gateway) linking it to a specific GatewayClass with information such as hostnames, protocol and ports stating which traffic flows are of interest. 4. Application developers can now expose their APIs by configuring [HTTPRoute resources](https://gateway-api.sigs.k8s.io/concepts/api-overview/#httproute). @@ -49,13 +57,16 @@ This is a HTTP/gRPC Server allowing Envoy Gateway to be configured from a remote This is an internal data model that user facing APIs are translated into allowing for internal services & components to be decoupled. #### Config Manager -This component consumes the Bootstrap Config, and spawns the appropriate internal services in Envoy Gateway based on the config spec. For e.g. if the platform field -in the Bootsrap Config is set to `kubernetes`, the Config Manager will instantiate kubernetes controller services that implement the Config Source, Service Resolver -and the Envoy Provisioner interfaces. +This component consumes the [Bootstrap Config](#bootstrap-config), and spawns the appropriate internal services in Envoy Gateway based on the config specification. +For e.g. if the platform field in the Bootstrap Config is set to `kubernetes`, the Config Manager will instantiate kubernetes controller services that implement the +[Config Source](#config-source), [Service Resolver](#service-resolver) and the [Envoy Provisioner](#provisioner) interfaces. #### Message Service -This component allows internal services to publish message / data types as well as subscribe to them. A message bus architecture allows components to be loosely coupled -, work in an asynchronous manner and also scale out into multiple processes if needed. +This component allows internal services to publish messages as well as subscribe to them. The message service's interface is used by the [Config Manager](#config-manager) to +allow communication between the services instantiated by it. +A message bus architecture allows components to be loosely coupled, work in an asynchronous manner and also scale out into multiple processes if needed. +For e.g. the [Config Source](#config-source) and the [Provisioner](#provisoner) could run as separate processes in different environments decoupling user configuration consumption +from the environment where the Envoy Proxy infrastructure is being provisioned. #### Service Resolver This optional component preprocesses the IR resources and resolves the services into endpoints enabling precise load balancing and resilience policies.