Skip to content

feat(helm): support agentgateway ingress #2469

Description

@danehans

User Story

As a Kubernetes operator using agentgateway, I want OpenShell to create a dedicated Gateway so that I can use agentgateway without deploying Envoy Gateway or maintaining separate ingress manifests.

Problem Statement

OpenShell documents and tests Envoy Gateway as its Kubernetes Gateway API implementation. Agentgateway is not covered by the chart or Kubernetes E2E suite, and its generated proxy Service conflicts with OpenShell's Service when both use the chart's default name.

Impact / Why This Matters

Agentgateway operators must maintain custom Gateway and GRPCRoute manifests and cannot rely on OpenShell's CI coverage. The naming conflict also makes a straightforward GatewayClass override fail.

Proposed Design

Keep the chart controller-neutral while supporting the existing chart-owned Gateway model with agentgateway.

  • Let the OpenShell release create a dedicated agentgateway Gateway and GRPCRoute.
  • Require a Gateway name distinct from the OpenShell Service, such as openshell-ingress.
  • Preserve the existing Envoy Gateway defaults and behavior.
  • Generalize Kubernetes E2E gateway selection so the same harness can test Envoy or agentgateway.
  • Cover plaintext, HA, frontend TLS termination, and backend TLS re-encryption.
  • Document TLS termination, OIDC identity, BackendTLSPolicy behavior, and the naming constraint.
  • Keep agentgateway controllers and CRDs outside the OpenShell chart.
  • Defer shared, platform-managed Gateway attachment and ListenerSet support to feat(helm): support shared agentgateway Gateway #3715.

Acceptance Criteria

  • The chart can create a dedicated agentgateway Gateway with a non-conflicting name.
  • The chart rejects an agentgateway Gateway name that conflicts with the OpenShell Service.
  • Existing Envoy Gateway values and behavior remain compatible.
  • Helm tests cover dedicated HTTP and HTTPS listeners, certificate validation, and the naming constraint.
  • Kubernetes E2E covers plaintext, HA, frontend TLS, and backend TLS re-encryption with agentgateway.
  • Documentation covers installation, TLS and OIDC boundaries, BackendTLSPolicy, and troubleshooting.
  • The OpenShell chart does not install or own agentgateway cluster infrastructure.

Alternatives Considered

  • Documentation-only class override: rejected because it does not prevent the Service name collision or provide runtime coverage.
  • Bundling agentgateway with the OpenShell chart: rejected because cluster-scoped CRDs and controller lifecycle should remain platform-owned.
  • A shared, platform-managed Gateway: deferred to feat(helm): support shared agentgateway Gateway #3715 to keep the initial integration aligned with the existing Envoy topology.
  • TLS/TCP passthrough: deferred because it loses gRPC-aware routing and expands the chart surface.

Agent Investigation

Revalidated against OpenShell main at 924486805, agentgateway v1.5.0, and Gateway API v1.6.2.

  • The existing Gateway and GRPCRoute templates are portable to agentgateway.
  • Agentgateway names its proxy Service after the Gateway, requiring a name distinct from the OpenShell Service.
  • PR feat(helm): add BackendTLSPolicy support #2728 added standard BackendTLSPolicy support, which this integration reuses and validates.
  • PR feat(helm): add agentgateway ingress support #3714 generalizes Kubernetes E2E gateway selection for Envoy and agentgateway.
  • Branch conformance validates dedicated frontend TLS and backend TLS re-encryption.

Checklist

  • I have reviewed existing issues and the architecture docs
  • This is a design proposal, not a please-build-this request

Activity

  1. matthewgrossman commented on Jul 29, 2026

    @matthewgrossman
    Member

    📋 triage-agent

    Triage Assessment

    Classification: feature-valid

    Summary

    Agentgateway support is feasible without bundling its controller, and the shared-Gateway design keeps the OpenShell chart controller-neutral.

    Investigation

    The chart renders portable Gateway and GRPCRoute resources, but defaults and documentation are Envoy-specific. templates/grpcroute.yaml has no parent sectionName. Agentgateway provisions a proxy Service for each Gateway using the Gateway name, so a chart-created Gateway named openshell can collide with OpenShell’s existing Service. Closed #2097 and open PR #2108 address different controller/TLS concerns and do not provide this integration.

    Recommendation

    Keep the issue open. Use a shared Gateway as the production path, require a non-conflicting name for chart-created development Gateways, and validate CLI plus sandbox operations through test:e2e-kubernetes.

  2. added
    area:clusterRelated to running OpenShell on k3s/docker
    test:e2e-kubernetesRequires Kubernetes end-to-end coverage
    and removed
    state:triage-neededOpened without agent diagnostics and needs triage
    on Jul 29, 2026
  3. danehans commented on Jul 29, 2026

    @danehans
    ContributorAuthor

    /assign

  4. danehans commented on Jul 29, 2026

    @danehans
    ContributorAuthor

    🏗️ build-plan

    Implementation Plan

    Issue type: fix
    Complexity: Low
    Confidence: High

    Summary

    Make the existing Gateway API integration friendlier to arbitrary
    GatewayClass implementations without changing existing release behavior or
    adding controller-specific support or CI. Use agentgateway as a manual
    interoperability check.

    Scope

    • Preserve <fullname> as the default chart-created Gateway name.
    • Preserve explicit Gateway names unchanged.
    • Use the same effective Gateway name in the generated Gateway and GRPCRoute.
    • Document and test an explicit distinct name for controllers whose proxy
      Service would otherwise conflict with the OpenShell Service.
    • Add an optional listener sectionName for bring-your-own Gateways.
    • Generalize Helm comments and ingress documentation around GatewayClass
      overrides and externally managed Gateways.
    • Resolve the effective Gateway name dynamically in the Envoy E2E wrapper.

    Verification

    • mise run helm:test
    • mise run helm:lint
    • mise run helm:docs:check
    • Render checks for chart-owned and bring-your-own Gateway configurations.
    • Envoy HA E2E provisioning and proxy discovery.
    • Manual plaintext smoke test with an agentgateway GatewayClass on a local
      Kubernetes cluster.

    Out of Scope

    • Agentgateway-specific Helm overlays, setup tasks, CI jobs, or support claims.
    • TLS, BackendTLSPolicy, ListenerSet, HA, or controller policy resources.
    • Installing or managing a Gateway API controller from the OpenShell chart.

    Revision 7 — preserves existing Gateway identity and makes a distinct name an
    explicit override, following maintainer feedback on PR #4345.

  5. github-actions commented on Aug 16, 2026

    @github-actions

    This issue has had no activity for 14 days and is now marked stale. It may be closed in 7 days if there is no further activity. Comment or remove the state:stale label to keep it open.

  6. danehans commented on Aug 17, 2026

    @danehans
    ContributorAuthor

    @matthewgrossman when you have a moment, can you PTAL at this issue. I have been vouched, I reviewed the contrib guide, etc. and would like to work on this issue.

  7. removed
    state:staleInactive item at risk of automatic closure.
    on Aug 18, 2026
  8. danehans commented on Aug 20, 2026

    @danehans
    ContributorAuthor

    @elezar thanks for removing the stale label. Can I be assigned this issue? The agentgateway community is looking forward to integrating with OpenShell.

  9. github-actions commented on Sep 4, 2026

    @github-actions

    This issue has had no activity for 14 days and is now marked stale. It may be closed in 7 days if there is no further activity. Comment or remove the state:stale label to keep it open.

  10. danehans commented on Sep 24, 2026

    @danehans
    ContributorAuthor

    Follow-up issues discovered while validating agentgateway ingress:

  11. danehans commented on Sep 25, 2026

    @danehans
    ContributorAuthor

    Scope update: #3714 now focuses on the shared, platform-managed agentgateway topology. Chart-owned dedicated Gateway support has moved to #3715 so it can follow as a smaller change after the shared integration lands. This supersedes the dedicated-mode portion of the earlier Revision 5 build plan.

  12. danehans commented on Sep 25, 2026

    @danehans
    ContributorAuthor

    Follow-up TODO:

  13. danehans commented on Sep 25, 2026

    @danehans
    ContributorAuthor

    PR #3714 now uses the dedicated, chart-owned agentgateway topology to align with the existing Envoy Gateway integration and reduce the initial change. Shared Gateway support is follow-up work in #3715; the prototype is preserved at https://github.com/danehans/OpenShell/tree/3715-shared-agentgateway-gateway/danehans.

  14. added 3 commits that reference this issue on Oct 7, 2026
    450dc23
    7aedf82
    f234713
  15. TaylorMutch commented on Oct 8, 2026

    @TaylorMutch
    Collaborator

    Hi @danehans , thanks for your interest in the project. I discussed this feature request with the team, and at this time this is not a feature we feel we need to support at this time. As it stands and based on the PRs submitted, using a custom GatewayClass with OpenShell is supported, as we currently demonstrate with Envoy Gateway in the helm chart.

    From the problem statement above:

    its generated proxy Service conflicts with OpenShell's Service when both use the chart's default name.

    And from why it matters:

    The naming conflict also makes a straightforward GatewayClass override fail.

    We would accept a narrower scope of changes to address this issue specifically to allow smoother usage of GatewayClass override, but at this time we don't feel that it is needed to have a separate set of CI coverage to guarantee support for Agentgateway on its own. Our example using Envoy Gateway is such that it is a simple and common Gateway implementation available for use, and not necessarily to guarantee support for each Gateway implementation available.

  16. added a commit that references this issue on Oct 9, 2026
    40e0142
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:clusterRelated to running OpenShell on k3s/dockertest:e2e-kubernetesRequires Kubernetes end-to-end coveragetopic:compatibilityCompatibility-related work

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions