Skip to content

fix: read L4 routes and ReferenceGrant as v1 instead of the older versions - #456

Merged
AlinsRan merged 1 commit into
masterfrom
feat/l4route-refgrant-v1
Aug 11, 2026
Merged

fix: read L4 routes and ReferenceGrant as v1 instead of the older versions#456
AlinsRan merged 1 commit into
masterfrom
feat/l4route-refgrant-v1

Conversation

@AlinsRan

@AlinsRan AlinsRan commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Sync of apache/apisix-ingress-controller#2839.

Problem

Gateway API 1.6 promoted TCPRoute, UDPRoute and TLSRoute to v1 and deprecated v1alpha2, but the controller still registers, watches, indexes and validates all three through sigs.k8s.io/gateway-api/apis/v1alpha2. Every informer re-list logs:

Warning: The v1alpha2 version of TCPRoute has been deprecated and will be removed in a future release of the API. Please upgrade to v1.

That warning is the visible half. The real problem is that in the 1.6 standard channel CRDs, v1alpha2 is served: false:

CRD v1 v1alpha2 (standard) v1alpha2 (experimental)
tcproutes served, storage not served served, deprecated
udproutes served, storage not served served, deprecated
tlsroutes served, storage not served served, deprecated

So for anyone installing the standard channel, HasAPIResource in setupGatewayAPIControllers finds nothing, and the TCPRoute, UDPRoute and TLSRoute reconcilers are silently skipped — L4 routing does not work at all. Our make install-gateway-api installs the experimental channel, which still serves v1alpha2, which is why CI never caught this. Envoy Gateway hit the identical failure with TLSRoute: envoyproxy/gateway#8326.

Solution

Switch every reference to apis/v1:

  • scheme registration (internal/manager/run.go) and the CRD probe (internal/manager/controllers.go)
  • field indexers, the three reconcilers, the translator, the route adapters
  • the status writers for both the APISIX and API7 EE providers
  • the TCPRoute/UDPRoute validating webhooks — paths move from /validate-gateway-networking-k8s-io-v1alpha2-* to -v1-*, config/webhook/manifests.yaml is regenerated to match, and the hand-written e2e webhook manifest is synced

The v1alpha2 rule and status types are already type aliases of their v1 counterparts, so this is a version switch rather than a behavior change.

ReferenceGrant moves to v1 as well. That one is not urgent — v1beta1 is not deprecated and remains the storage version — but every symbol used from apis/v1beta1 exists in apis/v1, so reading it through the version the API now leads with is free.

User manifests that still declare an older version keep working wherever the installed CRDs serve it, because the API server converts them before they reach the informer (the Gateway API CRDs use conversion.strategy: None, so it is a no-op version relabel). Examples, e2e manifests and the docs support table now use v1.

One schema difference worth noting: v1 tightens TCPRouteSpec.Rules from MaxItems=16 to MaxItems=1. The translator iterates rules and is unaffected, and every manifest in this repo already carries a single rule.

Breaking change

L4 routing now requires Gateway API 1.6 or later, the first release that serves the v1 versions of TCPRoute, UDPRoute and TLSRoute. go.mod and the Makefile are already on 1.6.0.

Verification

  • go build ./..., go vet ./..., gofmt -l clean
  • make lint — 0 issues
  • go test ./internal/... ./pkg/... — all packages pass

Summary by CodeRabbit

  • New Features

    • Added Gateway API v1 support for TCPRoute, UDPRoute, TLSRoute, and ReferenceGrant resources across routing, policy, status, and authorization workflows.
    • Updated validating webhooks and webhook configurations to use Gateway API v1.
    • Updated examples and end-to-end scenarios to use stable API versions.
  • Documentation

    • Documented Gateway API 1.6+ L4 routing requirements, compatibility notes, and migration guidance from deprecated versions.
  • Bug Fixes

    • Improved compatibility with clusters serving Gateway API v1 resources.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 4 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7c3b8608-3ce4-4861-ae51-c55070be5b25

📥 Commits

Reviewing files that changed from the base of the PR and between 6ff8456 and e4076ad.

