envoyproxy / envoy

Cloud-native high-performance edge/middle/service proxy
https://www.envoyproxy.io
Apache License 2.0
25.1k stars 4.82k forks source link

What is the recommended way to make Envoy configs configurable via values.yaml in Helm? #37178

Open kondratyevd opened 1 week ago

kondratyevd commented 1 week ago

Hello Envoy team,

I am deploying Envoy proxy in Kubernetes as part of a Helm chart.

What I have currently: A single static Envoy configuration in envoy.yaml, which is mounted to Envoy Deployment pods via a ConfigMap.

What I would like to be able to do: My setup has multiple use cases that would require small modifications to Envoy configuration (for example, to deploy it at different Kubernetes clusters). I would like to make Envoy configurable from the main Helm configuration file (values.yaml) without duplicating envoy.yaml for every use case. This would include things like:

The main motivation is to:

What is the recommended / best way to achieve this?

Thank you!

soulxu commented 1 week ago

I'm not familiar with Helm, if you put the envoy.yaml in the ConfigMap, the values.yaml can't be used to change the envoy.yaml's content in the ConfigMap?

soulxu commented 1 week ago

cc @phlax if he familiar with helm

phlax commented 1 week ago

im assuming you are asking about deploying envoy with https://github.com/envoyproxy/gateway/ (i dont think there are any other published helm charts)

if that is the case their documentation is here https://gateway.envoyproxy.io/latest/install/install-helm/#helm-chart-customizations

if the question is about how to use helm more generally (eg you are creating your own helm charts) then i think you would need to ask for support from the helm community

kondratyevd commented 1 week ago

Hi @soulxu, @phlax,

Thank you for quick reply!

Indeed, I am deploying Envoy in my own Helm chart, which I now realize is not as common than I thought. I was not aware of Envoy Gateway, but at the moment it seems like an overkill for this purpose.

Anyway, after browsing a few other implementations, I came across a solution that seems to implement what I want: https://github.com/bitnami/charts/blob/8a54fb8b17818a6237d3cadbe55fe956a0bc8c6c/bitnami/cilium/templates/envoy/configmap.yaml Here the Envoy config is first built in a way that allows injecting parameters from values.yaml, and then inserted into a static ConfigMap.

I guess it was a Helm question indeed, but I wanted to check if there is already an established way to do this in Envoy community.

Thanks for the tips!