Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve Handling of GatewayParameters Upgrades #10088

Open
danehans opened this issue Sep 23, 2024 · 1 comment
Open

Improve Handling of GatewayParameters Upgrades #10088

danehans opened this issue Sep 23, 2024 · 1 comment
Labels
Area: Helm Area: K8S Gateway API Issues related to the Kubernetes Gateway API Type: Enhancement New feature or request

Comments

@danehans
Copy link

danehans commented Sep 23, 2024

Gloo Edge Product

Open Source

Gloo Edge Version

1.17.7

Is your feature request related to a problem? Please describe.

While reading through the setup docs the following paragraph stood out to me:

You can change the default configuration of your gateway proxy by changing the GatewayParameters and Settings values. In most cases, you add the values via the Gloo Gateway Helm chart. Gloo Gateway automatically updates the GatewayParameters and Settings resources for you. But you can also update the values in these two resources directly. Keep in mind that values that you manually add to the GatewayParameters and Settings resources do not persist between upgrades. To persist these values, you must add the values to the Gloo Gateway Helm chart.

I can see a user creating a serious problem by changing the default GatewayParameters resource and later upgrading.

Describe the solution you'd like

Here are few ideas for resolving this issue:

  1. Update the documentation by stating "directly changing GatewayParameters is unsupported". This is the easiest solution to implement but one that users may find undesirable: https://github.com/solo-io/docs/issues/572
  2. A Helm pre-upgrade hook that validates the state of the existing GatewayParameters resource before the upgrade proceeds. This is fairly simple to implement but more difficult to maintain.
  3. Customize Helm to only create the resource if it doesn’t already exist and implement/update an active controller that is responsible for managing the GatewayParameters lifecycle. More difficult to implement but it should be easier to maintain and provide the best UX.

Describe alternatives you've considered

An alternative solution is for GG to support the default GatewayClass without a GatewayParamtersRef. According to the Gateway API docs:

ParametersRef is a reference to a resource that contains the configuration parameters corresponding to the GatewayClass. This is optional if the controller does not require any additional configuration.

With this solution GG would be deployed only with a GatewayClass when default settings are desired. When a user creates a Gateway that references the GG GatewayClass, managed Envoy deployments are deployed with default configuration settings. The Settings resource captures the install-state settings, including any GatewayParameters settings. The GWP controller merges defaults with any user-provided install settings from the Settings resource (settings.spec.gatewayParams) to manage the default GWP. We can document the default GWP settings and even surface a reference to these settings through a GatewayClass status condition message.

Additional Context

No response

┆Issue is synchronized with this Asana task by Unito

@danehans danehans added the Type: Enhancement New feature or request label Sep 23, 2024
@jenshu
Copy link
Contributor

jenshu commented Sep 23, 2024

link to internal discussion here

@DuncanDoyle DuncanDoyle added Area: K8S Gateway API Issues related to the Kubernetes Gateway API Area: Helm labels Sep 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: Helm Area: K8S Gateway API Issues related to the Kubernetes Gateway API Type: Enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants