Can I run both Ingress and Gateway API (HTTPRoute) simultaneously during migration on Self-Hosted LangSmith?

Last updated: May 13, 2026

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.

  1. In your values.yaml, enable both Ingress and Gateway and skip validation:

    ingress.enabled: true
    gateway.enabled: true
    config.skipValidation: true
  2. Deploy and verify that the Gateway path is healthy.

  3. Once the Gateway path is confirmed working, disable Ingress and re-enable validation:

    ingress.enabled: false
    gateway.enabled: true
    config.skipValidation: false
  4. Run helm upgrade to 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.httpPort

Once the Gateway path is verified healthy:

  1. Update your values.yaml:

    ingress.enabled: false
    gateway.enabled: true
  2. Run helm upgrade to 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.