Context
When migrating from ingress-nginx to Gateway API (e.g., Envoy Gateway), you may want to run both an Ingress and an HTTPRoute side by side to facilitate a smooth, zero-downtime cutover. By default, the LangSmith Helm chart enforces a mutual-exclusion validation that prevents both ingress.enabled: true and gateway.enabled: true from being set at the same time. This is a chart-level guard, not a real Kubernetes limitation — both objects can coexist on the cluster without conflict since they are handled by separate controllers and forward traffic to the same backend Service.
Answer
There are two options to run both Ingress and HTTPRoute simultaneously during your migration:
Option 1: Bypass the chart validation temporarily
The chart provides a config.skipValidation flag that disables the mutual-exclusion check, allowing both objects to be rendered by the chart at the same time.
Note: This flag disables all checks in validate.yaml, so it should be treated as a temporary measure only for the duration of your cutover. Ensure your values are clean before enabling it.
In your
values.yaml, enable both Ingress and Gateway and skip validation:ingress.enabled: true gateway.enabled: true config.skipValidation: trueDeploy and verify that the Gateway path is healthy.
Once the Gateway path is confirmed working, disable Ingress and re-enable validation:
ingress.enabled: false gateway.enabled: true config.skipValidation: falseRun
helm upgradeto apply the final configuration.
Option 2: Manage the HTTPRoute manually outside the chart
Keep the chart managing only the Ingress (ingress.enabled: true) and apply your own HTTPRoute manifest manually, pointing it at the chart's existing frontend Service. This avoids touching the chart validation entirely.
Example HTTPRoute manifest:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: langsmith-migration
namespace: <same-namespace-as-chart>
spec:
parentRefs:
- name: <your-envoy-gateway>
namespace: <gateway-namespace>
hostnames:
- langsmith.example.com
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: <release>-langsmith-frontend # same Service the chart created
port: 80 # frontend.service.httpPortOnce the Gateway path is verified healthy:
Update your
values.yaml:ingress.enabled: false gateway.enabled: trueRun
helm upgradeto complete the migration.
Regardless of which option you choose, it is strongly recommended to test the configuration in a non-production environment before applying it to production.