📒 Files selected for processing (13)
  • internal/adc/translator/l4route_serverport_test.go
  • internal/adc/translator/l4route_test.go
  • internal/adc/translator/tcproute.go
  • internal/adc/translator/udproute.go
  • internal/controller/grpcroute_controller.go
  • internal/controller/httproute_controller.go
  • internal/controller/tcproute_controller.go
  • internal/controller/udproute_controller.go
  • internal/controller/utils.go
  • internal/controller/utils_parentref_test.go
  • internal/provider/apisix/provider.go
  • test/e2e/gatewayapi/tcproute.go
  • test/e2e/gatewayapi/udproute.go
📝 Walkthrough

Walkthrough

Gateway API route and ReferenceGrant handling now uses stable v1 types across controllers, translators, providers, webhooks, manifests, documentation, and tests. Deprecated v1alpha2 and v1beta1 scheme usage was removed.

Changes

Gateway API v1 migration

Layer / File(s) Summary
Route contracts and translation
internal/types/..., internal/adc/translator/...
Route adapters, GVK resolution, policy matching, and L4 translators now use Gateway API v1 types.
Controller reconciliation and policy resolution
internal/controller/...
Route watches, reconciliation, status handling, indexing, parent references, and ReferenceGrant authorization now use v1.
Runtime wiring and provider status
internal/manager/..., internal/provider/...
Controller registration, readiness checks, scheme installation, provider dispatch, deletion handling, and status updates now target v1.
Webhook validation and fixtures
internal/webhook/..., config/webhook/..., test/e2e/framework/manifests/webhook.yaml
TCPRoute and UDPRoute validation endpoints and test fixtures now target Gateway API v1.
Documentation and end-to-end coverage
docs/..., examples/..., test/e2e/..., pkg/utils/cluster_test.go
Documentation, examples, discovery tests, and end-to-end manifests now specify Gateway API v1.

Estimated code review effort: 3 (Moderate) | ~30 minutes

Possibly related PRs

Suggested reviewers: nic-6443

🚥 Pre-merge checks | ✅ 5 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
E2e Test Quality Review ⚠️ Warning All three route flows now use v1, but E2E still installs experimental-install.yaml (Makefile:333), so it cannot validate the standard-channel failure that motivated this migration. Run E2E against Gateway API standard-install.yaml, or add a standard-channel job, and assert v1 discovery, reconciliation, and webhook admission for TCPRoute, UDPRoute, and TLSRoute.
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: migrating L4 routes and ReferenceGrant handling to Gateway API v1.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Security Check ✅ Passed PASS: No issues found in categories 1-7; the PR only changes Gateway API versions, preserves ReferenceGrant checks, and adds no secret logs, storage, endpoint, TLS, or resolver logic.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/l4route-refgrant-v1

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
internal/controller/utils.go (1)

1509-1520: 🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy lift

Propagate ReferenceGrant list errors.

If cli.List fails, checkReferenceGrant returns false. Callers then treat an API or RBAC failure as a missing ReferenceGrant. They can report RefNotPermitted and skip a valid cross-namespace reference.

Return the list error from checkReferenceGrant. Propagate it through reconciliation so controller-runtime can retry.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@internal/controller/utils.go` around lines 1509 - 1520, Change
checkReferenceGrant to return the cli.List error instead of converting failures
to false, then update every caller in reconciliation to propagate that error to
controller-runtime for retry while preserving the existing permission result for
successful list operations.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pkg/utils/cluster_test.go`:
- Around line 269-270: Update both discovery handler write calls in the test,
including the handlers around the TCPRoute response and the additional location
noted, to check and handle the error returned by http.ResponseWriter.Write
instead of discarding it. Follow the surrounding test error-handling convention
and ensure failed mock responses cause the test to fail.

---

Outside diff comments:
In `@internal/controller/utils.go`:
- Around line 1509-1520: Change checkReferenceGrant to return the cli.List error
instead of converting failures to false, then update every caller in
reconciliation to propagate that error to controller-runtime for retry while
preserving the existing permission result for successful list operations.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8414d01d-1ead-4d96-8da0-dbd0f7e2517a

📥 Commits

Reviewing files that changed from the base of the PR and between 079d58a and 6ff8456.

📒 Files selected for processing (44)
  • config/webhook/manifests.yaml
  • docs/en/latest/concepts/gateway-api.md
  • examples/httpbin/tcproute.yaml
  • internal/adc/translator/l4route_test.go
  • internal/adc/translator/policies.go
  • internal/adc/translator/tcproute.go
  • internal/adc/translator/tlsroute.go
  • internal/adc/translator/udproute.go
  • internal/controller/consumer_controller_test.go
  • internal/controller/gateway_controller.go
  • internal/controller/gateway_controller_refgrant_test.go
  • internal/controller/grpcroute_controller.go
  • internal/controller/httproute_controller.go
  • internal/controller/indexer/indexer.go
  • internal/controller/indexer/tlsroute.go
  • internal/controller/policies.go
  • internal/controller/tcproute_controller.go
  • internal/controller/tlsroute_controller.go
  • internal/controller/udproute_controller.go
  • internal/controller/utils.go
  • internal/controller/utils_listenerstatus_test.go
  • internal/controller/utils_parentref_test.go
  • internal/manager/controllers.go
  • internal/manager/run.go
  • internal/provider/api7ee/provider.go
  • internal/provider/api7ee/status.go
  • internal/provider/apisix/provider.go
  • internal/provider/apisix/status.go
  • internal/types/k8s.go
  • internal/types/route_adapter.go
  • internal/webhook/v1/consumer_webhook_test.go
  • internal/webhook/v1/ownership.go
  • internal/webhook/v1/tcproute_webhook.go
  • internal/webhook/v1/tcproute_webhook_test.go
  • internal/webhook/v1/udproute_webhook.go
  • internal/webhook/v1/udproute_webhook_test.go
  • pkg/utils/cluster_test.go
  • test/e2e/framework/manifests/webhook.yaml
  • test/e2e/gatewayapi/gateway.go
  • test/e2e/gatewayapi/tcproute.go
  • test/e2e/gatewayapi/tlsroute.go
  • test/e2e/gatewayapi/udproute.go
  • test/e2e/scaffold/k8s.go
  • test/e2e/webhook/helpers.go
💤 Files with no reviewable changes (1)
  • test/e2e/scaffold/k8s.go

Comment thread pkg/utils/cluster_test.go
Comment on lines +269 to 270
_, _ = w.Write([]byte(`{"kind":"APIResourceList","groupVersion":"gateway.networking.k8s.io/v1",` +
`"resources":[{"name":"tcproutes","kind":"TCPRoute"}]}`))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Check errors returned by w.Write.

Both discovery handlers discard the error returned by http.ResponseWriter.Write. Check the error so a failed mock response cannot be silently accepted.

As per coding guidelines, every function return value must be checked for errors.

Also applies to: 278-279

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/utils/cluster_test.go` around lines 269 - 270, Update both discovery
handler write calls in the test, including the handlers around the TCPRoute
response and the additional location noted, to check and handle the error
returned by http.ResponseWriter.Write instead of discarding it. Follow the
surrounding test error-handling convention and ensure failed mock responses
cause the test to fail.

Source: Coding guidelines

…sions

Sync of apache/apisix-ingress-controller#2839.

Gateway API 1.6 promoted TCPRoute, UDPRoute and TLSRoute to v1 and
deprecated v1alpha2, but the controller still registered, watched, indexed
and validated all three through sigs.k8s.io/gateway-api/apis/v1alpha2.

That is not only a deprecation warning on every informer re-list. In the
1.6 standard channel CRDs the v1alpha2 version is `served: false`, so for
anyone who installs that channel the CRD probe in setupGatewayAPIControllers
finds nothing and the three L4 reconcilers are silently skipped -- L4
routing does not work at all. Our own Makefile installs the experimental
channel, which still serves v1alpha2, which is why CI never caught it.
Envoy Gateway hit the same failure with TLSRoute (envoyproxy/gateway#8326).

Switch every reference to apis/v1: scheme registration, the CRD probe, the
field indexers, the three reconcilers, the translator, the status writers
for both the APISIX and API7 EE providers, the route adapters and the
TCPRoute/UDPRoute validating webhooks. The v1alpha2 rule and status types
are already aliases of their v1 counterparts, so this is a version switch
rather than a behavior change.

ReferenceGrant moves to v1 as well. That one is not urgent -- v1beta1 is
not deprecated and remains the storage version -- but every symbol used
from apis/v1beta1 exists in apis/v1, so reading it through the version the
API now leads with is free.

The webhook paths move from /validate-gateway-networking-k8s-io-v1alpha2-*
to -v1-*, config/webhook/manifests.yaml is regenerated to match, and the
hand-written e2e webhook manifest is synced by hand.

Manifests that still declare an older version keep working wherever the
installed CRDs serve it, since the API server converts them before they
reach the informer. Examples, e2e manifests and the docs support table now
use v1.

BREAKING CHANGE: L4 routing now requires Gateway API 1.6 or later, which is
the first release that serves the v1 versions of TCPRoute, UDPRoute and
TLSRoute.
@AlinsRan
AlinsRan force-pushed the feat/l4route-refgrant-v1 branch from 6ff8456 to e4076ad Compare August 10, 2026 08:35
@github-actions

Copy link
Copy Markdown
Contributor

conformance test report - apisix-standalone mode

apiVersion: gateway.networking.k8s.io/v1
date: "2026-08-10T08:43:38Z"
gatewayAPIChannel: experimental
gatewayAPIVersion: v1.6.0
implementation:
  contact:
  - https://github.com/apache/apisix-ingress-controller/issues
  organization: APISIX
  project: apisix-ingress-controller
  url: https://github.com/apache/apisix-ingress-controller.git
  version: v2.0.0
kind: ConformanceReport
mode: default
profiles:
- core:
    result: partial
    skippedTests:
    - HTTPRouteHTTPSListener
    - HTTPRouteInvalidBackendRefUnknownKind
    - HTTPRouteInvalidCrossNamespaceBackendRef
    - HTTPRouteInvalidNonExistentBackendRef
    - HTTPRouteListenerHostnameMatching
    - HTTPRouteMultipleGateways
    - HTTPRouteNoBackendRefs
    statistics:
      Failed: 0
      Passed: 30
      Skipped: 7
  extended:
    result: partial
    skippedTests:
    - HTTPRouteRedirectPortAndScheme
    statistics:
      Failed: 0
      Passed: 12
      Skipped: 1
    supportedFeatures:
    - GatewayAddressEmpty
    - GatewayPort8080
    - HTTPRouteBackendProtocolWebSocket
    - HTTPRouteDestinationPortMatching
    - HTTPRouteHostRewrite
    - HTTPRouteMethodMatching
    - HTTPRoutePathRewrite
    - HTTPRoutePortRedirect
    - HTTPRouteQueryParamMatching
    - HTTPRouteRequestMirror
    - HTTPRouteResponseHeaderModification
    - HTTPRouteSchemeRedirect
    unsupportedFeatures:
    - BackendTLSPolicy
    - BackendTLSPolicySANValidation
    - GatewayBackendClientCertificate
    - GatewayFrontendClientCertificateValidation
    - GatewayFrontendClientCertificateValidationInsecureFallback
    - GatewayHTTPListenerIsolation
    - GatewayHTTPSListenerDetectMisdirectedRequests
    - GatewayInfrastructurePropagation
    - GatewayStaticAddresses
    - HTTPRoute303RedirectStatusCode
    - HTTPRoute307RedirectStatusCode
    - HTTPRoute308RedirectStatusCode
    - HTTPRouteBackendProtocolH2C
    - HTTPRouteBackendRequestHeaderModification
    - HTTPRouteBackendTimeout
    - HTTPRouteCORS
    - HTTPRouteNamedRouteRule
    - HTTPRouteParentRefPort
    - HTTPRoutePathRedirect
    - HTTPRouteRequestMultipleMirrors
    - HTTPRouteRequestPercentageMirror
    - HTTPRouteRequestTimeout
    - HTTPRouteRetry
    - HTTPRouteRetryBackendTimeout
    - HTTPRouteRetryConnectionError
    - ListenerSet
  name: GATEWAY-HTTP
  summary: Core tests partially succeeded with 7 test skips. Extended tests partially
    succeeded with 1 test skips.
- core:
    result: partial
    skippedTests:
    - GRPCRouteListenerHostnameMatching
    statistics:
      Failed: 0
      Passed: 14
      Skipped: 1
  extended:
    result: success
    statistics:
      Failed: 0
      Passed: 1
      Skipped: 0
    supportedFeatures:
    - GatewayAddressEmpty
    - GatewayPort8080
    unsupportedFeatures:
    - GatewayBackendClientCertificate
    - GatewayFrontendClientCertificateValidation
    - GatewayFrontendClientCertificateValidationInsecureFallback
    - GatewayHTTPListenerIsolation
    - GatewayHTTPSListenerDetectMisdirectedRequests
    - GatewayInfrastructurePropagation
    - GatewayStaticAddresses
    - ListenerSet
  name: GATEWAY-GRPC
  summary: Core tests partially succeeded with 1 test skips. Extended tests succeeded.
- core:
    result: partial
    skippedTests:
    - TLSRouteHostnameIntersection
    - TLSRouteInvalidBackendRefNonexistent
    - TLSRouteInvalidBackendRefUnknownKind
    - TLSRouteSimpleSameNamespace
    statistics:
      Failed: 0
      Passed: 16
      Skipped: 4
  extended:
    result: partial
    skippedTests:
    - TLSRouteTerminateSimpleSameNamespace
    statistics:
      Failed: 0
      Passed: 3
      Skipped: 1
    supportedFeatures:
    - GatewayAddressEmpty
    - GatewayPort8080
    - TLSRouteModeTerminate
    unsupportedFeatures:
    - GatewayBackendClientCertificate
    - GatewayFrontendClientCertificateValidation
    - GatewayFrontendClientCertificateValidationInsecureFallback
    - GatewayHTTPListenerIsolation
    - GatewayHTTPSListenerDetectMisdirectedRequests
    - GatewayInfrastructurePropagation
    - GatewayStaticAddresses
    - ListenerSet
    - TLSRouteModeMixed
  name: GATEWAY-TLS
  summary: Core tests partially succeeded with 4 test skips. Extended tests partially
    succeeded with 1 test skips.
succeededProvisionalTests:
- GatewayOptionalAddressValue

@github-actions

Copy link
Copy Markdown
Contributor

conformance test report - apisix mode

apiVersion: gateway.networking.k8s.io/v1
date: "2026-08-10T08:44:00Z"
gatewayAPIChannel: experimental
gatewayAPIVersion: v1.6.0
implementation:
  contact:
  - https://github.com/apache/apisix-ingress-controller/issues
  organization: APISIX
  project: apisix-ingress-controller
  url: https://github.com/apache/apisix-ingress-controller.git
  version: v2.0.0
kind: ConformanceReport
mode: default
profiles:
- core:
    result: partial
    skippedTests:
    - HTTPRouteHTTPSListener
    - HTTPRouteInvalidBackendRefUnknownKind
    - HTTPRouteInvalidCrossNamespaceBackendRef
    - HTTPRouteInvalidNonExistentBackendRef
    - HTTPRouteListenerHostnameMatching
    - HTTPRouteMultipleGateways
    - HTTPRouteNoBackendRefs
    statistics:
      Failed: 0
      Passed: 30
      Skipped: 7
  extended:
    result: partial
    skippedTests:
    - HTTPRouteRedirectPortAndScheme
    statistics:
      Failed: 0
      Passed: 12
      Skipped: 1
    supportedFeatures:
    - GatewayAddressEmpty
    - GatewayPort8080
    - HTTPRouteBackendProtocolWebSocket
    - HTTPRouteDestinationPortMatching
    - HTTPRouteHostRewrite
    - HTTPRouteMethodMatching
    - HTTPRoutePathRewrite
    - HTTPRoutePortRedirect
    - HTTPRouteQueryParamMatching
    - HTTPRouteRequestMirror
    - HTTPRouteResponseHeaderModification
    - HTTPRouteSchemeRedirect
    unsupportedFeatures:
    - BackendTLSPolicy
    - BackendTLSPolicySANValidation
    - GatewayBackendClientCertificate
    - GatewayFrontendClientCertificateValidation
    - GatewayFrontendClientCertificateValidationInsecureFallback
    - GatewayHTTPListenerIsolation
    - GatewayHTTPSListenerDetectMisdirectedRequests
    - GatewayInfrastructurePropagation
    - GatewayStaticAddresses
    - HTTPRoute303RedirectStatusCode
    - HTTPRoute307RedirectStatusCode
    - HTTPRoute308RedirectStatusCode
    - HTTPRouteBackendProtocolH2C
    - HTTPRouteBackendRequestHeaderModification
    - HTTPRouteBackendTimeout
    - HTTPRouteCORS
    - HTTPRouteNamedRouteRule
    - HTTPRouteParentRefPort
    - HTTPRoutePathRedirect
    - HTTPRouteRequestMultipleMirrors
    - HTTPRouteRequestPercentageMirror
    - HTTPRouteRequestTimeout
    - HTTPRouteRetry
    - HTTPRouteRetryBackendTimeout
    - HTTPRouteRetryConnectionError
    - ListenerSet
  name: GATEWAY-HTTP
  summary: Core tests partially succeeded with 7 test skips. Extended tests partially
    succeeded with 1 test skips.
- core:
    result: partial
    skippedTests:
    - GRPCRouteListenerHostnameMatching
    statistics:
      Failed: 0
      Passed: 14
      Skipped: 1
  extended:
    result: success
    statistics:
      Failed: 0
      Passed: 1
      Skipped: 0
    supportedFeatures:
    - GatewayAddressEmpty
    - GatewayPort8080
    unsupportedFeatures:
    - GatewayBackendClientCertificate
    - GatewayFrontendClientCertificateValidation
    - GatewayFrontendClientCertificateValidationInsecureFallback
    - GatewayHTTPListenerIsolation
    - GatewayHTTPSListenerDetectMisdirectedRequests
    - GatewayInfrastructurePropagation
    - GatewayStaticAddresses
    - ListenerSet
  name: GATEWAY-GRPC
  summary: Core tests partially succeeded with 1 test skips. Extended tests succeeded.
- core:
    result: partial
    skippedTests:
    - TLSRouteHostnameIntersection
    - TLSRouteInvalidBackendRefNonexistent
    - TLSRouteInvalidBackendRefUnknownKind
    - TLSRouteSimpleSameNamespace
    statistics:
      Failed: 0
      Passed: 16
      Skipped: 4
  extended:
    result: partial
    skippedTests:
    - TLSRouteTerminateSimpleSameNamespace
    statistics:
      Failed: 0
      Passed: 3
      Skipped: 1
    supportedFeatures:
    - GatewayAddressEmpty
    - GatewayPort8080
    - TLSRouteModeTerminate
    unsupportedFeatures:
    - GatewayBackendClientCertificate
    - GatewayFrontendClientCertificateValidation
    - GatewayFrontendClientCertificateValidationInsecureFallback
    - GatewayHTTPListenerIsolation
    - GatewayHTTPSListenerDetectMisdirectedRequests
    - GatewayInfrastructurePropagation
    - GatewayStaticAddresses
    - ListenerSet
    - TLSRouteModeMixed
  name: GATEWAY-TLS
  summary: Core tests partially succeeded with 4 test skips. Extended tests partially
    succeeded with 1 test skips.
succeededProvisionalTests:
- GatewayOptionalAddressValue

@github-actions

Copy link
Copy Markdown
Contributor

conformance test report

apiVersion: gateway.networking.k8s.io/v1
date: "2026-08-10T09:03:24Z"
gatewayAPIChannel: experimental
gatewayAPIVersion: v1.6.0
implementation:
  contact:
  - https://github.com/apache/apisix-ingress-controller/issues
  organization: APISIX
  project: apisix-ingress-controller
  url: https://github.com/apache/apisix-ingress-controller.git
  version: v2.0.0
kind: ConformanceReport
mode: default
profiles:
- core:
    failedTests:
    - GatewayModifyListeners
    - HTTPRouteMultipleGateways
    - HTTPRouteNoBackendRefs
    result: failure
    skippedTests:
    - HTTPRouteHTTPSListener
    statistics:
      Failed: 3
      Passed: 33
      Skipped: 1
  extended:
    result: partial
    skippedTests:
    - HTTPRouteRedirectPortAndScheme
    statistics:
      Failed: 0
      Passed: 12
      Skipped: 1
    supportedFeatures:
    - GatewayAddressEmpty
    - GatewayPort8080
    - HTTPRouteBackendProtocolWebSocket
    - HTTPRouteDestinationPortMatching
    - HTTPRouteHostRewrite
    - HTTPRouteMethodMatching
    - HTTPRoutePathRewrite
    - HTTPRoutePortRedirect
    - HTTPRouteQueryParamMatching
    - HTTPRouteRequestMirror
    - HTTPRouteResponseHeaderModification
    - HTTPRouteSchemeRedirect
    unsupportedFeatures:
    - BackendTLSPolicy
    - BackendTLSPolicySANValidation
    - GatewayBackendClientCertificate
    - GatewayFrontendClientCertificateValidation
    - GatewayFrontendClientCertificateValidationInsecureFallback
    - GatewayHTTPListenerIsolation
    - GatewayHTTPSListenerDetectMisdirectedRequests
    - GatewayInfrastructurePropagation
    - GatewayStaticAddresses
    - HTTPRoute303RedirectStatusCode
    - HTTPRoute307RedirectStatusCode
    - HTTPRoute308RedirectStatusCode
    - HTTPRouteBackendProtocolH2C
    - HTTPRouteBackendRequestHeaderModification
    - HTTPRouteBackendTimeout
    - HTTPRouteCORS
    - HTTPRouteNamedRouteRule
    - HTTPRouteParentRefPort
    - HTTPRoutePathRedirect
    - HTTPRouteRequestMultipleMirrors
    - HTTPRouteRequestPercentageMirror
    - HTTPRouteRequestTimeout
    - HTTPRouteRetry
    - HTTPRouteRetryBackendTimeout
    - HTTPRouteRetryConnectionError
    - ListenerSet
  name: GATEWAY-HTTP
  summary: Core tests failed with 3 test failures. Extended tests partially succeeded
    with 1 test skips.
- core:
    failedTests:
    - GatewayModifyListeners
    result: failure
    statistics:
      Failed: 1
      Passed: 14
      Skipped: 0
  extended:
    result: success
    statistics:
      Failed: 0
      Passed: 1
      Skipped: 0
    supportedFeatures:
    - GatewayAddressEmpty
    - GatewayPort8080
    unsupportedFeatures:
    - GatewayBackendClientCertificate
    - GatewayFrontendClientCertificateValidation
    - GatewayFrontendClientCertificateValidationInsecureFallback
    - GatewayHTTPListenerIsolation
    - GatewayHTTPSListenerDetectMisdirectedRequests
    - GatewayInfrastructurePropagation
    - GatewayStaticAddresses
    - ListenerSet
  name: GATEWAY-GRPC
  summary: Core tests failed with 1 test failures. Extended tests succeeded.
- core:
    failedTests:
    - GatewayModifyListeners
    - TLSRouteHostnameIntersection
    - TLSRouteInvalidBackendRefNonexistent
    - TLSRouteInvalidBackendRefUnknownKind
    - TLSRouteSimpleSameNamespace
    result: failure
    statistics:
      Failed: 5
      Passed: 15
      Skipped: 0
  extended:
    failedTests:
    - TLSRouteTerminateSimpleSameNamespace
    result: failure
    statistics:
      Failed: 1
      Passed: 3
      Skipped: 0
    supportedFeatures:
    - GatewayAddressEmpty
    - GatewayPort8080
    - TLSRouteModeTerminate
    unsupportedFeatures:
    - GatewayBackendClientCertificate
    - GatewayFrontendClientCertificateValidation
    - GatewayFrontendClientCertificateValidationInsecureFallback
    - GatewayHTTPListenerIsolation
    - GatewayHTTPSListenerDetectMisdirectedRequests
    - GatewayInfrastructurePropagation
    - GatewayStaticAddresses
    - ListenerSet
    - TLSRouteModeMixed
  name: GATEWAY-TLS
  summary: Core tests failed with 5 test failures. Extended tests failed with 1 test
    failures.
succeededProvisionalTests:
- GatewayOptionalAddressValue

@AlinsRan AlinsRan self-assigned this Aug 11, 2026
@AlinsRan
AlinsRan merged commit aca9c49 into master Aug 11, 2026
22 of 23 checks passed
@AlinsRan
AlinsRan deleted the feat/l4route-refgrant-v1 branch August 11, 2026 02:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants