refactor(helm): unify ingress and envoy proxy as a single gateway#4191
Merged
aicam merged 35 commits intoapache:mainfrom Feb 10, 2026
Merged
refactor(helm): unify ingress and envoy proxy as a single gateway#4191aicam merged 35 commits intoapache:mainfrom
aicam merged 35 commits intoapache:mainfrom
Conversation
Ingress and CU Envoy with single Envoy GatewayEnvoy Gateway
Envoy Gateway
bobbai00
requested changes
Feb 5, 2026
Contributor
bobbai00
left a comment
There was a problem hiding this comment.
Left some comments.
One general comment: for all the gateway related files, the filename should start with gateway-
...ontrol-service/src/main/scala/org/apache/texera/service/resource/AccessControlResource.scala
Outdated
Show resolved
Hide resolved
bobbai00
reviewed
Feb 5, 2026
Contributor
bobbai00
left a comment
There was a problem hiding this comment.
Left some minor comments
…ateway-sec-ext-policies
madisonmlin
pushed a commit
to madisonmlin/texera
that referenced
this pull request
Mar 10, 2026
…ache#4191) <!-- Thanks for sending a pull request (PR)! Here are some tips for you: 1. If this is your first time, please read our contributor guidelines: [Contributing to Texera](https://github.com/apache/texera/blob/main/CONTRIBUTING.md) 2. Ensure you have added or run the appropriate tests for your PR 3. If the PR is work in progress, mark it a draft on GitHub. 4. Please write your PR title to summarize what this PR proposes, we are following Conventional Commits style for PR titles as well. 5. Be sure to keep the PR description updated to reflect all changes. --> ### What changes were proposed in this PR? <!-- Please clarify what changes you are proposing. The purpose of this section is to outline the changes. Here are some tips for you: 1. If you propose a new API, clarify the use case for a new API. 2. If you fix a bug, you can clarify why it is a bug. 3. If it is a refactoring, clarify what has been changed. 3. It would be helpful to include a before-and-after comparison using screenshots or GIFs. 4. Please consider writing useful notes for better and faster reviews. --> This PR consolidates the cluster networking architecture by replacing multiple disparate ingress/proxy solutions with a single, unified **Envoy Gateway** using the Kubernetes Gateway API. **Previously:** - **Texera Ingress**: Handled by `ingress-nginx` controller (separate Helm dependency). - **MinIO Ingress**: Configured separately, often requiring its own ingress status or port exposure. - **CU Envoy**: A standalone, manually maintained Envoy deployment was used to proxy traffic to Computing Units (CUs). **Now (with Envoy Gateway):** - **Unified Gateway**: A single `Gateway` resource (`texera-gateway`) manages traffic for Texera Webserver, MinIO, and Computing Units. - **Gateway API**: Uses standard `HTTPRoute` resources to define routing rules (prefix matching, rewrites) instead of proprietary Ingress annotations or custom config. - **SSL/TLS Automation**: Integrated `cert-manager` with Envoy Gateway to automatically provision and renew Let's Encrypt certificates for both the main Texera domain and the MinIO subdomain. **New Kubernetes Resources**: * `bin/k8s/templates/gateway.yaml`: Defines the `Gateway` resource, configuring listeners for HTTP, HTTPS, and MinIO. Handles TLS termination using Let's Encrypt via cert-manager. * `bin/k8s/templates/routes.yaml`: Defines `HTTPRoute` resources. * **Static Routes**: Standard path-based routing for Texera services (Webserver, API, etc.). * **Dynamic Routes**: Captures regex paths for Computing Units and delegates them to the dynamic backend. * `bin/k8s/templates/backend.yaml`: Defines a `Backend` resource of type `DynamicResolver`. This allows Envoy to route to targets defined dynamically (e.g., by the ExtAuth service modifying headers) rather than static Kubernetes services. * `bin/k8s/templates/security-policy.yaml`: Defines the `SecurityPolicy` that attaches to the dynamic routes. It configures the External Authorization filter to point to the `access-control-service`. * `bin/k8s/templates/eg-config-hook.yaml`: A **Helm Hook** (pre-install/pre-upgrade) that automatically patches the Envoy Gateway configuration to enable necessary features (`enableBackend`, `enableEnvoyPatchPolicy`) which are disabled by default. It ensures the environment is correctly configured without manual intervention. ### Any related issues, documentation, discussions? <!-- Please use this section to link other resources if not mentioned already. 1. If this PR fixes an issue, please include `Fixes apache#1234`, `Resolves apache#1234` or `Closes apache#1234`. If it is only related, simply mention the issue number. 2. If there is design documentation, please add the link. 3. If there is a discussion in the mailing list, please add the link. --> Closes apache#4190 ### How was this PR tested? <!-- If tests were added, say they were added here. Or simply mention that if the PR is tested with existing test cases. Make sure to include/update test cases that check the changes thoroughly including negative and positive cases if possible. If it was tested in a way different from regular unit tests, please clarify how you tested step by step, ideally copy and paste-able, so that other reviewers can test and check, and descendants can verify in the future. If tests were not added, please describe why they were not added and/or why it was difficult to add. --> Tested on the production RKE2 cluster: We tested on http and https on both production server and local environment. ### Was this PR authored or co-authored using generative AI tooling? <!-- If generative AI tooling has been used in the process of authoring this PR, please include the phrase: 'Generated-by: ' followed by the name of the tool and its version. If no, write 'No'. Please refer to the [ASF Generative Tooling Guidance](https://www.apache.org/legal/generative-tooling.html) for details. --> Generated-by: Antigravity
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes were proposed in this PR?
This PR consolidates the cluster networking architecture by replacing multiple disparate ingress/proxy solutions with a single, unified Envoy Gateway using the Kubernetes Gateway API.
Previously:
ingress-nginxcontroller (separate Helm dependency).Now (with Envoy Gateway):
Gatewayresource (texera-gateway) manages traffic for Texera Webserver, MinIO, and Computing Units.HTTPRouteresources to define routing rules (prefix matching, rewrites) instead of proprietary Ingress annotations or custom config.cert-managerwith Envoy Gateway to automatically provision and renew Let's Encrypt certificates for both the main Texera domain and the MinIO subdomain.New Kubernetes Resources:
bin/k8s/templates/gateway.yaml: Defines theGatewayresource, configuring listeners for HTTP, HTTPS, and MinIO. Handles TLS termination using Let's Encrypt via cert-manager.bin/k8s/templates/routes.yaml: DefinesHTTPRouteresources.bin/k8s/templates/backend.yaml: Defines aBackendresource of typeDynamicResolver. This allows Envoy to route to targets defined dynamically (e.g., by the ExtAuth service modifying headers) rather than static Kubernetes services.bin/k8s/templates/security-policy.yaml: Defines theSecurityPolicythat attaches to the dynamic routes. It configures the External Authorization filter to point to theaccess-control-service.bin/k8s/templates/eg-config-hook.yaml: A Helm Hook (pre-install/pre-upgrade) that automatically patches the Envoy Gateway configuration to enable necessary features (enableBackend,enableEnvoyPatchPolicy) which are disabled by default. It ensures the environment is correctly configured without manual intervention.Any related issues, documentation, discussions?
Closes #4190
How was this PR tested?
Tested on the production RKE2 cluster:
We tested on http and https on both production server and local environment.
Was this PR authored or co-authored using generative AI tooling?
Generated-by: Antigravity
Instruction for migration from Ingress to Envoy Gateway
If you manage a Texera deployment and need to replace the old architecture (using Ingress), follow the following steps to replace it with Envoy Gateway.
Note: SSL certificates and load balancing are managed differently. You may refer to your cluster configuration and ignore some of the steps below.
Step 1: Disable the Default RKE2 Nginx Ingress
Since you are switching to Envoy Gateway, you must disable the default RKE2 Nginx controller to free up ports 80 and 443 on your server. This prevents IP and port conflicts when Envoy tries to bind to the host network.
Check no Nginx exist:
kube-systemnamespace.(This should return empty).
Step 2: Configure MetalLB for Local IP Allocation
If your cluster does not have a cloud provider to automatically hand out LoadBalancer IPs, you need to use MetalLB.
metallb-config.yaml:Step 3: Install Envoy Gateway
Install Envoy Gateway using Helm. This command creates the necessary namespace and enables the
Backendextension right out of the box.Step 4: Configure Certificate Management (Let's Encrypt)
Set up a
ClusterIssuerto automatically provision Let's Encrypt certificates using the HTTP-01 challenge.cluster-issuer.yamlfile:Step 5: Verification and Troubleshooting
Check your cluster to ensure the Envoy load balancer successfully acquired the IP address and isn't being blocked by old services.
1. Check General Status
What to look for:
rke2-ingress-nginx-controllerhas an IP: RKE2's default Ingress is still running and is hogging your only available IP. Revisit Step 1.2. Debugging a Pending Service
If your LoadBalancer stays in a
<pending>state, ask the service directly why it failed to sync:Scroll to the Events section at the bottom:
<none>or is empty: The cluster is ignoring the request, confirming the load balancer controller (MetalLB) is missing or misconfigured.After finalizing the above steps, you can install Texera and it will use Envoy-Gateway you just installed.