This is an automated email from the ASF dual-hosted git repository.

AlinsRan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git


The following commit(s) were added to refs/heads/master by this push:
     new 85d3551a fix: read L4 routes and ReferenceGrant as v1 instead of the 
older versions (#2839)
85d3551a is described below

commit 85d3551ab6295270168cef2f40f4a4cdfee50cab
Author: AlinsRan <[email protected]>
AuthorDate: Tue Aug 11 10:06:36 2026 +0800

    fix: read L4 routes and ReferenceGrant as v1 instead of the older versions 
(#2839)
---
 config/webhook/manifests.yaml                      |  12 +-
 docs/en/latest/concepts/gateway-api.md             |  14 ++-
 examples/httpbin/tcproute.yaml                     |   2 +-
 internal/adc/translator/l4route_serverport_test.go |  17 ++-
 internal/adc/translator/l4route_test.go            |  37 +++---
 internal/adc/translator/policies.go                |   3 +-
 internal/adc/translator/tcproute.go                |   3 +-
 internal/adc/translator/tlsroute.go                |   3 +-
 internal/adc/translator/udproute.go                |   3 +-
 internal/controller/consumer_controller_test.go    |  15 ++-
 internal/controller/gateway_controller.go          |  32 +++--
 .../controller/gateway_controller_refgrant_test.go |  13 +-
 internal/controller/grpcroute_controller.go        |  15 ++-
 internal/controller/httproute_controller.go        |  15 ++-
 internal/controller/indexer/indexer.go             |  31 +++--
 internal/controller/indexer/tlsroute.go            |  10 +-
 internal/controller/policies.go                    |  17 ++-
 internal/controller/tcproute_controller.go         |  42 ++++---
 internal/controller/tlsroute_controller.go         |  42 ++++---
 internal/controller/udproute_controller.go         |  42 ++++---
 internal/controller/utils.go                       |  46 ++++----
 internal/controller/utils_listenerstatus_test.go   |   3 +-
 internal/controller/utils_parentref_test.go        |   5 +-
 internal/manager/controllers.go                    |  13 +-
 internal/manager/run.go                            |  11 +-
 internal/provider/apisix/provider.go               |   9 +-
 internal/provider/apisix/status.go                 |   9 +-
 internal/types/k8s.go                              |  19 ++-
 internal/types/route_adapter.go                    |  25 ++--
 internal/webhook/v1/consumer_webhook_test.go       |  21 ++--
 internal/webhook/v1/ownership.go                   |   5 +-
 internal/webhook/v1/tcproute_webhook.go            |  14 +--
 internal/webhook/v1/tcproute_webhook_test.go       |  39 +++---
 internal/webhook/v1/udproute_webhook.go            |  14 +--
 internal/webhook/v1/udproute_webhook_test.go       | 131 ++++++++++-----------
 pkg/utils/k8s_test.go                              |   6 +-
 test/e2e/framework/manifests/webhook.yaml          |  12 +-
 test/e2e/gatewayapi/gateway.go                     |   4 +-
 test/e2e/gatewayapi/tcproute.go                    |   6 +-
 test/e2e/gatewayapi/tlsroute.go                    |   2 +-
 test/e2e/gatewayapi/udproute.go                    |   2 +-
 test/e2e/scaffold/k8s.go                           |   2 -
 test/e2e/webhook/helpers.go                        |   2 +-
 43 files changed, 365 insertions(+), 403 deletions(-)

diff --git a/config/webhook/manifests.yaml b/config/webhook/manifests.yaml
index 9a2b8342..05e64b27 100644
--- a/config/webhook/manifests.yaml
+++ b/config/webhook/manifests.yaml
@@ -210,14 +210,14 @@ webhooks:
     service:
       name: webhook-service
       namespace: system
-      path: /validate-gateway-networking-k8s-io-v1alpha2-tcproute
+      path: /validate-gateway-networking-k8s-io-v1-tcproute
   failurePolicy: Ignore
-  name: vtcproute-v1alpha2.kb.io
+  name: vtcproute-v1.kb.io
   rules:
   - apiGroups:
     - gateway.networking.k8s.io
     apiVersions:
-    - v1alpha2
+    - v1
     operations:
     - CREATE
     - UPDATE
@@ -230,14 +230,14 @@ webhooks:
     service:
       name: webhook-service
       namespace: system
-      path: /validate-gateway-networking-k8s-io-v1alpha2-udproute
+      path: /validate-gateway-networking-k8s-io-v1-udproute
   failurePolicy: Ignore
-  name: vudproute-v1alpha2.kb.io
+  name: vudproute-v1.kb.io
   rules:
   - apiGroups:
     - gateway.networking.k8s.io
     apiVersions:
-    - v1alpha2
+    - v1
     operations:
     - CREATE
     - UPDATE
diff --git a/docs/en/latest/concepts/gateway-api.md 
b/docs/en/latest/concepts/gateway-api.md
index 4ed4d47e..b42d6633 100644
--- a/docs/en/latest/concepts/gateway-api.md
+++ b/docs/en/latest/concepts/gateway-api.md
@@ -51,17 +51,21 @@ This page summarizes the resources, API versions, and 
fields that APISIX Ingress
 | Gateway          | Partially supported | Partially supported    | Not 
supported                         | v1          |
 | HTTPRoute        | Supported           | Partially supported    | Not 
supported                         | v1          |
 | GRPCRoute        | Supported           | Supported              | Not 
supported                         | v1          |
-| ReferenceGrant   | Supported           | Not supported          | Not 
supported                         | v1beta1     |
-| TLSRoute         | Supported           | Supported              | Not 
supported                         | v1alpha2    |
-| TCPRoute         | Supported           | Supported              | Not 
supported                         | v1alpha2    |
-| UDPRoute         | Supported           | Supported              | Not 
supported                         | v1alpha2    |
+| ReferenceGrant   | Supported           | Not supported          | Not 
supported                         | v1          |
+| TLSRoute         | Supported           | Supported              | Not 
supported                         | v1          |
+| TCPRoute         | Supported           | Supported              | Not 
supported                         | v1          |
+| UDPRoute         | Supported           | Supported              | Not 
supported                         | v1          |
 | BackendTLSPolicy | Not supported       | Not supported          | Not 
supported                         | v1alpha3    |
 
+TLSRoute, TCPRoute, and UDPRoute are read as `v1`, which Gateway API promoted 
them to in 1.6. Gateway API 1.6 or later is therefore required for L4 routing: 
the `v1alpha2` versions of these resources are deprecated everywhere and are 
not even served by the standard channel CRDs. ReferenceGrant is read as `v1` 
for the same reason, although its `v1beta1` version is not deprecated and 
remains the storage version.
+
+Existing manifests that still declare an older version keep working as long as 
the installed CRDs serve it, because the API server converts them before they 
reach the controller. They should still be updated to `v1`.
+
 ## Examples
 
 For configuration examples, see the Gateway API tabs in [Configuration 
Examples](../reference/example.md). For APISIX-specific extensions to Gateway 
API, see [APISIX Ingress Controller 
Resources](./resources.md#gateway-api-extensions).
 
-For a complete list of configuration options, refer to the [Gateway API 
Reference](https://gateway-api.sigs.k8s.io/reference/1.3/spec/). Be aware that 
some fields are not supported, or partially supported.
+For a complete list of configuration options, refer to the [Gateway API 
Reference](https://gateway-api.sigs.k8s.io/reference/1.6/spec/). Be aware that 
some fields are not supported, or partially supported.
 
 ## Unsupported / Partially Supported Fields
 
diff --git a/examples/httpbin/tcproute.yaml b/examples/httpbin/tcproute.yaml
index 0d68cc07..7b94585e 100644
--- a/examples/httpbin/tcproute.yaml
+++ b/examples/httpbin/tcproute.yaml
@@ -61,7 +61,7 @@ spec:
       name: apisix-proxy-config
 ---
 
-apiVersion: gateway.networking.k8s.io/v1alpha2
+apiVersion: gateway.networking.k8s.io/v1
 kind: TCPRoute
 metadata:
   name: tcp-app-1
diff --git a/internal/adc/translator/l4route_serverport_test.go 
b/internal/adc/translator/l4route_serverport_test.go
index 778d2f87..71a226c8 100644
--- a/internal/adc/translator/l4route_serverport_test.go
+++ b/internal/adc/translator/l4route_serverport_test.go
@@ -26,7 +26,6 @@ import (
        "github.com/stretchr/testify/require"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        "github.com/apache/apisix-ingress-controller/internal/controller/config"
        "github.com/apache/apisix-ingress-controller/internal/provider"
@@ -99,11 +98,11 @@ func TestTranslateTCPRouteServerPort(t *testing.T) {
                        tctx.Listeners = tt.listeners
                        tctx.HasExplicitListenerMatch = tt.explicit
 
-                       route := &gatewayv1alpha2.TCPRoute{
+                       route := &gatewayv1.TCPRoute{
                                ObjectMeta: metav1.ObjectMeta{Name: "my-tcp", 
Namespace: "default"},
-                               Spec: gatewayv1alpha2.TCPRouteSpec{
-                                       Rules: []gatewayv1alpha2.TCPRouteRule{
-                                               {BackendRefs: 
[]gatewayv1alpha2.BackendRef{}},
+                               Spec: gatewayv1.TCPRouteSpec{
+                                       Rules: []gatewayv1.TCPRouteRule{
+                                               {BackendRefs: 
[]gatewayv1.BackendRef{}},
                                        },
                                },
                        }
@@ -177,11 +176,11 @@ func TestTranslateUDPRouteServerPort(t *testing.T) {
                        tctx.Listeners = tt.listeners
                        tctx.HasExplicitListenerMatch = tt.explicit
 
-                       route := &gatewayv1alpha2.UDPRoute{
+                       route := &gatewayv1.UDPRoute{
                                ObjectMeta: metav1.ObjectMeta{Name: "my-udp", 
Namespace: "default"},
-                               Spec: gatewayv1alpha2.UDPRouteSpec{
-                                       Rules: []gatewayv1alpha2.UDPRouteRule{
-                                               {BackendRefs: 
[]gatewayv1alpha2.BackendRef{}},
+                               Spec: gatewayv1.UDPRouteSpec{
+                                       Rules: []gatewayv1.UDPRouteRule{
+                                               {BackendRefs: 
[]gatewayv1.BackendRef{}},
                                        },
                                },
                        }
diff --git a/internal/adc/translator/l4route_test.go 
b/internal/adc/translator/l4route_test.go
index c7901fe0..62d0ca03 100644
--- a/internal/adc/translator/l4route_test.go
+++ b/internal/adc/translator/l4route_test.go
@@ -30,7 +30,6 @@ import (
        k8stypes "k8s.io/apimachinery/pkg/types"
        "k8s.io/utils/ptr"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
@@ -84,14 +83,14 @@ func TestTranslateTCPRouteWithL4RoutePolicy(t *testing.T) {
                                tctx.L4RoutePolicies[key] = tt.policy
                        }
 
-                       route := &gatewayv1alpha2.TCPRoute{
+                       route := &gatewayv1.TCPRoute{
                                ObjectMeta: metav1.ObjectMeta{
                                        Name:      "my-tcp",
                                        Namespace: "default",
                                },
-                               Spec: gatewayv1alpha2.TCPRouteSpec{
-                                       Rules: []gatewayv1alpha2.TCPRouteRule{
-                                               {BackendRefs: 
[]gatewayv1alpha2.BackendRef{}},
+                               Spec: gatewayv1.TCPRouteSpec{
+                                       Rules: []gatewayv1.TCPRouteRule{
+                                               {BackendRefs: 
[]gatewayv1.BackendRef{}},
                                        },
                                },
                        }
@@ -151,14 +150,14 @@ func TestTranslateUDPRouteWithL4RoutePolicy(t *testing.T) 
{
                                tctx.L4RoutePolicies[key] = tt.policy
                        }
 
-                       route := &gatewayv1alpha2.UDPRoute{
+                       route := &gatewayv1.UDPRoute{
                                ObjectMeta: metav1.ObjectMeta{
                                        Name:      "my-udp",
                                        Namespace: "default",
                                },
-                               Spec: gatewayv1alpha2.UDPRouteSpec{
-                                       Rules: []gatewayv1alpha2.UDPRouteRule{
-                                               {BackendRefs: 
[]gatewayv1alpha2.BackendRef{}},
+                               Spec: gatewayv1.UDPRouteSpec{
+                                       Rules: []gatewayv1.UDPRouteRule{
+                                               {BackendRefs: 
[]gatewayv1.BackendRef{}},
                                        },
                                },
                        }
@@ -230,20 +229,20 @@ func TestTranslateTLSRouteWithL4RoutePolicy(t *testing.T) 
{
                                tctx.L4RoutePolicies[key] = tt.policy
                        }
 
-                       hostnames := make([]gatewayv1alpha2.Hostname, 0, 
len(tt.hostnames))
+                       hostnames := make([]gatewayv1.Hostname, 0, 
len(tt.hostnames))
                        for _, h := range tt.hostnames {
-                               hostnames = append(hostnames, 
gatewayv1alpha2.Hostname(h))
+                               hostnames = append(hostnames, 
gatewayv1.Hostname(h))
                        }
 
-                       route := &gatewayv1alpha2.TLSRoute{
+                       route := &gatewayv1.TLSRoute{
                                ObjectMeta: metav1.ObjectMeta{
                                        Name:      "my-tls",
                                        Namespace: "default",
                                },
-                               Spec: gatewayv1alpha2.TLSRouteSpec{
+                               Spec: gatewayv1.TLSRouteSpec{
                                        Hostnames: hostnames,
-                                       Rules: []gatewayv1alpha2.TLSRouteRule{
-                                               {BackendRefs: 
[]gatewayv1alpha2.BackendRef{}},
+                                       Rules: []gatewayv1.TLSRouteRule{
+                                               {BackendRefs: 
[]gatewayv1.BackendRef{}},
                                        },
                                },
                        }
@@ -330,14 +329,14 @@ func TestTranslateTCPRouteUpstreamScheme(t *testing.T) {
                },
        }
 
-       route := &gatewayv1alpha2.TCPRoute{
+       route := &gatewayv1.TCPRoute{
                ObjectMeta: metav1.ObjectMeta{
                        Name:      "my-tcp",
                        Namespace: namespace,
                },
-               Spec: gatewayv1alpha2.TCPRouteSpec{
-                       Rules: []gatewayv1alpha2.TCPRouteRule{{
-                               BackendRefs: []gatewayv1alpha2.BackendRef{{
+               Spec: gatewayv1.TCPRouteSpec{
+                       Rules: []gatewayv1.TCPRouteRule{{
+                               BackendRefs: []gatewayv1.BackendRef{{
                                        BackendObjectReference: 
gatewayv1.BackendObjectReference{
                                                Name: 
gatewayv1.ObjectName(serviceName),
                                                Port: ptr.To(portNumber),
diff --git a/internal/adc/translator/policies.go 
b/internal/adc/translator/policies.go
index 0c22f007..003c6cc4 100644
--- a/internal/adc/translator/policies.go
+++ b/internal/adc/translator/policies.go
@@ -24,7 +24,6 @@ import (
        "k8s.io/apimachinery/pkg/types"
        "k8s.io/utils/ptr"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        adctypes "github.com/apache/apisix-ingress-controller/api/adc"
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
@@ -240,7 +239,7 @@ func (t *Translator) AttachL4RoutePolicyPlugins(
                        continue
                }
                for _, ref := range policy.Spec.TargetRefs {
-                       if string(ref.Group) != gatewayv1alpha2.GroupName {
+                       if string(ref.Group) != gatewayv1.GroupName {
                                continue
                        }
                        if string(ref.Kind) != routeKind {
diff --git a/internal/adc/translator/tcproute.go 
b/internal/adc/translator/tcproute.go
index 11eaa197..605b609e 100644
--- a/internal/adc/translator/tcproute.go
+++ b/internal/adc/translator/tcproute.go
@@ -22,7 +22,6 @@ import (
        "sort"
 
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        adctypes "github.com/apache/apisix-ingress-controller/api/adc"
        apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
@@ -105,7 +104,7 @@ func (t *Translator) buildL4StreamRoutes(tctx 
*provider.TranslateContext, namesp
        return streamRoutes
 }
 
-func (t *Translator) TranslateTCPRoute(tctx *provider.TranslateContext, 
tcpRoute *gatewayv1alpha2.TCPRoute) (*TranslateResult, error) {
+func (t *Translator) TranslateTCPRoute(tctx *provider.TranslateContext, 
tcpRoute *gatewayv1.TCPRoute) (*TranslateResult, error) {
        result := &TranslateResult{}
        rules := tcpRoute.Spec.Rules
        labels := label.GenLabel(tcpRoute)
diff --git a/internal/adc/translator/tlsroute.go 
b/internal/adc/translator/tlsroute.go
index 6df8aca1..413f4790 100644
--- a/internal/adc/translator/tlsroute.go
+++ b/internal/adc/translator/tlsroute.go
@@ -21,7 +21,6 @@ import (
        "fmt"
 
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        adctypes "github.com/apache/apisix-ingress-controller/api/adc"
        apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
@@ -31,7 +30,7 @@ import (
        "github.com/apache/apisix-ingress-controller/internal/types"
 )
 
-func (t *Translator) TranslateTLSRoute(tctx *provider.TranslateContext, 
tlsRoute *gatewayv1alpha2.TLSRoute) (*TranslateResult, error) {
+func (t *Translator) TranslateTLSRoute(tctx *provider.TranslateContext, 
tlsRoute *gatewayv1.TLSRoute) (*TranslateResult, error) {
        result := &TranslateResult{}
        rules := tlsRoute.Spec.Rules
        labels := label.GenLabel(tlsRoute)
diff --git a/internal/adc/translator/udproute.go 
b/internal/adc/translator/udproute.go
index 3fdbd817..6e6e23ac 100644
--- a/internal/adc/translator/udproute.go
+++ b/internal/adc/translator/udproute.go
@@ -21,7 +21,6 @@ import (
        "fmt"
 
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        adctypes "github.com/apache/apisix-ingress-controller/api/adc"
        apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
@@ -31,7 +30,7 @@ import (
        "github.com/apache/apisix-ingress-controller/internal/types"
 )
 
-func (t *Translator) TranslateUDPRoute(tctx *provider.TranslateContext, 
udpRoute *gatewayv1alpha2.UDPRoute) (*TranslateResult, error) {
+func (t *Translator) TranslateUDPRoute(tctx *provider.TranslateContext, 
udpRoute *gatewayv1.UDPRoute) (*TranslateResult, error) {
        result := &TranslateResult{}
        rules := udpRoute.Spec.Rules
        labels := label.GenLabel(udpRoute)
diff --git a/internal/controller/consumer_controller_test.go 
b/internal/controller/consumer_controller_test.go
index 4194d8d9..a29d5208 100644
--- a/internal/controller/consumer_controller_test.go
+++ b/internal/controller/consumer_controller_test.go
@@ -30,7 +30,6 @@ import (
        clientgoscheme "k8s.io/client-go/kubernetes/scheme"
        "sigs.k8s.io/controller-runtime/pkg/client/fake"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       "sigs.k8s.io/gateway-api/apis/v1beta1"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        "github.com/apache/apisix-ingress-controller/internal/provider"
@@ -48,7 +47,7 @@ func buildConsumerReconciler(t *testing.T, objs 
...runtime.Object) *ConsumerReco
        require.NoError(t, clientgoscheme.AddToScheme(scheme))
        require.NoError(t, v1alpha1.AddToScheme(scheme))
        require.NoError(t, gatewayv1.Install(scheme))
-       require.NoError(t, v1beta1.Install(scheme))
+       require.NoError(t, gatewayv1.Install(scheme))
 
        cli := 
fake.NewClientBuilder().WithScheme(scheme).WithRuntimeObjects(objs...).Build()
        return &ConsumerReconciler{Client: cli, Log: logr.Discard()}
@@ -75,16 +74,16 @@ func victimSecret() *corev1.Secret {
        }
 }
 
-func secretGrant() *v1beta1.ReferenceGrant {
-       return &v1beta1.ReferenceGrant{
+func secretGrant() *gatewayv1.ReferenceGrant {
+       return &gatewayv1.ReferenceGrant{
                ObjectMeta: metav1.ObjectMeta{Name: "allow-consumer", 
Namespace: secretNS},
-               Spec: v1beta1.ReferenceGrantSpec{
-                       From: []v1beta1.ReferenceGrantFrom{{
-                               Group:     
v1beta1.Group(v1alpha1.GroupVersion.Group),
+               Spec: gatewayv1.ReferenceGrantSpec{
+                       From: []gatewayv1.ReferenceGrantFrom{{
+                               Group:     
gatewayv1.Group(v1alpha1.GroupVersion.Group),
                                Kind:      "Consumer",
                                Namespace: consumerNS,
                        }},
-                       To: []v1beta1.ReferenceGrantTo{{
+                       To: []gatewayv1.ReferenceGrantTo{{
                                Group: "",
                                Kind:  "Secret",
                        }},
diff --git a/internal/controller/gateway_controller.go 
b/internal/controller/gateway_controller.go
index 69cc89f5..bdde4d3d 100644
--- a/internal/controller/gateway_controller.go
+++ b/internal/controller/gateway_controller.go
@@ -36,8 +36,6 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/predicate"
        "sigs.k8s.io/controller-runtime/pkg/reconcile"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-       "sigs.k8s.io/gateway-api/apis/v1beta1"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        
"github.com/apache/apisix-ingress-controller/internal/controller/indexer"
@@ -100,38 +98,38 @@ func (r *GatewayReconciler) SetupWithManager(mgr 
ctrl.Manager) error {
                )
 
        if GetEnableReferenceGrant() {
-               bdr.Watches(&v1beta1.ReferenceGrant{},
+               bdr.Watches(&gatewayv1.ReferenceGrant{},
                        
handler.EnqueueRequestsFromMapFunc(r.listReferenceGrantsForGateway),
                        
builder.WithPredicates(referenceGrantPredicates(KindGateway)),
                )
        }
-       hasTCPRoute, err := pkgutils.HasAPIResource(mgr, 
&gatewayv1alpha2.TCPRoute{})
+       hasTCPRoute, err := pkgutils.HasAPIResource(mgr, &gatewayv1.TCPRoute{})
        if err != nil {
                return err
        }
        if hasTCPRoute {
                bdr.Watches(
-                       &gatewayv1alpha2.TCPRoute{},
+                       &gatewayv1.TCPRoute{},
                        
handler.EnqueueRequestsFromMapFunc(r.listGatewaysForStatusParentRefs),
                )
        }
-       hasTLSRoute, err := pkgutils.HasAPIResource(mgr, 
&gatewayv1alpha2.TLSRoute{})
+       hasTLSRoute, err := pkgutils.HasAPIResource(mgr, &gatewayv1.TLSRoute{})
        if err != nil {
                return err
        }
        if hasTLSRoute {
                bdr.Watches(
-                       &gatewayv1alpha2.TLSRoute{},
+                       &gatewayv1.TLSRoute{},
                        
handler.EnqueueRequestsFromMapFunc(r.listGatewaysForStatusParentRefs),
                )
        }
-       hasUDPRoute, err := pkgutils.HasAPIResource(mgr, 
&gatewayv1alpha2.UDPRoute{})
+       hasUDPRoute, err := pkgutils.HasAPIResource(mgr, &gatewayv1.UDPRoute{})
        if err != nil {
                return err
        }
        if hasUDPRoute {
                bdr.Watches(
-                       &gatewayv1alpha2.UDPRoute{},
+                       &gatewayv1.UDPRoute{},
                        
handler.EnqueueRequestsFromMapFunc(r.listGatewaysForStatusParentRefs),
                )
        }
@@ -444,12 +442,12 @@ func (r *GatewayReconciler) listGatewaysForConfigMap(ctx 
context.Context, obj cl
 }
 
 func (r *GatewayReconciler) listReferenceGrantsForGateway(ctx context.Context, 
obj client.Object) (requests []reconcile.Request) {
-       grant, ok := obj.(*v1beta1.ReferenceGrant)
+       grant, ok := obj.(*gatewayv1.ReferenceGrant)
        if !ok {
                r.Log.Error(
                        errors.New("unexpected object type"),
                        "ReferenceGrant watch predicate received unexpected 
object type",
-                       "expected", FullTypeName(new(v1beta1.ReferenceGrant)), 
"found", FullTypeName(obj),
+                       "expected", 
FullTypeName(new(gatewayv1.ReferenceGrant)), "found", FullTypeName(obj),
                )
                return nil
        }
@@ -461,10 +459,10 @@ func (r *GatewayReconciler) 
listReferenceGrantsForGateway(ctx context.Context, o
        }
 
        for _, gateway := range gatewayList.Items {
-               gw := v1beta1.ReferenceGrantFrom{
+               gw := gatewayv1.ReferenceGrantFrom{
                        Group:     gatewayv1.GroupName,
                        Kind:      KindGateway,
-                       Namespace: v1beta1.Namespace(gateway.GetNamespace()),
+                       Namespace: gatewayv1.Namespace(gateway.GetNamespace()),
                }
                for _, from := range grant.Spec.From {
                        if from == gw {
@@ -504,10 +502,10 @@ func (r *GatewayReconciler) processListenerConfig(tctx 
*provider.TranslateContex
                                // or the data plane would program a 
certificate the target namespace never
                                // permitted. The listener status already 
reports RefNotPermitted for this.
                                if !checkReferenceGrant(context.Background(), 
r.Client,
-                                       v1beta1.ReferenceGrantFrom{
+                                       gatewayv1.ReferenceGrantFrom{
                                                Group:     gatewayv1.GroupName,
                                                Kind:      KindGateway,
-                                               Namespace: 
v1beta1.Namespace(gateway.Namespace),
+                                               Namespace: 
gatewayv1.Namespace(gateway.Namespace),
                                        },
                                        gatewayv1.ObjectReference{
                                                Group:     corev1.GroupName,
@@ -551,10 +549,10 @@ func (r *GatewayReconciler) processListenerConfig(tctx 
*provider.TranslateContex
                                // data plane would enable downstream mTLS with 
a CA the target namespace
                                // never permitted. The listener status already 
reports RefNotPermitted.
                                if !checkReferenceGrant(context.Background(), 
r.Client,
-                                       v1beta1.ReferenceGrantFrom{
+                                       gatewayv1.ReferenceGrantFrom{
                                                Group:     gatewayv1.GroupName,
                                                Kind:      KindGateway,
-                                               Namespace: 
v1beta1.Namespace(gateway.Namespace),
+                                               Namespace: 
gatewayv1.Namespace(gateway.Namespace),
                                        },
                                        gatewayv1.ObjectReference{
                                                Group:     corev1.GroupName,
diff --git a/internal/controller/gateway_controller_refgrant_test.go 
b/internal/controller/gateway_controller_refgrant_test.go
index 97f67709..51854e35 100644
--- a/internal/controller/gateway_controller_refgrant_test.go
+++ b/internal/controller/gateway_controller_refgrant_test.go
@@ -33,7 +33,6 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/client"
        "sigs.k8s.io/controller-runtime/pkg/client/fake"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       "sigs.k8s.io/gateway-api/apis/v1beta1"
 
        "github.com/apache/apisix-ingress-controller/internal/provider"
 )
@@ -79,16 +78,16 @@ func gatewayWithRefs(refNamespace string) 
*gatewayv1.Gateway {
 
 // referenceGrant permits a Gateway in "default" to reference Secrets and
 // ConfigMaps in grantNamespace.
-func referenceGrant(grantNamespace string) *v1beta1.ReferenceGrant {
-       return &v1beta1.ReferenceGrant{
+func referenceGrant(grantNamespace string) *gatewayv1.ReferenceGrant {
+       return &gatewayv1.ReferenceGrant{
                ObjectMeta: metav1.ObjectMeta{Namespace: grantNamespace, Name: 
"grant"},
-               Spec: v1beta1.ReferenceGrantSpec{
-                       From: []v1beta1.ReferenceGrantFrom{{
+               Spec: gatewayv1.ReferenceGrantSpec{
+                       From: []gatewayv1.ReferenceGrantFrom{{
                                Group:     gatewayv1.GroupName,
                                Kind:      KindGateway,
                                Namespace: "default",
                        }},
-                       To: []v1beta1.ReferenceGrantTo{
+                       To: []gatewayv1.ReferenceGrantTo{
                                {Group: "", Kind: KindSecret},
                                {Group: "", Kind: KindConfigMap},
                        },
@@ -104,7 +103,7 @@ func 
TestProcessListenerConfig_CrossNamespaceReferenceGrant(t *testing.T) {
        scheme := runtime.NewScheme()
        require.NoError(t, clientgoscheme.AddToScheme(scheme))
        require.NoError(t, gatewayv1.Install(scheme))
-       require.NoError(t, v1beta1.Install(scheme))
+       require.NoError(t, gatewayv1.Install(scheme))
 
        certSecret := func(ns string) *corev1.Secret {
                return &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Namespace: 
ns, Name: "cert"}}
diff --git a/internal/controller/grpcroute_controller.go 
b/internal/controller/grpcroute_controller.go
index 31a0b535..dc3d0e03 100644
--- a/internal/controller/grpcroute_controller.go
+++ b/internal/controller/grpcroute_controller.go
@@ -37,7 +37,6 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/reconcile"
        "sigs.k8s.io/controller-runtime/pkg/source"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       "sigs.k8s.io/gateway-api/apis/v1beta1"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        
"github.com/apache/apisix-ingress-controller/internal/controller/indexer"
@@ -112,7 +111,7 @@ func (r *GRPCRouteReconciler) SetupWithManager(mgr 
ctrl.Manager) error {
                )
 
        if GetEnableReferenceGrant() {
-               bdr.Watches(&v1beta1.ReferenceGrant{},
+               bdr.Watches(&gatewayv1.ReferenceGrant{},
                        
handler.EnqueueRequestsFromMapFunc(r.listGRPCRoutesForReferenceGrant),
                        
builder.WithPredicates(referenceGrantPredicates(KindGRPCRoute)),
                )
@@ -415,10 +414,10 @@ func (r *GRPCRouteReconciler) 
processGRPCRouteBackendRefs(tctx *provider.Transla
                if grNN.Namespace != targetNN.Namespace {
                        if permitted := checkReferenceGrant(tctx,
                                r.Client,
-                               v1beta1.ReferenceGrantFrom{
+                               gatewayv1.ReferenceGrantFrom{
                                        Group:     gatewayv1.GroupName,
                                        Kind:      KindGRPCRoute,
-                                       Namespace: 
v1beta1.Namespace(grNN.Namespace),
+                                       Namespace: 
gatewayv1.Namespace(grNN.Namespace),
                                },
                                gatewayv1.ObjectReference{
                                        Group:     corev1.GroupName,
@@ -428,7 +427,7 @@ func (r *GRPCRouteReconciler) 
processGRPCRouteBackendRefs(tctx *provider.Transla
                                },
                        ); !permitted {
                                terr = types.ReasonError{
-                                       Reason:  
string(v1beta1.RouteReasonRefNotPermitted),
+                                       Reason:  
string(gatewayv1.RouteReasonRefNotPermitted),
                                        Message: fmt.Sprintf("%s is in a 
different namespace than the GRPCRoute %s and no ReferenceGrant allowing 
reference is configured", targetNN, grNN),
                                }
                                continue
@@ -556,7 +555,7 @@ func (r *GRPCRouteReconciler) 
listGRPCRoutesForGatewayProxy(ctx context.Context,
 }
 
 func (r *GRPCRouteReconciler) listGRPCRoutesForReferenceGrant(ctx 
context.Context, obj client.Object) (requests []reconcile.Request) {
-       grant, ok := obj.(*v1beta1.ReferenceGrant)
+       grant, ok := obj.(*gatewayv1.ReferenceGrant)
        if !ok {
                r.Log.Error(fmt.Errorf("unexpected object type"), "failed to 
convert object to ReferenceGrant")
                return nil
@@ -569,10 +568,10 @@ func (r *GRPCRouteReconciler) 
listGRPCRoutesForReferenceGrant(ctx context.Contex
        }
 
        for _, grpcRoute := range grpcRouteList.Items {
-               gr := v1beta1.ReferenceGrantFrom{
+               gr := gatewayv1.ReferenceGrantFrom{
                        Group:     gatewayv1.GroupName,
                        Kind:      KindGRPCRoute,
-                       Namespace: v1beta1.Namespace(grpcRoute.GetNamespace()),
+                       Namespace: 
gatewayv1.Namespace(grpcRoute.GetNamespace()),
                }
                for _, from := range grant.Spec.From {
                        if from == gr {
diff --git a/internal/controller/httproute_controller.go 
b/internal/controller/httproute_controller.go
index 41a8a116..f721ebd2 100644
--- a/internal/controller/httproute_controller.go
+++ b/internal/controller/httproute_controller.go
@@ -40,7 +40,6 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/reconcile"
        "sigs.k8s.io/controller-runtime/pkg/source"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       "sigs.k8s.io/gateway-api/apis/v1beta1"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        
"github.com/apache/apisix-ingress-controller/internal/controller/indexer"
@@ -119,7 +118,7 @@ func (r *HTTPRouteReconciler) SetupWithManager(mgr 
ctrl.Manager) error {
                )
 
        if GetEnableReferenceGrant() {
-               bdr.Watches(&v1beta1.ReferenceGrant{},
+               bdr.Watches(&gatewayv1.ReferenceGrant{},
                        
handler.EnqueueRequestsFromMapFunc(r.listHTTPRoutesForReferenceGrant),
                        
builder.WithPredicates(referenceGrantPredicates(KindHTTPRoute)),
                )
@@ -495,10 +494,10 @@ func (r *HTTPRouteReconciler) 
processHTTPRouteBackendRefs(tctx *provider.Transla
                if hrNN.Namespace != targetNN.Namespace {
                        if permitted := checkReferenceGrant(tctx,
                                r.Client,
-                               v1beta1.ReferenceGrantFrom{
+                               gatewayv1.ReferenceGrantFrom{
                                        Group:     gatewayv1.GroupName,
                                        Kind:      KindHTTPRoute,
-                                       Namespace: 
v1beta1.Namespace(hrNN.Namespace),
+                                       Namespace: 
gatewayv1.Namespace(hrNN.Namespace),
                                },
                                gatewayv1.ObjectReference{
                                        Group:     corev1.GroupName,
@@ -508,7 +507,7 @@ func (r *HTTPRouteReconciler) 
processHTTPRouteBackendRefs(tctx *provider.Transla
                                },
                        ); !permitted {
                                terr = types.ReasonError{
-                                       Reason:  
string(v1beta1.RouteReasonRefNotPermitted),
+                                       Reason:  
string(gatewayv1.RouteReasonRefNotPermitted),
                                        Message: fmt.Sprintf("%s is in a 
different namespace than the HTTPRoute %s and no ReferenceGrant allowing 
reference is configured", targetNN, hrNN),
                                }
                                continue
@@ -668,7 +667,7 @@ func (r *HTTPRouteReconciler) 
listHTTPRoutesForGatewayProxy(ctx context.Context,
 }
 
 func (r *HTTPRouteReconciler) listHTTPRoutesForReferenceGrant(ctx 
context.Context, obj client.Object) (requests []reconcile.Request) {
-       grant, ok := obj.(*v1beta1.ReferenceGrant)
+       grant, ok := obj.(*gatewayv1.ReferenceGrant)
        if !ok {
                r.Log.Error(fmt.Errorf("unexpected object type"), "failed to 
convert object to ReferenceGrant")
                return nil
@@ -681,10 +680,10 @@ func (r *HTTPRouteReconciler) 
listHTTPRoutesForReferenceGrant(ctx context.Contex
        }
 
        for _, httpRoute := range httpRouteList.Items {
-               hr := v1beta1.ReferenceGrantFrom{
+               hr := gatewayv1.ReferenceGrantFrom{
                        Group:     gatewayv1.GroupName,
                        Kind:      KindHTTPRoute,
-                       Namespace: v1beta1.Namespace(httpRoute.GetNamespace()),
+                       Namespace: 
gatewayv1.Namespace(httpRoute.GetNamespace()),
                }
                for _, from := range grant.Spec.From {
                        if from == hr {
diff --git a/internal/controller/indexer/indexer.go 
b/internal/controller/indexer/indexer.go
index 99f8b535..7c5eaaf7 100644
--- a/internal/controller/indexer/indexer.go
+++ b/internal/controller/indexer/indexer.go
@@ -28,7 +28,6 @@ import (
        ctrl "sigs.k8s.io/controller-runtime"
        "sigs.k8s.io/controller-runtime/pkg/client"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
@@ -110,13 +109,13 @@ func SetupGatewayAPIIndexer(mgr ctrl.Manager) error {
        setupLog := 
ctrl.LoggerFrom(context.Background()).WithName("indexer").WithName("gatewayapi")
 
        for resource, setup := range map[client.Object]func(ctrl.Manager) error{
-               &gatewayv1.Gateway{}:        setupGatewayIndexer,
-               &gatewayv1.HTTPRoute{}:      setupHTTPRouteIndexer,
-               &gatewayv1.GRPCRoute{}:      setupGRPCRouteIndexer,
-               &gatewayv1alpha2.TCPRoute{}: setupTCPRouteIndexer,
-               &gatewayv1alpha2.UDPRoute{}: setupUDPRouteIndexer,
-               &gatewayv1alpha2.TLSRoute{}: setupTLSRouteIndexer,
-               &gatewayv1.GatewayClass{}:   setupGatewayClassIndexer,
+               &gatewayv1.Gateway{}:      setupGatewayIndexer,
+               &gatewayv1.HTTPRoute{}:    setupHTTPRouteIndexer,
+               &gatewayv1.GRPCRoute{}:    setupGRPCRouteIndexer,
+               &gatewayv1.TCPRoute{}:     setupTCPRouteIndexer,
+               &gatewayv1.UDPRoute{}:     setupUDPRouteIndexer,
+               &gatewayv1.TLSRoute{}:     setupTLSRouteIndexer,
+               &gatewayv1.GatewayClass{}: setupGatewayClassIndexer,
        } {
                installed, err := utils.HasAPIResource(mgr, resource)
                if err != nil {
@@ -319,7 +318,7 @@ func setupHTTPRouteIndexer(mgr ctrl.Manager) error {
 func setupTCPRouteIndexer(mgr ctrl.Manager) error {
        if err := mgr.GetFieldIndexer().IndexField(
                context.Background(),
-               &gatewayv1alpha2.TCPRoute{},
+               &gatewayv1.TCPRoute{},
                ParentRefs,
                TCPRouteParentRefsIndexFunc,
        ); err != nil {
@@ -328,7 +327,7 @@ func setupTCPRouteIndexer(mgr ctrl.Manager) error {
 
        if err := mgr.GetFieldIndexer().IndexField(
                context.Background(),
-               &gatewayv1alpha2.TCPRoute{},
+               &gatewayv1.TCPRoute{},
                ServiceIndexRef,
                TCPPRouteServiceIndexFunc,
        ); err != nil {
@@ -340,7 +339,7 @@ func setupTCPRouteIndexer(mgr ctrl.Manager) error {
 func setupUDPRouteIndexer(mgr ctrl.Manager) error {
        if err := mgr.GetFieldIndexer().IndexField(
                context.Background(),
-               &gatewayv1alpha2.UDPRoute{},
+               &gatewayv1.UDPRoute{},
                ParentRefs,
                UDPRouteParentRefsIndexFunc,
        ); err != nil {
@@ -349,7 +348,7 @@ func setupUDPRouteIndexer(mgr ctrl.Manager) error {
 
        if err := mgr.GetFieldIndexer().IndexField(
                context.Background(),
-               &gatewayv1alpha2.UDPRoute{},
+               &gatewayv1.UDPRoute{},
                ServiceIndexRef,
                UDPRouteServiceIndexFunc,
        ); err != nil {
@@ -697,7 +696,7 @@ func HTTPRouteParentRefsIndexFunc(rawObj client.Object) 
[]string {
 }
 
 func TCPRouteParentRefsIndexFunc(rawObj client.Object) []string {
-       tr := rawObj.(*gatewayv1alpha2.TCPRoute)
+       tr := rawObj.(*gatewayv1.TCPRoute)
        keys := make([]string, 0, len(tr.Spec.ParentRefs))
        for _, ref := range tr.Spec.ParentRefs {
                ns := tr.GetNamespace()
@@ -710,7 +709,7 @@ func TCPRouteParentRefsIndexFunc(rawObj client.Object) 
[]string {
 }
 
 func UDPRouteParentRefsIndexFunc(rawObj client.Object) []string {
-       ur := rawObj.(*gatewayv1alpha2.UDPRoute)
+       ur := rawObj.(*gatewayv1.UDPRoute)
        keys := make([]string, 0, len(ur.Spec.ParentRefs))
        for _, ref := range ur.Spec.ParentRefs {
                ns := ur.GetNamespace()
@@ -741,7 +740,7 @@ func HTTPRouteServiceIndexFunc(rawObj client.Object) 
[]string {
 }
 
 func TCPPRouteServiceIndexFunc(rawObj client.Object) []string {
-       tr := rawObj.(*gatewayv1alpha2.TCPRoute)
+       tr := rawObj.(*gatewayv1.TCPRoute)
        keys := make([]string, 0, len(tr.Spec.Rules))
        for _, rule := range tr.Spec.Rules {
                for _, backend := range rule.BackendRefs {
@@ -759,7 +758,7 @@ func TCPPRouteServiceIndexFunc(rawObj client.Object) 
[]string {
 }
 
 func UDPRouteServiceIndexFunc(rawObj client.Object) []string {
-       ur := rawObj.(*gatewayv1alpha2.UDPRoute)
+       ur := rawObj.(*gatewayv1.UDPRoute)
        keys := make([]string, 0, len(ur.Spec.Rules))
        for _, rule := range ur.Spec.Rules {
                for _, backend := range rule.BackendRefs {
diff --git a/internal/controller/indexer/tlsroute.go 
b/internal/controller/indexer/tlsroute.go
index acef5317..85c605a3 100644
--- a/internal/controller/indexer/tlsroute.go
+++ b/internal/controller/indexer/tlsroute.go
@@ -22,7 +22,7 @@ import (
 
        ctrl "sigs.k8s.io/controller-runtime"
        "sigs.k8s.io/controller-runtime/pkg/client"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+       gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
 
        internaltypes 
"github.com/apache/apisix-ingress-controller/internal/types"
 )
@@ -30,7 +30,7 @@ import (
 func setupTLSRouteIndexer(mgr ctrl.Manager) error {
        if err := mgr.GetFieldIndexer().IndexField(
                context.Background(),
-               &gatewayv1alpha2.TLSRoute{},
+               &gatewayv1.TLSRoute{},
                ParentRefs,
                TLSRouteParentRefsIndexFunc,
        ); err != nil {
@@ -39,7 +39,7 @@ func setupTLSRouteIndexer(mgr ctrl.Manager) error {
 
        if err := mgr.GetFieldIndexer().IndexField(
                context.Background(),
-               &gatewayv1alpha2.TLSRoute{},
+               &gatewayv1.TLSRoute{},
                ServiceIndexRef,
                TLSPRouteServiceIndexFunc,
        ); err != nil {
@@ -49,7 +49,7 @@ func setupTLSRouteIndexer(mgr ctrl.Manager) error {
 }
 
 func TLSRouteParentRefsIndexFunc(rawObj client.Object) []string {
-       tr := rawObj.(*gatewayv1alpha2.TLSRoute)
+       tr := rawObj.(*gatewayv1.TLSRoute)
        keys := make([]string, 0, len(tr.Spec.ParentRefs))
        for _, ref := range tr.Spec.ParentRefs {
                ns := tr.GetNamespace()
@@ -62,7 +62,7 @@ func TLSRouteParentRefsIndexFunc(rawObj client.Object) 
[]string {
 }
 
 func TLSPRouteServiceIndexFunc(rawObj client.Object) []string {
-       tr := rawObj.(*gatewayv1alpha2.TLSRoute)
+       tr := rawObj.(*gatewayv1.TLSRoute)
        keys := make([]string, 0, len(tr.Spec.Rules))
        for _, rule := range tr.Spec.Rules {
                for _, backend := range rule.BackendRefs {
diff --git a/internal/controller/policies.go b/internal/controller/policies.go
index 5f90fff6..d2152a5d 100644
--- a/internal/controller/policies.go
+++ b/internal/controller/policies.go
@@ -33,7 +33,6 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/event"
        "sigs.k8s.io/controller-runtime/pkg/predicate"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        "github.com/apache/apisix-ingress-controller/internal/controller/config"
@@ -200,7 +199,7 @@ func SetAncestors(status *v1alpha1.PolicyStatus, parentRefs 
[]gatewayv1.ParentRe
                ancestorStatus := gatewayv1.PolicyAncestorStatus{
                        AncestorRef:    parent,
                        Conditions:     []metav1.Condition{condition},
-                       ControllerName: 
gatewayv1alpha2.GatewayController(config.ControllerConfig.ControllerName),
+                       ControllerName: 
gatewayv1.GatewayController(config.ControllerConfig.ControllerName),
                }
                if SetAncestorStatus(status, ancestorStatus) {
                        updated = true
@@ -243,7 +242,7 @@ func l4RoutePolicyMatchesRoute(policy 
v1alpha1.L4RoutePolicy, routeKind, routeNa
                return false
        }
        for _, ref := range policy.Spec.TargetRefs {
-               if string(ref.Group) != gatewayv1alpha2.GroupName {
+               if string(ref.Group) != gatewayv1.GroupName {
                        continue
                }
                if string(ref.Kind) != routeKind {
@@ -270,7 +269,7 @@ func ProcessL4RoutePolicy(
        routeNamespace, routeName, routeKind string,
 ) {
        var list v1alpha1.L4RoutePolicyList
-       key := indexer.GenIndexKeyWithGK(gatewayv1alpha2.GroupName, routeKind, 
routeNamespace, routeName)
+       key := indexer.GenIndexKeyWithGK(gatewayv1.GroupName, routeKind, 
routeNamespace, routeName)
        if err := c.List(tctx, &list, 
client.MatchingFields{indexer.PolicyTargetRefs: key}); err != nil {
                log.Error(err, "failed to list L4RoutePolicy", "namespace", 
routeNamespace, "name", routeName, "kind", routeKind)
                return
@@ -349,7 +348,7 @@ func ProcessL4RoutePolicy(
 // no longer referenced by any of them are removed.
 func updateL4RoutePolicyStatusOnDeleting(ctx context.Context, c client.Client, 
updater status.Updater, log logr.Logger, nn types.NamespacedName, routeKind 
string) {
        var list v1alpha1.L4RoutePolicyList
-       key := indexer.GenIndexKeyWithGK(gatewayv1alpha2.GroupName, routeKind, 
nn.Namespace, nn.Name)
+       key := indexer.GenIndexKeyWithGK(gatewayv1.GroupName, routeKind, 
nn.Namespace, nn.Name)
        if err := c.List(ctx, &list, 
client.MatchingFields{indexer.PolicyTargetRefs: key}); err != nil {
                log.Error(err, "failed to list L4RoutePolicy on route 
deletion", "namespace", nn.Namespace, "name", nn.Name)
                return
@@ -358,7 +357,7 @@ func updateL4RoutePolicyStatusOnDeleting(ctx 
context.Context, c client.Client, u
                policy := list.Items[i]
                var parentRefs []gatewayv1.ParentReference
                for _, ref := range policy.Spec.TargetRefs {
-                       if string(ref.Group) != gatewayv1alpha2.GroupName {
+                       if string(ref.Group) != gatewayv1.GroupName {
                                continue
                        }
                        // The deleted route returns NotFound here and is 
naturally skipped.
@@ -377,19 +376,19 @@ func updateL4RoutePolicyStatusOnDeleting(ctx 
context.Context, c client.Client, u
 func l4RouteParentRefs(ctx context.Context, c client.Client, kind string, nn 
types.NamespacedName) ([]gatewayv1.ParentReference, bool) {
        switch kind {
        case internaltypes.KindTCPRoute:
-               var route gatewayv1alpha2.TCPRoute
+               var route gatewayv1.TCPRoute
                if err := c.Get(ctx, nn, &route); err != nil {
                        return nil, false
                }
                return route.Spec.ParentRefs, true
        case internaltypes.KindUDPRoute:
-               var route gatewayv1alpha2.UDPRoute
+               var route gatewayv1.UDPRoute
                if err := c.Get(ctx, nn, &route); err != nil {
                        return nil, false
                }
                return route.Spec.ParentRefs, true
        case internaltypes.KindTLSRoute:
-               var route gatewayv1alpha2.TLSRoute
+               var route gatewayv1.TLSRoute
                if err := c.Get(ctx, nn, &route); err != nil {
                        return nil, false
                }
diff --git a/internal/controller/tcproute_controller.go 
b/internal/controller/tcproute_controller.go
index b623d715..927244cb 100644
--- a/internal/controller/tcproute_controller.go
+++ b/internal/controller/tcproute_controller.go
@@ -35,8 +35,6 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/predicate"
        "sigs.k8s.io/controller-runtime/pkg/reconcile"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-       "sigs.k8s.io/gateway-api/apis/v1beta1"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        
"github.com/apache/apisix-ingress-controller/internal/controller/indexer"
@@ -68,7 +66,7 @@ type TCPRouteReconciler struct { //nolint:revive
 func (r *TCPRouteReconciler) SetupWithManager(mgr ctrl.Manager) error {
 
        bdr := ctrl.NewControllerManagedBy(mgr).
-               For(&gatewayv1alpha2.TCPRoute{}).
+               For(&gatewayv1.TCPRoute{}).
                WithEventFilter(predicate.GenerationChangedPredicate{}).
                Watches(&discoveryv1.EndpointSlice{},
                        
handler.EnqueueRequestsFromMapFunc(r.listTCPRoutesByServiceRef),
@@ -113,7 +111,7 @@ func (r *TCPRouteReconciler) SetupWithManager(mgr 
ctrl.Manager) error {
        }
 
        if GetEnableReferenceGrant() {
-               bdr.Watches(&v1beta1.ReferenceGrant{},
+               bdr.Watches(&gatewayv1.ReferenceGrant{},
                        
handler.EnqueueRequestsFromMapFunc(r.listTCPRoutesForReferenceGrant),
                        
builder.WithPredicates(referenceGrantPredicates(KindTCPRoute)),
                )
@@ -129,7 +127,7 @@ func (r *TCPRouteReconciler) 
listTCPRoutesForBackendTrafficPolicy(ctx context.Co
                return nil
        }
 
-       tcprouteList := []gatewayv1alpha2.TCPRoute{}
+       tcprouteList := []gatewayv1.TCPRoute{}
        for _, targetRef := range policy.Spec.TargetRefs {
                service := &corev1.Service{}
                if err := r.Get(ctx, client.ObjectKey{
@@ -141,7 +139,7 @@ func (r *TCPRouteReconciler) 
listTCPRoutesForBackendTrafficPolicy(ctx context.Co
                        }
                        continue
                }
-               tcprList := &gatewayv1alpha2.TCPRouteList{}
+               tcprList := &gatewayv1.TCPRouteList{}
                if err := r.List(ctx, tcprList, client.MatchingFields{
                        indexer.ServiceIndexRef: 
indexer.GenIndexKey(policy.Namespace, string(targetRef.Name)),
                }); err != nil {
@@ -175,7 +173,7 @@ func (r *TCPRouteReconciler) listTCPRoutesForGateway(ctx 
context.Context, obj cl
        if !ok {
                r.Log.Error(fmt.Errorf("unexpected object type"), "failed to 
convert object to Gateway")
        }
-       tcprList := &gatewayv1alpha2.TCPRouteList{}
+       tcprList := &gatewayv1.TCPRouteList{}
        if err := r.List(ctx, tcprList, client.MatchingFields{
                indexer.ParentRefs: indexer.GenIndexKey(gateway.Namespace, 
gateway.Name),
        }); err != nil {
@@ -219,7 +217,7 @@ func (r *TCPRouteReconciler) 
listTCPRoutesForGatewayProxy(ctx context.Context, o
 
        // for each gateway, find all TCPRoute resources that reference it
        for _, gateway := range gatewayList.Items {
-               tcpRouteList := &gatewayv1alpha2.TCPRouteList{}
+               tcpRouteList := &gatewayv1.TCPRouteList{}
                if err := r.List(ctx, tcpRouteList, client.MatchingFields{
                        indexer.ParentRefs: 
indexer.GenIndexKey(gateway.Namespace, gateway.Name),
                }); err != nil {
@@ -241,8 +239,8 @@ func (r *TCPRouteReconciler) 
listTCPRoutesForGatewayProxy(ctx context.Context, o
 }
 
 func (r *TCPRouteReconciler) Reconcile(ctx context.Context, req ctrl.Request) 
(ctrl.Result, error) {
-       defer r.Readier.Done(&gatewayv1alpha2.TCPRoute{}, req.NamespacedName)
-       tr := new(gatewayv1alpha2.TCPRoute)
+       defer r.Readier.Done(&gatewayv1.TCPRoute{}, req.NamespacedName)
+       tr := new(gatewayv1.TCPRoute)
        if err := r.Get(ctx, req.NamespacedName, tr); err != nil {
                if client.IgnoreNotFound(err) == nil {
                        tr.Namespace = req.Namespace
@@ -250,7 +248,7 @@ func (r *TCPRouteReconciler) Reconcile(ctx context.Context, 
req ctrl.Request) (c
 
                        tr.TypeMeta = metav1.TypeMeta{
                                Kind:       KindTCPRoute,
-                               APIVersion: 
gatewayv1alpha2.GroupVersion.String(),
+                               APIVersion: gatewayv1.GroupVersion.String(),
                        }
 
                        if err := r.Provider.Delete(ctx, tr); err != nil {
@@ -339,9 +337,9 @@ func (r *TCPRouteReconciler) Reconcile(ctx context.Context, 
req ctrl.Request) (c
 
        r.Updater.Update(status.Update{
                NamespacedName: utils.NamespacedName(tr),
-               Resource:       &gatewayv1alpha2.TCPRoute{},
+               Resource:       &gatewayv1.TCPRoute{},
                Mutator: status.MutatorFunc(func(obj client.Object) 
client.Object {
-                       t, ok := obj.(*gatewayv1alpha2.TCPRoute)
+                       t, ok := obj.(*gatewayv1.TCPRoute)
                        if !ok {
                                err := fmt.Errorf("unsupported object type %T", 
obj)
                                panic(err)
@@ -361,7 +359,7 @@ func (r *TCPRouteReconciler) Reconcile(ctx context.Context, 
req ctrl.Request) (c
        return ctrl.Result{}, nil
 }
 
-func (r *TCPRouteReconciler) processTCPRoute(tctx *provider.TranslateContext, 
tcpRoute *gatewayv1alpha2.TCPRoute) error {
+func (r *TCPRouteReconciler) processTCPRoute(tctx *provider.TranslateContext, 
tcpRoute *gatewayv1.TCPRoute) error {
        var terror error
        for _, rule := range tcpRoute.Spec.Rules {
                for _, backend := range rule.BackendRefs {
@@ -419,10 +417,10 @@ func (r *TCPRouteReconciler) 
processTCPRouteBackendRefs(tctx *provider.Translate
                if trNN.Namespace != targetNN.Namespace {
                        if permitted := checkReferenceGrant(tctx,
                                r.Client,
-                               v1beta1.ReferenceGrantFrom{
+                               gatewayv1.ReferenceGrantFrom{
                                        Group:     gatewayv1.GroupName,
                                        Kind:      KindTCPRoute,
-                                       Namespace: 
v1beta1.Namespace(trNN.Namespace),
+                                       Namespace: 
gatewayv1.Namespace(trNN.Namespace),
                                },
                                gatewayv1.ObjectReference{
                                        Group:     corev1.GroupName,
@@ -432,7 +430,7 @@ func (r *TCPRouteReconciler) 
processTCPRouteBackendRefs(tctx *provider.Translate
                                },
                        ); !permitted {
                                terr = types.ReasonError{
-                                       Reason:  
string(v1beta1.RouteReasonRefNotPermitted),
+                                       Reason:  
string(gatewayv1.RouteReasonRefNotPermitted),
                                        Message: fmt.Sprintf("%s is in a 
different namespace than the TCPRoute %s and no ReferenceGrant allowing 
reference is configured", targetNN, trNN),
                                }
                                continue
@@ -475,23 +473,23 @@ func (r *TCPRouteReconciler) 
processTCPRouteBackendRefs(tctx *provider.Translate
 }
 
 func (r *TCPRouteReconciler) listTCPRoutesForReferenceGrant(ctx 
context.Context, obj client.Object) (requests []reconcile.Request) {
-       grant, ok := obj.(*v1beta1.ReferenceGrant)
+       grant, ok := obj.(*gatewayv1.ReferenceGrant)
        if !ok {
                r.Log.Error(fmt.Errorf("unexpected object type"), "failed to 
convert object to ReferenceGrant")
                return nil
        }
 
-       var tcpRouteList gatewayv1alpha2.TCPRouteList
+       var tcpRouteList gatewayv1.TCPRouteList
        if err := r.List(ctx, &tcpRouteList); err != nil {
                r.Log.Error(err, "failed to list tcproutes for reference 
ReferenceGrant", "ReferenceGrant", k8stypes.NamespacedName{Namespace: 
obj.GetNamespace(), Name: obj.GetName()})
                return nil
        }
 
        for _, tcpRoute := range tcpRouteList.Items {
-               tr := v1beta1.ReferenceGrantFrom{
+               tr := gatewayv1.ReferenceGrantFrom{
                        Group:     gatewayv1.GroupName,
                        Kind:      KindTCPRoute,
-                       Namespace: v1beta1.Namespace(tcpRoute.GetNamespace()),
+                       Namespace: gatewayv1.Namespace(tcpRoute.GetNamespace()),
                }
                for _, from := range grant.Spec.From {
                        if from == tr {
@@ -516,7 +514,7 @@ func (r *TCPRouteReconciler) listTCPRoutesByServiceRef(ctx 
context.Context, obj
        namespace := endpointSlice.GetNamespace()
        serviceName := endpointSlice.Labels[discoveryv1.LabelServiceName]
 
-       trList := &gatewayv1alpha2.TCPRouteList{}
+       trList := &gatewayv1.TCPRouteList{}
        if err := r.List(ctx, trList, client.MatchingFields{
                indexer.ServiceIndexRef: indexer.GenIndexKey(namespace, 
serviceName),
        }); err != nil {
diff --git a/internal/controller/tlsroute_controller.go 
b/internal/controller/tlsroute_controller.go
index edb7381f..e2d62453 100644
--- a/internal/controller/tlsroute_controller.go
+++ b/internal/controller/tlsroute_controller.go
@@ -35,8 +35,6 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/predicate"
        "sigs.k8s.io/controller-runtime/pkg/reconcile"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-       "sigs.k8s.io/gateway-api/apis/v1beta1"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        
"github.com/apache/apisix-ingress-controller/internal/controller/indexer"
@@ -68,7 +66,7 @@ type TLSRouteReconciler struct { //nolint:revive
 func (r *TLSRouteReconciler) SetupWithManager(mgr ctrl.Manager) error {
 
        bdr := ctrl.NewControllerManagedBy(mgr).
-               For(&gatewayv1alpha2.TLSRoute{}).
+               For(&gatewayv1.TLSRoute{}).
                WithEventFilter(predicate.GenerationChangedPredicate{}).
                Watches(&discoveryv1.EndpointSlice{},
                        
handler.EnqueueRequestsFromMapFunc(r.listTLSRoutesByServiceRef),
@@ -113,7 +111,7 @@ func (r *TLSRouteReconciler) SetupWithManager(mgr 
ctrl.Manager) error {
        }
 
        if GetEnableReferenceGrant() {
-               bdr.Watches(&v1beta1.ReferenceGrant{},
+               bdr.Watches(&gatewayv1.ReferenceGrant{},
                        
handler.EnqueueRequestsFromMapFunc(r.listTLSRoutesForReferenceGrant),
                        
builder.WithPredicates(referenceGrantPredicates(types.KindTLSRoute)),
                )
@@ -129,7 +127,7 @@ func (r *TLSRouteReconciler) 
listTLSRoutesForBackendTrafficPolicy(ctx context.Co
                return nil
        }
 
-       tlsrouteList := []gatewayv1alpha2.TLSRoute{}
+       tlsrouteList := []gatewayv1.TLSRoute{}
        for _, targetRef := range policy.Spec.TargetRefs {
                service := &corev1.Service{}
                if err := r.Get(ctx, client.ObjectKey{
@@ -141,7 +139,7 @@ func (r *TLSRouteReconciler) 
listTLSRoutesForBackendTrafficPolicy(ctx context.Co
                        }
                        continue
                }
-               trList := &gatewayv1alpha2.TLSRouteList{}
+               trList := &gatewayv1.TLSRouteList{}
                if err := r.List(ctx, trList, client.MatchingFields{
                        indexer.ServiceIndexRef: 
indexer.GenIndexKey(policy.Namespace, string(targetRef.Name)),
                }); err != nil {
@@ -175,7 +173,7 @@ func (r *TLSRouteReconciler) listTLSRoutesForGateway(ctx 
context.Context, obj cl
        if !ok {
                r.Log.Error(fmt.Errorf("unexpected object type"), "failed to 
convert object to Gateway")
        }
-       trList := &gatewayv1alpha2.TLSRouteList{}
+       trList := &gatewayv1.TLSRouteList{}
        if err := r.List(ctx, trList, client.MatchingFields{
                indexer.ParentRefs: indexer.GenIndexKey(gateway.Namespace, 
gateway.Name),
        }); err != nil {
@@ -219,7 +217,7 @@ func (r *TLSRouteReconciler) 
listTLSRoutesForGatewayProxy(ctx context.Context, o
 
        // for each gateway, find all TLSRoute resources that reference it
        for _, gateway := range gatewayList.Items {
-               tlsRouteList := &gatewayv1alpha2.TLSRouteList{}
+               tlsRouteList := &gatewayv1.TLSRouteList{}
                if err := r.List(ctx, tlsRouteList, client.MatchingFields{
                        indexer.ParentRefs: 
indexer.GenIndexKey(gateway.Namespace, gateway.Name),
                }); err != nil {
@@ -241,8 +239,8 @@ func (r *TLSRouteReconciler) 
listTLSRoutesForGatewayProxy(ctx context.Context, o
 }
 
 func (r *TLSRouteReconciler) Reconcile(ctx context.Context, req ctrl.Request) 
(ctrl.Result, error) {
-       defer r.Readier.Done(&gatewayv1alpha2.TLSRoute{}, req.NamespacedName)
-       tr := new(gatewayv1alpha2.TLSRoute)
+       defer r.Readier.Done(&gatewayv1.TLSRoute{}, req.NamespacedName)
+       tr := new(gatewayv1.TLSRoute)
        if err := r.Get(ctx, req.NamespacedName, tr); err != nil {
                if client.IgnoreNotFound(err) == nil {
                        tr.Namespace = req.Namespace
@@ -250,7 +248,7 @@ func (r *TLSRouteReconciler) Reconcile(ctx context.Context, 
req ctrl.Request) (c
 
                        tr.TypeMeta = metav1.TypeMeta{
                                Kind:       types.KindTLSRoute,
-                               APIVersion: 
gatewayv1alpha2.GroupVersion.String(),
+                               APIVersion: gatewayv1.GroupVersion.String(),
                        }
 
                        if err := r.Provider.Delete(ctx, tr); err != nil {
@@ -331,9 +329,9 @@ func (r *TLSRouteReconciler) Reconcile(ctx context.Context, 
req ctrl.Request) (c
 
        r.Updater.Update(status.Update{
                NamespacedName: utils.NamespacedName(tr),
-               Resource:       &gatewayv1alpha2.TLSRoute{},
+               Resource:       &gatewayv1.TLSRoute{},
                Mutator: status.MutatorFunc(func(obj client.Object) 
client.Object {
-                       t, ok := obj.(*gatewayv1alpha2.TLSRoute)
+                       t, ok := obj.(*gatewayv1.TLSRoute)
                        if !ok {
                                err := fmt.Errorf("unsupported object type %T", 
obj)
                                panic(err)
@@ -353,7 +351,7 @@ func (r *TLSRouteReconciler) Reconcile(ctx context.Context, 
req ctrl.Request) (c
        return ctrl.Result{}, nil
 }
 
-func (r *TLSRouteReconciler) processTLSRoute(tctx *provider.TranslateContext, 
tlsRoute *gatewayv1alpha2.TLSRoute) error {
+func (r *TLSRouteReconciler) processTLSRoute(tctx *provider.TranslateContext, 
tlsRoute *gatewayv1.TLSRoute) error {
        var terror error
        for _, rule := range tlsRoute.Spec.Rules {
                for _, backend := range rule.BackendRefs {
@@ -411,10 +409,10 @@ func (r *TLSRouteReconciler) 
processTLSRouteBackendRefs(tctx *provider.Translate
                if trNN.Namespace != targetNN.Namespace {
                        if permitted := checkReferenceGrant(tctx,
                                r.Client,
-                               v1beta1.ReferenceGrantFrom{
+                               gatewayv1.ReferenceGrantFrom{
                                        Group:     gatewayv1.GroupName,
                                        Kind:      types.KindTLSRoute,
-                                       Namespace: 
v1beta1.Namespace(trNN.Namespace),
+                                       Namespace: 
gatewayv1.Namespace(trNN.Namespace),
                                },
                                gatewayv1.ObjectReference{
                                        Group:     corev1.GroupName,
@@ -424,7 +422,7 @@ func (r *TLSRouteReconciler) 
processTLSRouteBackendRefs(tctx *provider.Translate
                                },
                        ); !permitted {
                                terr = types.ReasonError{
-                                       Reason:  
string(v1beta1.RouteReasonRefNotPermitted),
+                                       Reason:  
string(gatewayv1.RouteReasonRefNotPermitted),
                                        Message: fmt.Sprintf("%s is in a 
different namespace than the TLSRoute %s and no ReferenceGrant allowing 
reference is configured", targetNN, trNN),
                                }
                                continue
@@ -467,23 +465,23 @@ func (r *TLSRouteReconciler) 
processTLSRouteBackendRefs(tctx *provider.Translate
 }
 
 func (r *TLSRouteReconciler) listTLSRoutesForReferenceGrant(ctx 
context.Context, obj client.Object) (requests []reconcile.Request) {
-       grant, ok := obj.(*v1beta1.ReferenceGrant)
+       grant, ok := obj.(*gatewayv1.ReferenceGrant)
        if !ok {
                r.Log.Error(fmt.Errorf("unexpected object type"), "failed to 
convert object to ReferenceGrant")
                return nil
        }
 
-       var tlsRouteList gatewayv1alpha2.TLSRouteList
+       var tlsRouteList gatewayv1.TLSRouteList
        if err := r.List(ctx, &tlsRouteList); err != nil {
                r.Log.Error(err, "failed to list tlsroutes for reference 
ReferenceGrant", "ReferenceGrant", k8stypes.NamespacedName{Namespace: 
obj.GetNamespace(), Name: obj.GetName()})
                return nil
        }
 
        for _, tlsRoute := range tlsRouteList.Items {
-               tr := v1beta1.ReferenceGrantFrom{
+               tr := gatewayv1.ReferenceGrantFrom{
                        Group:     gatewayv1.GroupName,
                        Kind:      types.KindTLSRoute,
-                       Namespace: v1beta1.Namespace(tlsRoute.GetNamespace()),
+                       Namespace: gatewayv1.Namespace(tlsRoute.GetNamespace()),
                }
                for _, from := range grant.Spec.From {
                        if from == tr {
@@ -508,7 +506,7 @@ func (r *TLSRouteReconciler) listTLSRoutesByServiceRef(ctx 
context.Context, obj
        namespace := endpointSlice.GetNamespace()
        serviceName := endpointSlice.Labels[discoveryv1.LabelServiceName]
 
-       trList := &gatewayv1alpha2.TLSRouteList{}
+       trList := &gatewayv1.TLSRouteList{}
        if err := r.List(ctx, trList, client.MatchingFields{
                indexer.ServiceIndexRef: indexer.GenIndexKey(namespace, 
serviceName),
        }); err != nil {
diff --git a/internal/controller/udproute_controller.go 
b/internal/controller/udproute_controller.go
index c2ba1ad1..ffb43644 100644
--- a/internal/controller/udproute_controller.go
+++ b/internal/controller/udproute_controller.go
@@ -35,8 +35,6 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/predicate"
        "sigs.k8s.io/controller-runtime/pkg/reconcile"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-       "sigs.k8s.io/gateway-api/apis/v1beta1"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        
"github.com/apache/apisix-ingress-controller/internal/controller/indexer"
@@ -68,7 +66,7 @@ type UDPRouteReconciler struct { //nolint:revive
 func (r *UDPRouteReconciler) SetupWithManager(mgr ctrl.Manager) error {
 
        bdr := ctrl.NewControllerManagedBy(mgr).
-               For(&gatewayv1alpha2.UDPRoute{}).
+               For(&gatewayv1.UDPRoute{}).
                WithEventFilter(predicate.GenerationChangedPredicate{}).
                Watches(&discoveryv1.EndpointSlice{},
                        
handler.EnqueueRequestsFromMapFunc(r.listUDPRoutesByServiceRef),
@@ -113,7 +111,7 @@ func (r *UDPRouteReconciler) SetupWithManager(mgr 
ctrl.Manager) error {
        }
 
        if GetEnableReferenceGrant() {
-               bdr.Watches(&v1beta1.ReferenceGrant{},
+               bdr.Watches(&gatewayv1.ReferenceGrant{},
                        
handler.EnqueueRequestsFromMapFunc(r.listUDPRoutesForReferenceGrant),
                        
builder.WithPredicates(referenceGrantPredicates(KindUDPRoute)),
                )
@@ -129,7 +127,7 @@ func (r *UDPRouteReconciler) 
listUDPRoutesForBackendTrafficPolicy(ctx context.Co
                return nil
        }
 
-       udprouteList := []gatewayv1alpha2.UDPRoute{}
+       udprouteList := []gatewayv1.UDPRoute{}
        for _, targetRef := range policy.Spec.TargetRefs {
                service := &corev1.Service{}
                if err := r.Get(ctx, client.ObjectKey{
@@ -141,7 +139,7 @@ func (r *UDPRouteReconciler) 
listUDPRoutesForBackendTrafficPolicy(ctx context.Co
                        }
                        continue
                }
-               udprList := &gatewayv1alpha2.UDPRouteList{}
+               udprList := &gatewayv1.UDPRouteList{}
                if err := r.List(ctx, udprList, client.MatchingFields{
                        indexer.ServiceIndexRef: 
indexer.GenIndexKey(policy.Namespace, string(targetRef.Name)),
                }); err != nil {
@@ -175,7 +173,7 @@ func (r *UDPRouteReconciler) listUDPRoutesForGateway(ctx 
context.Context, obj cl
        if !ok {
                r.Log.Error(fmt.Errorf("unexpected object type"), "failed to 
convert object to Gateway")
        }
-       udprList := &gatewayv1alpha2.UDPRouteList{}
+       udprList := &gatewayv1.UDPRouteList{}
        if err := r.List(ctx, udprList, client.MatchingFields{
                indexer.ParentRefs: indexer.GenIndexKey(gateway.Namespace, 
gateway.Name),
        }); err != nil {
@@ -219,7 +217,7 @@ func (r *UDPRouteReconciler) 
listUDPRoutesForGatewayProxy(ctx context.Context, o
 
        // for each gateway, find all UDPRoute resources that reference it
        for _, gateway := range gatewayList.Items {
-               udpRouteList := &gatewayv1alpha2.UDPRouteList{}
+               udpRouteList := &gatewayv1.UDPRouteList{}
                if err := r.List(ctx, udpRouteList, client.MatchingFields{
                        indexer.ParentRefs: 
indexer.GenIndexKey(gateway.Namespace, gateway.Name),
                }); err != nil {
@@ -241,8 +239,8 @@ func (r *UDPRouteReconciler) 
listUDPRoutesForGatewayProxy(ctx context.Context, o
 }
 
 func (r *UDPRouteReconciler) Reconcile(ctx context.Context, req ctrl.Request) 
(ctrl.Result, error) {
-       defer r.Readier.Done(&gatewayv1alpha2.UDPRoute{}, req.NamespacedName)
-       tr := new(gatewayv1alpha2.UDPRoute)
+       defer r.Readier.Done(&gatewayv1.UDPRoute{}, req.NamespacedName)
+       tr := new(gatewayv1.UDPRoute)
        if err := r.Get(ctx, req.NamespacedName, tr); err != nil {
                if client.IgnoreNotFound(err) == nil {
                        tr.Namespace = req.Namespace
@@ -250,7 +248,7 @@ func (r *UDPRouteReconciler) Reconcile(ctx context.Context, 
req ctrl.Request) (c
 
                        tr.TypeMeta = metav1.TypeMeta{
                                Kind:       KindUDPRoute,
-                               APIVersion: 
gatewayv1alpha2.GroupVersion.String(),
+                               APIVersion: gatewayv1.GroupVersion.String(),
                        }
 
                        if err := r.Provider.Delete(ctx, tr); err != nil {
@@ -339,9 +337,9 @@ func (r *UDPRouteReconciler) Reconcile(ctx context.Context, 
req ctrl.Request) (c
 
        r.Updater.Update(status.Update{
                NamespacedName: utils.NamespacedName(tr),
-               Resource:       &gatewayv1alpha2.UDPRoute{},
+               Resource:       &gatewayv1.UDPRoute{},
                Mutator: status.MutatorFunc(func(obj client.Object) 
client.Object {
-                       t, ok := obj.(*gatewayv1alpha2.UDPRoute)
+                       t, ok := obj.(*gatewayv1.UDPRoute)
                        if !ok {
                                err := fmt.Errorf("unsupported object type %T", 
obj)
                                panic(err)
@@ -361,7 +359,7 @@ func (r *UDPRouteReconciler) Reconcile(ctx context.Context, 
req ctrl.Request) (c
        return ctrl.Result{}, nil
 }
 
-func (r *UDPRouteReconciler) processUDPRoute(tctx *provider.TranslateContext, 
udpRoute *gatewayv1alpha2.UDPRoute) error {
+func (r *UDPRouteReconciler) processUDPRoute(tctx *provider.TranslateContext, 
udpRoute *gatewayv1.UDPRoute) error {
        var terror error
        for _, rule := range udpRoute.Spec.Rules {
                for _, backend := range rule.BackendRefs {
@@ -419,10 +417,10 @@ func (r *UDPRouteReconciler) 
processUDPRouteBackendRefs(tctx *provider.Translate
                if trNN.Namespace != targetNN.Namespace {
                        if permitted := checkReferenceGrant(tctx,
                                r.Client,
-                               v1beta1.ReferenceGrantFrom{
+                               gatewayv1.ReferenceGrantFrom{
                                        Group:     gatewayv1.GroupName,
                                        Kind:      KindUDPRoute,
-                                       Namespace: 
v1beta1.Namespace(trNN.Namespace),
+                                       Namespace: 
gatewayv1.Namespace(trNN.Namespace),
                                },
                                gatewayv1.ObjectReference{
                                        Group:     corev1.GroupName,
@@ -432,7 +430,7 @@ func (r *UDPRouteReconciler) 
processUDPRouteBackendRefs(tctx *provider.Translate
                                },
                        ); !permitted {
                                terr = types.ReasonError{
-                                       Reason:  
string(v1beta1.RouteReasonRefNotPermitted),
+                                       Reason:  
string(gatewayv1.RouteReasonRefNotPermitted),
                                        Message: fmt.Sprintf("%s is in a 
different namespace than the UDPRoute %s and no ReferenceGrant allowing 
reference is configured", targetNN, trNN),
                                }
                                continue
@@ -475,23 +473,23 @@ func (r *UDPRouteReconciler) 
processUDPRouteBackendRefs(tctx *provider.Translate
 }
 
 func (r *UDPRouteReconciler) listUDPRoutesForReferenceGrant(ctx 
context.Context, obj client.Object) (requests []reconcile.Request) {
-       grant, ok := obj.(*v1beta1.ReferenceGrant)
+       grant, ok := obj.(*gatewayv1.ReferenceGrant)
        if !ok {
                r.Log.Error(fmt.Errorf("unexpected object type"), "failed to 
convert object to ReferenceGrant")
                return nil
        }
 
-       var udpRouteList gatewayv1alpha2.UDPRouteList
+       var udpRouteList gatewayv1.UDPRouteList
        if err := r.List(ctx, &udpRouteList); err != nil {
                r.Log.Error(err, "failed to list udproutes for reference 
ReferenceGrant", "ReferenceGrant", k8stypes.NamespacedName{Namespace: 
obj.GetNamespace(), Name: obj.GetName()})
                return nil
        }
 
        for _, udpRoute := range udpRouteList.Items {
-               tr := v1beta1.ReferenceGrantFrom{
+               tr := gatewayv1.ReferenceGrantFrom{
                        Group:     gatewayv1.GroupName,
                        Kind:      KindUDPRoute,
-                       Namespace: v1beta1.Namespace(udpRoute.GetNamespace()),
+                       Namespace: gatewayv1.Namespace(udpRoute.GetNamespace()),
                }
                for _, from := range grant.Spec.From {
                        if from == tr {
@@ -516,7 +514,7 @@ func (r *UDPRouteReconciler) listUDPRoutesByServiceRef(ctx 
context.Context, obj
        namespace := endpointSlice.GetNamespace()
        serviceName := endpointSlice.Labels[discoveryv1.LabelServiceName]
 
-       trList := &gatewayv1alpha2.UDPRouteList{}
+       trList := &gatewayv1.UDPRouteList{}
        if err := r.List(ctx, trList, client.MatchingFields{
                indexer.ServiceIndexRef: indexer.GenIndexKey(namespace, 
serviceName),
        }); err != nil {
diff --git a/internal/controller/utils.go b/internal/controller/utils.go
index 6c89ef4a..87ad338a 100644
--- a/internal/controller/utils.go
+++ b/internal/controller/utils.go
@@ -43,8 +43,6 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/predicate"
        "sigs.k8s.io/controller-runtime/pkg/reconcile"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-       "sigs.k8s.io/gateway-api/apis/v1beta1"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
@@ -651,11 +649,11 @@ func routeHostnamesIntersectsWithListenerHostname(route 
client.Object, listener
        switch r := route.(type) {
        case *gatewayv1.HTTPRoute:
                return listenerHostnameIntersectWithRouteHostnames(listener, 
r.Spec.Hostnames)
-       case *gatewayv1alpha2.TCPRoute, *gatewayv1alpha2.UDPRoute:
+       case *gatewayv1.TCPRoute, *gatewayv1.UDPRoute:
                return true // TCPRoute and UDPRoute don't have Hostnames to 
match
        case *gatewayv1.GRPCRoute:
                return listenerHostnameIntersectWithRouteHostnames(listener, 
r.Spec.Hostnames)
-       case *gatewayv1alpha2.TLSRoute:
+       case *gatewayv1.TLSRoute:
                return listenerHostnameIntersectWithRouteHostnames(listener, 
r.Spec.Hostnames)
        default:
                return false
@@ -821,15 +819,15 @@ func routeMatchesListenerType(route client.Object, 
listener gatewayv1.Listener)
                                return false, nil
                        }
                }
-       case *gatewayv1alpha2.TCPRoute:
+       case *gatewayv1.TCPRoute:
                if listener.Protocol != gatewayv1.TCPProtocolType {
                        return false, nil
                }
-       case *gatewayv1alpha2.UDPRoute:
+       case *gatewayv1.UDPRoute:
                if listener.Protocol != gatewayv1.UDPProtocolType {
                        return false, nil
                }
-       case *gatewayv1alpha2.TLSRoute:
+       case *gatewayv1.TLSRoute:
                if listener.Protocol != gatewayv1.TLSProtocolType {
                        return false, nil
                }
@@ -863,11 +861,11 @@ func getAttachedRoutesForListener(ctx context.Context, 
mgrc client.Client, gatew
                        case types.KindGRPCRoute:
                                routeList = append(routeList, 
&gatewayv1.GRPCRouteList{})
                        case types.KindTCPRoute:
-                               routeList = append(routeList, 
&gatewayv1alpha2.TCPRouteList{})
+                               routeList = append(routeList, 
&gatewayv1.TCPRouteList{})
                        case types.KindUDPRoute:
-                               routeList = append(routeList, 
&gatewayv1alpha2.UDPRouteList{})
+                               routeList = append(routeList, 
&gatewayv1.UDPRouteList{})
                        case types.KindTLSRoute:
-                               routeList = append(routeList, 
&gatewayv1alpha2.TLSRouteList{})
+                               routeList = append(routeList, 
&gatewayv1.TLSRouteList{})
                        }
                }
        } else {
@@ -875,11 +873,11 @@ func getAttachedRoutesForListener(ctx context.Context, 
mgrc client.Client, gatew
                case gatewayv1.HTTPProtocolType, gatewayv1.HTTPSProtocolType:
                        routeList = append(routeList, 
&gatewayv1.HTTPRouteList{}, &gatewayv1.GRPCRouteList{})
                case gatewayv1.TCPProtocolType:
-                       routeList = append(routeList, 
&gatewayv1alpha2.TCPRouteList{})
+                       routeList = append(routeList, &gatewayv1.TCPRouteList{})
                case gatewayv1.UDPProtocolType:
-                       routeList = append(routeList, 
&gatewayv1alpha2.UDPRouteList{})
+                       routeList = append(routeList, &gatewayv1.UDPRouteList{})
                case gatewayv1.TLSProtocolType:
-                       routeList = append(routeList, 
&gatewayv1alpha2.TLSRouteList{})
+                       routeList = append(routeList, &gatewayv1.TLSRouteList{})
                }
        }
 
@@ -1052,10 +1050,10 @@ func getListenerStatus(
                                }
                                if permitted := checkReferenceGrant(ctx,
                                        mrgc,
-                                       v1beta1.ReferenceGrantFrom{
+                                       gatewayv1.ReferenceGrantFrom{
                                                Group:     gatewayv1.GroupName,
                                                Kind:      KindGateway,
-                                               Namespace: 
v1beta1.Namespace(gateway.Namespace),
+                                               Namespace: 
gatewayv1.Namespace(gateway.Namespace),
                                        },
                                        gatewayv1.ObjectReference{
                                                Group:     corev1.GroupName,
@@ -1173,10 +1171,10 @@ func validateListenerFrontendValidation(
                }
                if permitted := checkReferenceGrant(ctx,
                        mrgc,
-                       v1beta1.ReferenceGrantFrom{
+                       gatewayv1.ReferenceGrantFrom{
                                Group:     gatewayv1.GroupName,
                                Kind:      KindGateway,
-                               Namespace: v1beta1.Namespace(gateway.Namespace),
+                               Namespace: 
gatewayv1.Namespace(gateway.Namespace),
                        },
                        gatewayv1.ObjectReference{
                                Group:     corev1.GroupName,
@@ -1460,7 +1458,7 @@ func isTLSSecretValid(secret *corev1.Secret) (string, 
bool) {
 
 func referenceGrantPredicates(kind gatewayv1.Kind) predicate.Funcs {
        var filter = func(obj client.Object) bool {
-               grant, ok := obj.(*v1beta1.ReferenceGrant)
+               grant, ok := obj.(*gatewayv1.ReferenceGrant)
                if !ok {
                        return false
                }
@@ -1478,7 +1476,7 @@ func referenceGrantPredicates(kind gatewayv1.Kind) 
predicate.Funcs {
        return predicates
 }
 
-func checkReferenceGrant(ctx context.Context, cli client.Client, obj 
v1beta1.ReferenceGrantFrom, ref gatewayv1.ObjectReference) bool {
+func checkReferenceGrant(ctx context.Context, cli client.Client, obj 
gatewayv1.ReferenceGrantFrom, ref gatewayv1.ObjectReference) bool {
        if ref.Namespace == nil || *ref.Namespace == obj.Namespace {
                return true
        }
@@ -1487,7 +1485,7 @@ func checkReferenceGrant(ctx context.Context, cli 
client.Client, obj v1beta1.Ref
                return false
        }
 
-       var grantList v1beta1.ReferenceGrantList
+       var grantList gatewayv1.ReferenceGrantList
        if err := cli.List(ctx, &grantList, 
client.InNamespace(*ref.Namespace)); err != nil {
                return false
        }
@@ -1521,15 +1519,15 @@ func CheckConsumerSecretRef(ctx context.Context, cli 
client.Client, fromNamespac
                return false, nil
        }
 
-       var grantList v1beta1.ReferenceGrantList
+       var grantList gatewayv1.ReferenceGrantList
        if err := cli.List(ctx, &grantList, 
client.InNamespace(secretNN.Namespace)); err != nil {
                return false, err
        }
 
-       from := v1beta1.ReferenceGrantFrom{
-               Group:     v1beta1.Group(v1alpha1.GroupVersion.Group),
+       from := gatewayv1.ReferenceGrantFrom{
+               Group:     gatewayv1.Group(v1alpha1.GroupVersion.Group),
                Kind:      types.KindConsumer,
-               Namespace: v1beta1.Namespace(fromNamespace),
+               Namespace: gatewayv1.Namespace(fromNamespace),
        }
        for _, grant := range grantList.Items {
                for _, f := range grant.Spec.From {
diff --git a/internal/controller/utils_listenerstatus_test.go 
b/internal/controller/utils_listenerstatus_test.go
index 5b3d8fa1..7033ebcf 100644
--- a/internal/controller/utils_listenerstatus_test.go
+++ b/internal/controller/utils_listenerstatus_test.go
@@ -28,7 +28,6 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/client"
        "sigs.k8s.io/controller-runtime/pkg/client/fake"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        
"github.com/apache/apisix-ingress-controller/internal/controller/indexer"
 )
@@ -84,7 +83,7 @@ func TestGetListenerStatus_Conflicted(t *testing.T) {
                                WithObjects(newParentRefGatewayClass(), gw).
                                // Counting attached routes goes through the 
parentRefs index; no
                                // route exists here, only the index has to be 
known.
-                               WithIndex(&gatewayv1alpha2.TLSRoute{}, 
indexer.ParentRefs,
+                               WithIndex(&gatewayv1.TLSRoute{}, 
indexer.ParentRefs,
                                        func(client.Object) []string { return 
nil }).
                                Build()
 
diff --git a/internal/controller/utils_parentref_test.go 
b/internal/controller/utils_parentref_test.go
index 9a66b49f..1e74f0ce 100644
--- a/internal/controller/utils_parentref_test.go
+++ b/internal/controller/utils_parentref_test.go
@@ -29,7 +29,6 @@ import (
        "k8s.io/utils/ptr"
        "sigs.k8s.io/controller-runtime/pkg/client/fake"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        "github.com/apache/apisix-ingress-controller/internal/controller/config"
 )
@@ -38,7 +37,7 @@ func parentRefTestScheme(t *testing.T) *runtime.Scheme {
        t.Helper()
        scheme := runtime.NewScheme()
        require.NoError(t, gatewayv1.Install(scheme))
-       require.NoError(t, gatewayv1alpha2.Install(scheme))
+       require.NoError(t, gatewayv1.Install(scheme))
        return scheme
 }
 
@@ -217,7 +216,7 @@ func TestParseRouteParentRefs_ConflictingTLSModePort(t 
*testing.T) {
                        },
                },
        }
-       route := &gatewayv1alpha2.TLSRoute{
+       route := &gatewayv1.TLSRoute{
                ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "tr"},
        }
        cli := fake.NewClientBuilder().WithScheme(scheme).
diff --git a/internal/manager/controllers.go b/internal/manager/controllers.go
index af518e3c..51ec3f91 100644
--- a/internal/manager/controllers.go
+++ b/internal/manager/controllers.go
@@ -29,7 +29,6 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/client"
        "sigs.k8s.io/controller-runtime/pkg/manager"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
@@ -178,7 +177,7 @@ func setupGatewayAPIControllers(ctx context.Context, mgr 
manager.Manager, pro pr
                        Updater:  updater,
                        Readier:  readier,
                },
-               &gatewayv1alpha2.TCPRoute{}: &controller.TCPRouteReconciler{
+               &gatewayv1.TCPRoute{}: &controller.TCPRouteReconciler{
                        Client:   mgr.GetClient(),
                        Scheme:   mgr.GetScheme(),
                        Log:      
ctrl.LoggerFrom(ctx).WithName("controllers").WithName(types.KindTCPRoute),
@@ -186,7 +185,7 @@ func setupGatewayAPIControllers(ctx context.Context, mgr 
manager.Manager, pro pr
                        Updater:  updater,
                        Readier:  readier,
                },
-               &gatewayv1alpha2.UDPRoute{}: &controller.UDPRouteReconciler{
+               &gatewayv1.UDPRoute{}: &controller.UDPRouteReconciler{
                        Client:   mgr.GetClient(),
                        Scheme:   mgr.GetScheme(),
                        Log:      
ctrl.LoggerFrom(ctx).WithName("controllers").WithName(types.KindUDPRoute),
@@ -194,7 +193,7 @@ func setupGatewayAPIControllers(ctx context.Context, mgr 
manager.Manager, pro pr
                        Updater:  updater,
                        Readier:  readier,
                },
-               &gatewayv1alpha2.TLSRoute{}: &controller.TLSRouteReconciler{
+               &gatewayv1.TLSRoute{}: &controller.TLSRouteReconciler{
                        Client:   mgr.GetClient(),
                        Scheme:   mgr.GetScheme(),
                        Log:      
ctrl.LoggerFrom(ctx).WithName("controllers").WithName(types.KindTLSRoute),
@@ -327,9 +326,9 @@ func registerGatewayAPIForReadiness(
        resources := []client.Object{
                &gatewayv1.HTTPRoute{},
                &gatewayv1.GRPCRoute{},
-               &gatewayv1alpha2.TCPRoute{},
-               &gatewayv1alpha2.UDPRoute{},
-               &gatewayv1alpha2.TLSRoute{},
+               &gatewayv1.TCPRoute{},
+               &gatewayv1.UDPRoute{},
+               &gatewayv1.TLSRoute{},
        }
        installed := make([]schema.GroupVersionKind, 0, len(resources))
        for _, resource := range resources {
diff --git a/internal/manager/run.go b/internal/manager/run.go
index 34c2d338..b08ae92f 100644
--- a/internal/manager/run.go
+++ b/internal/manager/run.go
@@ -35,8 +35,6 @@ import (
        metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
        "sigs.k8s.io/controller-runtime/pkg/webhook"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-       "sigs.k8s.io/gateway-api/apis/v1beta1"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
@@ -66,16 +64,13 @@ func init() {
        if err := gatewayv1.Install(scheme); err != nil {
                panic(err)
        }
-       if err := gatewayv1alpha2.Install(scheme); err != nil {
-               panic(err)
-       }
        if err := v1alpha1.AddToScheme(scheme); err != nil {
                panic(err)
        }
        if err := apiv2.AddToScheme(scheme); err != nil {
                panic(err)
        }
-       if err := v1beta1.Install(scheme); err != nil {
+       if err := gatewayv1.Install(scheme); err != nil {
                panic(err)
        }
        // +kubebuilder:scaffold:scheme
@@ -255,13 +250,13 @@ func Run(ctx context.Context, logger logr.Logger) error {
                setupLog.Info("Gateway API is disabled, skipping the 
ReferenceGrants check")
        } else {
                setupLog.Info("check ReferenceGrants is enabled")
-               if hasReferenceGrant, err = utils.HasAPIResource(mgr, 
&v1beta1.ReferenceGrant{}); err != nil {
+               if hasReferenceGrant, err = utils.HasAPIResource(mgr, 
&gatewayv1.ReferenceGrant{}); err != nil {
                        setupLog.Error(err, "unable to detect whether 
ReferenceGrants is installed")
                        return err
                }
                if !hasReferenceGrant {
                        setupLog.Info("CRD ReferenceGrants is not installed, 
cross-namespace references will be rejected",
-                               "gvk", 
utils.FormatGVK(&v1beta1.ReferenceGrant{}))
+                               "gvk", 
utils.FormatGVK(&gatewayv1.ReferenceGrant{}))
                }
        }
        controller.SetEnableReferenceGrant(hasReferenceGrant)
diff --git a/internal/provider/apisix/provider.go 
b/internal/provider/apisix/provider.go
index 7412b082..86d7f532 100644
--- a/internal/provider/apisix/provider.go
+++ b/internal/provider/apisix/provider.go
@@ -27,7 +27,6 @@ import (
        networkingv1 "k8s.io/api/networking/v1"
        "sigs.k8s.io/controller-runtime/pkg/client"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        adctypes "github.com/apache/apisix-ingress-controller/api/adc"
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
@@ -112,13 +111,13 @@ func (d *apisixProvider) Update(ctx context.Context, tctx 
*provider.TranslateCon
        case *gatewayv1.HTTPRoute:
                result, err = d.translator.TranslateHTTPRoute(tctx, 
t.DeepCopy())
                resourceTypes = append(resourceTypes, adctypes.TypeService)
-       case *gatewayv1alpha2.TCPRoute:
+       case *gatewayv1.TCPRoute:
                result, err = d.translator.TranslateTCPRoute(tctx, t.DeepCopy())
                resourceTypes = append(resourceTypes, adctypes.TypeService)
-       case *gatewayv1alpha2.UDPRoute:
+       case *gatewayv1.UDPRoute:
                result, err = d.translator.TranslateUDPRoute(tctx, t.DeepCopy())
                resourceTypes = append(resourceTypes, adctypes.TypeService)
-       case *gatewayv1alpha2.TLSRoute:
+       case *gatewayv1.TLSRoute:
                result, err = d.translator.TranslateTLSRoute(tctx, t.DeepCopy())
                resourceTypes = append(resourceTypes, adctypes.TypeService)
        case *gatewayv1.GRPCRoute:
@@ -194,7 +193,7 @@ func (d *apisixProvider) Delete(ctx context.Context, obj 
client.Object) error {
        var resourceTypes []string
        var labels map[string]string
        switch obj.(type) {
-       case *gatewayv1.HTTPRoute, *apiv2.ApisixRoute, *gatewayv1.GRPCRoute, 
*gatewayv1alpha2.TCPRoute, *gatewayv1alpha2.UDPRoute, *gatewayv1alpha2.TLSRoute:
+       case *gatewayv1.HTTPRoute, *apiv2.ApisixRoute, *gatewayv1.GRPCRoute, 
*gatewayv1.TCPRoute, *gatewayv1.UDPRoute, *gatewayv1.TLSRoute:
                resourceTypes = append(resourceTypes, adctypes.TypeService)
                labels = label.GenLabel(obj)
        case *gatewayv1.Gateway:
diff --git a/internal/provider/apisix/status.go 
b/internal/provider/apisix/status.go
index 864b7e79..a1d857eb 100644
--- a/internal/provider/apisix/status.go
+++ b/internal/provider/apisix/status.go
@@ -24,7 +24,6 @@ import (
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "sigs.k8s.io/controller-runtime/pkg/client"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
        "github.com/apache/apisix-ingress-controller/internal/controller/label"
@@ -156,9 +155,9 @@ func (d *apisixProvider) updateStatus(nnk 
types.NamespacedNameKind, condition me
                }
                d.updater.Update(status.Update{
                        NamespacedName: nnk.NamespacedName(),
-                       Resource:       &gatewayv1alpha2.UDPRoute{},
+                       Resource:       &gatewayv1.UDPRoute{},
                        Mutator: status.MutatorFunc(func(obj client.Object) 
client.Object {
-                               cp := obj.(*gatewayv1alpha2.UDPRoute).DeepCopy()
+                               cp := obj.(*gatewayv1.UDPRoute).DeepCopy()
                                condition.ObservedGeneration = 
cp.GetGeneration()
                                gatewayNs := cp.GetNamespace()
                                for i, ref := range cp.Status.Parents {
@@ -192,9 +191,9 @@ func (d *apisixProvider) updateStatus(nnk 
types.NamespacedNameKind, condition me
                }
                d.updater.Update(status.Update{
                        NamespacedName: nnk.NamespacedName(),
-                       Resource:       &gatewayv1alpha2.TCPRoute{},
+                       Resource:       &gatewayv1.TCPRoute{},
                        Mutator: status.MutatorFunc(func(obj client.Object) 
client.Object {
-                               cp := obj.(*gatewayv1alpha2.TCPRoute).DeepCopy()
+                               cp := obj.(*gatewayv1.TCPRoute).DeepCopy()
                                condition.ObservedGeneration = 
cp.GetGeneration()
                                gatewayNs := cp.GetNamespace()
                                for i, ref := range cp.Status.Parents {
diff --git a/internal/types/k8s.go b/internal/types/k8s.go
index 585ca314..677b024c 100644
--- a/internal/types/k8s.go
+++ b/internal/types/k8s.go
@@ -23,8 +23,6 @@ import (
        "k8s.io/apimachinery/pkg/runtime/schema"
        "k8s.io/utils/ptr"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
-       gatewayv1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
 
        "github.com/apache/apisix-ingress-controller/api/v1alpha1"
        v2 "github.com/apache/apisix-ingress-controller/api/v2"
@@ -75,19 +73,19 @@ func KindOf(obj any) string {
        switch obj.(type) {
        case *gatewayv1.Gateway:
                return KindGateway
-       case *gatewayv1alpha2.TCPRoute:
+       case *gatewayv1.TCPRoute:
                return KindTCPRoute
-       case *gatewayv1alpha2.UDPRoute:
+       case *gatewayv1.UDPRoute:
                return KindUDPRoute
        case *gatewayv1.HTTPRoute:
                return KindHTTPRoute
        case *gatewayv1.GRPCRoute:
                return KindGRPCRoute
-       case *gatewayv1alpha2.TLSRoute:
+       case *gatewayv1.TLSRoute:
                return KindTLSRoute
        case *gatewayv1.GatewayClass:
                return KindGatewayClass
-       case *gatewayv1beta1.ReferenceGrant:
+       case *gatewayv1.ReferenceGrant:
                return KindReferenceGrant
        case *netv1.Ingress:
                return KindIngress
@@ -131,12 +129,11 @@ func KindOf(obj any) string {
 func GvkOf(obj any) schema.GroupVersionKind {
        kind := KindOf(obj)
        switch obj.(type) {
-       case *gatewayv1.Gateway, *gatewayv1.HTTPRoute, *gatewayv1.GatewayClass, 
*gatewayv1.GRPCRoute:
+       case *gatewayv1.Gateway, *gatewayv1.HTTPRoute, *gatewayv1.GatewayClass, 
*gatewayv1.GRPCRoute,
+               *gatewayv1.TCPRoute, *gatewayv1.UDPRoute, *gatewayv1.TLSRoute:
+               return 
schema.GroupVersion(gatewayv1.GroupVersion).WithKind(kind)
+       case *gatewayv1.ReferenceGrant:
                return 
schema.GroupVersion(gatewayv1.GroupVersion).WithKind(kind)
-       case *gatewayv1alpha2.TCPRoute, *gatewayv1alpha2.UDPRoute, 
*gatewayv1alpha2.TLSRoute:
-               return 
schema.GroupVersion(gatewayv1alpha2.GroupVersion).WithKind(kind)
-       case *gatewayv1beta1.ReferenceGrant:
-               return 
schema.GroupVersion(gatewayv1beta1.GroupVersion).WithKind(kind)
        case *netv1.Ingress, *netv1.IngressClass:
                return netv1.SchemeGroupVersion.WithKind(kind)
        case *corev1.Secret, *corev1.Service:
diff --git a/internal/types/route_adapter.go b/internal/types/route_adapter.go
index 11da083d..4b47b488 100644
--- a/internal/types/route_adapter.go
+++ b/internal/types/route_adapter.go
@@ -21,7 +21,6 @@ import (
        "github.com/samber/lo"
        "sigs.k8s.io/controller-runtime/pkg/client"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 )
 
 type HTTPRouteAdapter struct {
@@ -53,7 +52,7 @@ func (r GRPCRouteAdapter) GetObject() client.Object {
 }
 
 type TCPRouteAdapter struct {
-       *gatewayv1alpha2.TCPRoute
+       *gatewayv1.TCPRoute
 }
 
 func (r TCPRouteAdapter) GetParentStatuses() []gatewayv1.RouteParentStatus {
@@ -68,7 +67,7 @@ func (r TCPRouteAdapter) GetObject() client.Object {
 }
 
 type UDPRouteAdapter struct {
-       *gatewayv1alpha2.UDPRoute
+       *gatewayv1.UDPRoute
 }
 
 func (r UDPRouteAdapter) GetParentStatuses() []gatewayv1.RouteParentStatus {
@@ -82,7 +81,7 @@ func (r UDPRouteAdapter) GetObject() client.Object {
 }
 
 type TLSRouteAdapter struct {
-       *gatewayv1alpha2.TLSRoute
+       *gatewayv1.TLSRoute
 }
 
 func (r TLSRouteAdapter) GetParentStatuses() []gatewayv1.RouteParentStatus {
@@ -108,11 +107,11 @@ func NewRouteAdapter(obj client.Object) RouteAdapter {
                return &HTTPRouteAdapter{HTTPRoute: r}
        case *gatewayv1.GRPCRoute:
                return &GRPCRouteAdapter{GRPCRoute: r}
-       case *gatewayv1alpha2.TLSRoute:
+       case *gatewayv1.TLSRoute:
                return &TLSRouteAdapter{TLSRoute: r}
-       case *gatewayv1alpha2.TCPRoute:
+       case *gatewayv1.TCPRoute:
                return &TCPRouteAdapter{TCPRoute: r}
-       case *gatewayv1alpha2.UDPRoute:
+       case *gatewayv1.UDPRoute:
                return &UDPRouteAdapter{UDPRoute: r}
        default:
                return nil
@@ -129,16 +128,16 @@ func NewRouteListAdapter(objList client.ObjectList) 
[]RouteAdapter {
                return lo.Map(r.Items, func(item gatewayv1.GRPCRoute, _ int) 
RouteAdapter {
                        return &GRPCRouteAdapter{GRPCRoute: &item}
                })
-       case *gatewayv1alpha2.TLSRouteList:
-               return lo.Map(r.Items, func(item gatewayv1alpha2.TLSRoute, _ 
int) RouteAdapter {
+       case *gatewayv1.TLSRouteList:
+               return lo.Map(r.Items, func(item gatewayv1.TLSRoute, _ int) 
RouteAdapter {
                        return &TLSRouteAdapter{TLSRoute: &item}
                })
-       case *gatewayv1alpha2.TCPRouteList:
-               return lo.Map(r.Items, func(item gatewayv1alpha2.TCPRoute, _ 
int) RouteAdapter {
+       case *gatewayv1.TCPRouteList:
+               return lo.Map(r.Items, func(item gatewayv1.TCPRoute, _ int) 
RouteAdapter {
                        return &TCPRouteAdapter{TCPRoute: &item}
                })
-       case *gatewayv1alpha2.UDPRouteList:
-               return lo.Map(r.Items, func(item gatewayv1alpha2.UDPRoute, _ 
int) RouteAdapter {
+       case *gatewayv1.UDPRouteList:
+               return lo.Map(r.Items, func(item gatewayv1.UDPRoute, _ int) 
RouteAdapter {
                        return &UDPRouteAdapter{UDPRoute: &item}
                })
        default:
diff --git a/internal/webhook/v1/consumer_webhook_test.go 
b/internal/webhook/v1/consumer_webhook_test.go
index b9cfbcb6..9563bf56 100644
--- a/internal/webhook/v1/consumer_webhook_test.go
+++ b/internal/webhook/v1/consumer_webhook_test.go
@@ -31,7 +31,6 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/client/fake"
        "sigs.k8s.io/controller-runtime/pkg/client/interceptor"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       "sigs.k8s.io/gateway-api/apis/v1beta1"
 
        apisixv1alpha1 
"github.com/apache/apisix-ingress-controller/api/v1alpha1"
        "github.com/apache/apisix-ingress-controller/internal/controller"
@@ -51,16 +50,16 @@ func enableReferenceGrant(t *testing.T) {
 }
 
 // consumerToSecretGrant permits Consumers in fromNS to reference Secrets in 
grantNS.
-func consumerToSecretGrant(grantNS, fromNS string) *v1beta1.ReferenceGrant {
-       return &v1beta1.ReferenceGrant{
+func consumerToSecretGrant(grantNS, fromNS string) *gatewayv1.ReferenceGrant {
+       return &gatewayv1.ReferenceGrant{
                ObjectMeta: metav1.ObjectMeta{Name: "allow-consumer", 
Namespace: grantNS},
-               Spec: v1beta1.ReferenceGrantSpec{
-                       From: []v1beta1.ReferenceGrantFrom{{
-                               Group:     
v1beta1.Group(apisixv1alpha1.GroupVersion.Group),
+               Spec: gatewayv1.ReferenceGrantSpec{
+                       From: []gatewayv1.ReferenceGrantFrom{{
+                               Group:     
gatewayv1.Group(apisixv1alpha1.GroupVersion.Group),
                                Kind:      "Consumer",
-                               Namespace: v1beta1.Namespace(fromNS),
+                               Namespace: gatewayv1.Namespace(fromNS),
                        }},
-                       To: []v1beta1.ReferenceGrantTo{{Group: "", Kind: 
"Secret"}},
+                       To: []gatewayv1.ReferenceGrantTo{{Group: "", Kind: 
"Secret"}},
                },
        }
 }
@@ -72,7 +71,7 @@ func buildConsumerValidator(t *testing.T, objects 
...runtime.Object) *ConsumerCu
        require.NoError(t, clientgoscheme.AddToScheme(scheme))
        require.NoError(t, apisixv1alpha1.AddToScheme(scheme))
        require.NoError(t, gatewayv1.Install(scheme))
-       require.NoError(t, v1beta1.Install(scheme))
+       require.NoError(t, gatewayv1.Install(scheme))
 
        managed := []runtime.Object{
                &gatewayv1.GatewayClass{
@@ -106,7 +105,7 @@ func buildConsumerValidatorWithInterceptor(t *testing.T, 
funcs interceptor.Funcs
        require.NoError(t, clientgoscheme.AddToScheme(scheme))
        require.NoError(t, apisixv1alpha1.AddToScheme(scheme))
        require.NoError(t, gatewayv1.Install(scheme))
-       require.NoError(t, v1beta1.Install(scheme))
+       require.NoError(t, gatewayv1.Install(scheme))
 
        managed := []runtime.Object{
                &gatewayv1.GatewayClass{
@@ -278,7 +277,7 @@ func 
TestConsumerValidator_CrossNamespaceSecretGrantLookupError(t *testing.T) {
        validator := buildConsumerValidatorWithInterceptor(t,
                interceptor.Funcs{
                        List: func(ctx context.Context, c client.WithWatch, 
list client.ObjectList, opts ...client.ListOption) error {
-                               if _, ok := list.(*v1beta1.ReferenceGrantList); 
ok {
+                               if _, ok := 
list.(*gatewayv1.ReferenceGrantList); ok {
                                        return 
apierrors.NewInternalError(fmt.Errorf("api server unavailable"))
                                }
                                return c.List(ctx, list, opts...)
diff --git a/internal/webhook/v1/ownership.go b/internal/webhook/v1/ownership.go
index f5d5d60f..00f4343c 100644
--- a/internal/webhook/v1/ownership.go
+++ b/internal/webhook/v1/ownership.go
@@ -20,7 +20,6 @@ import (
 
        "sigs.k8s.io/controller-runtime/pkg/client"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        "github.com/apache/apisix-ingress-controller/internal/controller/config"
        internaltypes 
"github.com/apache/apisix-ingress-controller/internal/types"
@@ -61,14 +60,14 @@ func isGRPCRouteManaged(ctx context.Context, c 
client.Client, route *gatewayv1.G
        return routeReferencesManagedGateway(ctx, c, route.Spec.ParentRefs, 
route.Namespace)
 }
 
-func isTCPRouteManaged(ctx context.Context, c client.Client, route 
*gatewayv1alpha2.TCPRoute) (bool, error) {
+func isTCPRouteManaged(ctx context.Context, c client.Client, route 
*gatewayv1.TCPRoute) (bool, error) {
        if route == nil {
                return false, nil
        }
        return routeReferencesManagedGateway(ctx, c, route.Spec.ParentRefs, 
route.Namespace)
 }
 
-func isUDPRouteManaged(ctx context.Context, c client.Client, route 
*gatewayv1alpha2.UDPRoute) (bool, error) {
+func isUDPRouteManaged(ctx context.Context, c client.Client, route 
*gatewayv1.UDPRoute) (bool, error) {
        if route == nil {
                return false, nil
        }
diff --git a/internal/webhook/v1/tcproute_webhook.go 
b/internal/webhook/v1/tcproute_webhook.go
index c2febbb2..bb4cf2a2 100644
--- a/internal/webhook/v1/tcproute_webhook.go
+++ b/internal/webhook/v1/tcproute_webhook.go
@@ -26,7 +26,7 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/client"
        logf "sigs.k8s.io/controller-runtime/pkg/log"
        "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+       gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
 
        internaltypes 
"github.com/apache/apisix-ingress-controller/internal/types"
        
"github.com/apache/apisix-ingress-controller/internal/webhook/v1/reference"
@@ -35,12 +35,12 @@ import (
 var tcpRouteLog = logf.Log.WithName("tcproute-resource")
 
 func SetupTCPRouteWebhookWithManager(mgr ctrl.Manager) error {
-       return ctrl.NewWebhookManagedBy(mgr, &gatewayv1alpha2.TCPRoute{}).
+       return ctrl.NewWebhookManagedBy(mgr, &gatewayv1.TCPRoute{}).
                
WithCustomValidator(NewTCPRouteCustomValidator(mgr.GetClient())).
                Complete()
 }
 
-// 
+kubebuilder:webhook:path=/validate-gateway-networking-k8s-io-v1alpha2-tcproute,mutating=false,failurePolicy=fail,sideEffects=None,groups=gateway.networking.k8s.io,resources=tcproutes,verbs=create;update,versions=v1alpha2,name=vtcproute-v1alpha2.kb.io,admissionReviewVersions=v1,failurePolicy=Ignore
+// 
+kubebuilder:webhook:path=/validate-gateway-networking-k8s-io-v1-tcproute,mutating=false,failurePolicy=fail,sideEffects=None,groups=gateway.networking.k8s.io,resources=tcproutes,verbs=create;update,versions=v1,name=vtcproute-v1.kb.io,admissionReviewVersions=v1,failurePolicy=Ignore
 
 type TCPRouteCustomValidator struct {
        Client  client.Client
@@ -57,7 +57,7 @@ func NewTCPRouteCustomValidator(c client.Client) 
*TCPRouteCustomValidator {
 }
 
 func (v *TCPRouteCustomValidator) ValidateCreate(ctx context.Context, obj 
runtime.Object) (admission.Warnings, error) {
-       route, ok := obj.(*gatewayv1alpha2.TCPRoute)
+       route, ok := obj.(*gatewayv1.TCPRoute)
        if !ok {
                return nil, fmt.Errorf("expected a TCPRoute object but got %T", 
obj)
        }
@@ -75,7 +75,7 @@ func (v *TCPRouteCustomValidator) ValidateCreate(ctx 
context.Context, obj runtim
 }
 
 func (v *TCPRouteCustomValidator) ValidateUpdate(ctx context.Context, oldObj, 
newObj runtime.Object) (admission.Warnings, error) {
-       route, ok := newObj.(*gatewayv1alpha2.TCPRoute)
+       route, ok := newObj.(*gatewayv1.TCPRoute)
        if !ok {
                return nil, fmt.Errorf("expected a TCPRoute object for the 
newObj but got %T", newObj)
        }
@@ -96,7 +96,7 @@ func (*TCPRouteCustomValidator) 
ValidateDelete(context.Context, runtime.Object)
        return nil, nil
 }
 
-func (v *TCPRouteCustomValidator) collectWarnings(ctx context.Context, route 
*gatewayv1alpha2.TCPRoute) admission.Warnings {
+func (v *TCPRouteCustomValidator) collectWarnings(ctx context.Context, route 
*gatewayv1.TCPRoute) admission.Warnings {
        serviceVisited := make(map[types.NamespacedName]struct{})
        namespace := route.GetNamespace()
 
@@ -116,7 +116,7 @@ func (v *TCPRouteCustomValidator) collectWarnings(ctx 
context.Context, route *ga
                })...)
        }
 
-       addBackendRef := func(ns, name string, group *gatewayv1alpha2.Group, 
kind *gatewayv1alpha2.Kind) {
+       addBackendRef := func(ns, name string, group *gatewayv1.Group, kind 
*gatewayv1.Kind) {
                if name == "" {
                        return
                }
diff --git a/internal/webhook/v1/tcproute_webhook_test.go 
b/internal/webhook/v1/tcproute_webhook_test.go
index 6381ea0a..af6c4786 100644
--- a/internal/webhook/v1/tcproute_webhook_test.go
+++ b/internal/webhook/v1/tcproute_webhook_test.go
@@ -27,7 +27,6 @@ import (
        clientgoscheme "k8s.io/client-go/kubernetes/scheme"
        "sigs.k8s.io/controller-runtime/pkg/client/fake"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        "github.com/apache/apisix-ingress-controller/internal/controller/config"
 )
@@ -38,7 +37,7 @@ func buildTCPRouteValidator(t *testing.T, objects 
...runtime.Object) *TCPRouteCu
        scheme := runtime.NewScheme()
        require.NoError(t, clientgoscheme.AddToScheme(scheme))
        require.NoError(t, gatewayv1.Install(scheme))
-       require.NoError(t, gatewayv1alpha2.Install(scheme))
+       require.NoError(t, gatewayv1.Install(scheme))
 
        managed := []runtime.Object{
                &gatewayv1.GatewayClass{
@@ -61,19 +60,19 @@ func buildTCPRouteValidator(t *testing.T, objects 
...runtime.Object) *TCPRouteCu
 }
 
 func TestTCPRouteCustomValidator_WarnsForMissingReferences(t *testing.T) {
-       route := &gatewayv1alpha2.TCPRoute{
+       route := &gatewayv1.TCPRoute{
                ObjectMeta: metav1.ObjectMeta{Name: "demo", Namespace: 
"default"},
-               Spec: gatewayv1alpha2.TCPRouteSpec{
-                       CommonRouteSpec: gatewayv1alpha2.CommonRouteSpec{
-                               ParentRefs: []gatewayv1alpha2.ParentReference{{
-                                       Name: 
gatewayv1alpha2.ObjectName("test-gateway"),
+               Spec: gatewayv1.TCPRouteSpec{
+                       CommonRouteSpec: gatewayv1.CommonRouteSpec{
+                               ParentRefs: []gatewayv1.ParentReference{{
+                                       Name: 
gatewayv1.ObjectName("test-gateway"),
                                }},
                        },
-                       Rules: []gatewayv1alpha2.TCPRouteRule{{
-                               BackendRefs: []gatewayv1alpha2.BackendRef{
+                       Rules: []gatewayv1.TCPRouteRule{{
+                               BackendRefs: []gatewayv1.BackendRef{
                                        {
-                                               BackendObjectReference: 
gatewayv1alpha2.BackendObjectReference{
-                                                       Name: 
gatewayv1alpha2.ObjectName("missing-svc"),
+                                               BackendObjectReference: 
gatewayv1.BackendObjectReference{
+                                                       Name: 
gatewayv1.ObjectName("missing-svc"),
                                                },
                                        },
                                },
@@ -96,19 +95,19 @@ func 
TestTCPRouteCustomValidator_NoWarningsWhenResourcesExist(t *testing.T) {
 
        validator := buildTCPRouteValidator(t, objs...)
 
-       route := &gatewayv1alpha2.TCPRoute{
+       route := &gatewayv1.TCPRoute{
                ObjectMeta: metav1.ObjectMeta{Name: "demo", Namespace: 
"default"},
-               Spec: gatewayv1alpha2.TCPRouteSpec{
-                       CommonRouteSpec: gatewayv1alpha2.CommonRouteSpec{
-                               ParentRefs: []gatewayv1alpha2.ParentReference{{
-                                       Name: 
gatewayv1alpha2.ObjectName("test-gateway"),
+               Spec: gatewayv1.TCPRouteSpec{
+                       CommonRouteSpec: gatewayv1.CommonRouteSpec{
+                               ParentRefs: []gatewayv1.ParentReference{{
+                                       Name: 
gatewayv1.ObjectName("test-gateway"),
                                }},
                        },
-                       Rules: []gatewayv1alpha2.TCPRouteRule{{
-                               BackendRefs: []gatewayv1alpha2.BackendRef{
+                       Rules: []gatewayv1.TCPRouteRule{{
+                               BackendRefs: []gatewayv1.BackendRef{
                                        {
-                                               BackendObjectReference: 
gatewayv1alpha2.BackendObjectReference{
-                                                       Name: 
gatewayv1alpha2.ObjectName("backend"),
+                                               BackendObjectReference: 
gatewayv1.BackendObjectReference{
+                                                       Name: 
gatewayv1.ObjectName("backend"),
                                                },
                                        },
                                },
diff --git a/internal/webhook/v1/udproute_webhook.go 
b/internal/webhook/v1/udproute_webhook.go
index 23376e11..fc2ec556 100644
--- a/internal/webhook/v1/udproute_webhook.go
+++ b/internal/webhook/v1/udproute_webhook.go
@@ -26,7 +26,7 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/client"
        logf "sigs.k8s.io/controller-runtime/pkg/log"
        "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
+       gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
 
        internaltypes 
"github.com/apache/apisix-ingress-controller/internal/types"
        
"github.com/apache/apisix-ingress-controller/internal/webhook/v1/reference"
@@ -35,12 +35,12 @@ import (
 var udpRouteLog = logf.Log.WithName("udproute-resource")
 
 func SetupUDPRouteWebhookWithManager(mgr ctrl.Manager) error {
-       return ctrl.NewWebhookManagedBy(mgr, &gatewayv1alpha2.UDPRoute{}).
+       return ctrl.NewWebhookManagedBy(mgr, &gatewayv1.UDPRoute{}).
                
WithCustomValidator(NewUDPRouteCustomValidator(mgr.GetClient())).
                Complete()
 }
 
-// 
+kubebuilder:webhook:path=/validate-gateway-networking-k8s-io-v1alpha2-udproute,mutating=false,failurePolicy=fail,sideEffects=None,groups=gateway.networking.k8s.io,resources=udproutes,verbs=create;update,versions=v1alpha2,name=vudproute-v1alpha2.kb.io,admissionReviewVersions=v1,failurePolicy=Ignore
+// 
+kubebuilder:webhook:path=/validate-gateway-networking-k8s-io-v1-udproute,mutating=false,failurePolicy=fail,sideEffects=None,groups=gateway.networking.k8s.io,resources=udproutes,verbs=create;update,versions=v1,name=vudproute-v1.kb.io,admissionReviewVersions=v1,failurePolicy=Ignore
 
 type UDPRouteCustomValidator struct {
        Client  client.Client
@@ -57,7 +57,7 @@ func NewUDPRouteCustomValidator(c client.Client) 
*UDPRouteCustomValidator {
 }
 
 func (v *UDPRouteCustomValidator) ValidateCreate(ctx context.Context, obj 
runtime.Object) (admission.Warnings, error) {
-       route, ok := obj.(*gatewayv1alpha2.UDPRoute)
+       route, ok := obj.(*gatewayv1.UDPRoute)
        if !ok {
                return nil, fmt.Errorf("expected a UDPRoute object but got %T", 
obj)
        }
@@ -75,7 +75,7 @@ func (v *UDPRouteCustomValidator) ValidateCreate(ctx 
context.Context, obj runtim
 }
 
 func (v *UDPRouteCustomValidator) ValidateUpdate(ctx context.Context, oldObj, 
newObj runtime.Object) (admission.Warnings, error) {
-       route, ok := newObj.(*gatewayv1alpha2.UDPRoute)
+       route, ok := newObj.(*gatewayv1.UDPRoute)
        if !ok {
                return nil, fmt.Errorf("expected a UDPRoute object for the 
newObj but got %T", newObj)
        }
@@ -96,7 +96,7 @@ func (*UDPRouteCustomValidator) 
ValidateDelete(context.Context, runtime.Object)
        return nil, nil
 }
 
-func (v *UDPRouteCustomValidator) collectWarnings(ctx context.Context, route 
*gatewayv1alpha2.UDPRoute) admission.Warnings {
+func (v *UDPRouteCustomValidator) collectWarnings(ctx context.Context, route 
*gatewayv1.UDPRoute) admission.Warnings {
        serviceVisited := make(map[types.NamespacedName]struct{})
        namespace := route.GetNamespace()
 
@@ -116,7 +116,7 @@ func (v *UDPRouteCustomValidator) collectWarnings(ctx 
context.Context, route *ga
                })...)
        }
 
-       addBackendRef := func(ns, name string, group *gatewayv1alpha2.Group, 
kind *gatewayv1alpha2.Kind) {
+       addBackendRef := func(ns, name string, group *gatewayv1.Group, kind 
*gatewayv1.Kind) {
                if name == "" {
                        return
                }
diff --git a/internal/webhook/v1/udproute_webhook_test.go 
b/internal/webhook/v1/udproute_webhook_test.go
index 82b87920..3bd87d37 100644
--- a/internal/webhook/v1/udproute_webhook_test.go
+++ b/internal/webhook/v1/udproute_webhook_test.go
@@ -27,7 +27,6 @@ import (
        clientgoscheme "k8s.io/client-go/kubernetes/scheme"
        "sigs.k8s.io/controller-runtime/pkg/client/fake"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        "github.com/apache/apisix-ingress-controller/internal/controller/config"
 )
@@ -38,7 +37,7 @@ func buildUDPRouteValidator(t *testing.T, objects 
...runtime.Object) *UDPRouteCu
        scheme := runtime.NewScheme()
        require.NoError(t, clientgoscheme.AddToScheme(scheme))
        require.NoError(t, gatewayv1.Install(scheme))
-       require.NoError(t, gatewayv1alpha2.Install(scheme))
+       require.NoError(t, gatewayv1.Install(scheme))
 
        managed := []runtime.Object{
                &gatewayv1.GatewayClass{
@@ -61,19 +60,19 @@ func buildUDPRouteValidator(t *testing.T, objects 
...runtime.Object) *UDPRouteCu
 }
 
 func TestUDPRouteCustomValidator_WarnsForMissingReferences(t *testing.T) {
-       route := &gatewayv1alpha2.UDPRoute{
+       route := &gatewayv1.UDPRoute{
                ObjectMeta: metav1.ObjectMeta{Name: "demo", Namespace: 
"default"},
-               Spec: gatewayv1alpha2.UDPRouteSpec{
-                       CommonRouteSpec: gatewayv1alpha2.CommonRouteSpec{
-                               ParentRefs: []gatewayv1alpha2.ParentReference{{
-                                       Name: 
gatewayv1alpha2.ObjectName("test-gateway"),
+               Spec: gatewayv1.UDPRouteSpec{
+                       CommonRouteSpec: gatewayv1.CommonRouteSpec{
+                               ParentRefs: []gatewayv1.ParentReference{{
+                                       Name: 
gatewayv1.ObjectName("test-gateway"),
                                }},
                        },
-                       Rules: []gatewayv1alpha2.UDPRouteRule{{
-                               BackendRefs: []gatewayv1alpha2.BackendRef{
+                       Rules: []gatewayv1.UDPRouteRule{{
+                               BackendRefs: []gatewayv1.BackendRef{
                                        {
-                                               BackendObjectReference: 
gatewayv1alpha2.BackendObjectReference{
-                                                       Name: 
gatewayv1alpha2.ObjectName("missing-svc"),
+                                               BackendObjectReference: 
gatewayv1.BackendObjectReference{
+                                                       Name: 
gatewayv1.ObjectName("missing-svc"),
                                                },
                                        },
                                },
@@ -96,19 +95,19 @@ func 
TestUDPRouteCustomValidator_NoWarningsWhenResourcesExist(t *testing.T) {
 
        validator := buildUDPRouteValidator(t, objs...)
 
-       route := &gatewayv1alpha2.UDPRoute{
+       route := &gatewayv1.UDPRoute{
                ObjectMeta: metav1.ObjectMeta{Name: "demo", Namespace: 
"default"},
-               Spec: gatewayv1alpha2.UDPRouteSpec{
-                       CommonRouteSpec: gatewayv1alpha2.CommonRouteSpec{
-                               ParentRefs: []gatewayv1alpha2.ParentReference{{
-                                       Name: 
gatewayv1alpha2.ObjectName("test-gateway"),
+               Spec: gatewayv1.UDPRouteSpec{
+                       CommonRouteSpec: gatewayv1.CommonRouteSpec{
+                               ParentRefs: []gatewayv1.ParentReference{{
+                                       Name: 
gatewayv1.ObjectName("test-gateway"),
                                }},
                        },
-                       Rules: []gatewayv1alpha2.UDPRouteRule{{
-                               BackendRefs: []gatewayv1alpha2.BackendRef{
+                       Rules: []gatewayv1.UDPRouteRule{{
+                               BackendRefs: []gatewayv1.BackendRef{
                                        {
-                                               BackendObjectReference: 
gatewayv1alpha2.BackendObjectReference{
-                                                       Name: 
gatewayv1alpha2.ObjectName("backend"),
+                                               BackendObjectReference: 
gatewayv1.BackendObjectReference{
+                                                       Name: 
gatewayv1.ObjectName("backend"),
                                                },
                                        },
                                },
@@ -128,19 +127,19 @@ func TestUDPRouteCustomValidator_ValidateUpdate(t 
*testing.T) {
 
        validator := buildUDPRouteValidator(t, objs...)
 
-       oldRoute := &gatewayv1alpha2.UDPRoute{
+       oldRoute := &gatewayv1.UDPRoute{
                ObjectMeta: metav1.ObjectMeta{Name: "demo", Namespace: 
"default"},
-               Spec: gatewayv1alpha2.UDPRouteSpec{
-                       CommonRouteSpec: gatewayv1alpha2.CommonRouteSpec{
-                               ParentRefs: []gatewayv1alpha2.ParentReference{{
-                                       Name: 
gatewayv1alpha2.ObjectName("test-gateway"),
+               Spec: gatewayv1.UDPRouteSpec{
+                       CommonRouteSpec: gatewayv1.CommonRouteSpec{
+                               ParentRefs: []gatewayv1.ParentReference{{
+                                       Name: 
gatewayv1.ObjectName("test-gateway"),
                                }},
                        },
-                       Rules: []gatewayv1alpha2.UDPRouteRule{{
-                               BackendRefs: []gatewayv1alpha2.BackendRef{
+                       Rules: []gatewayv1.UDPRouteRule{{
+                               BackendRefs: []gatewayv1.BackendRef{
                                        {
-                                               BackendObjectReference: 
gatewayv1alpha2.BackendObjectReference{
-                                                       Name: 
gatewayv1alpha2.ObjectName("backend"),
+                                               BackendObjectReference: 
gatewayv1.BackendObjectReference{
+                                                       Name: 
gatewayv1.ObjectName("backend"),
                                                },
                                        },
                                },
@@ -148,19 +147,19 @@ func TestUDPRouteCustomValidator_ValidateUpdate(t 
*testing.T) {
                },
        }
 
-       newRoute := &gatewayv1alpha2.UDPRoute{
+       newRoute := &gatewayv1.UDPRoute{
                ObjectMeta: metav1.ObjectMeta{Name: "demo", Namespace: 
"default"},
-               Spec: gatewayv1alpha2.UDPRouteSpec{
-                       CommonRouteSpec: gatewayv1alpha2.CommonRouteSpec{
-                               ParentRefs: []gatewayv1alpha2.ParentReference{{
-                                       Name: 
gatewayv1alpha2.ObjectName("test-gateway"),
+               Spec: gatewayv1.UDPRouteSpec{
+                       CommonRouteSpec: gatewayv1.CommonRouteSpec{
+                               ParentRefs: []gatewayv1.ParentReference{{
+                                       Name: 
gatewayv1.ObjectName("test-gateway"),
                                }},
                        },
-                       Rules: []gatewayv1alpha2.UDPRouteRule{{
-                               BackendRefs: []gatewayv1alpha2.BackendRef{
+                       Rules: []gatewayv1.UDPRouteRule{{
+                               BackendRefs: []gatewayv1.BackendRef{
                                        {
-                                               BackendObjectReference: 
gatewayv1alpha2.BackendObjectReference{
-                                                       Name: 
gatewayv1alpha2.ObjectName("backend"),
+                                               BackendObjectReference: 
gatewayv1.BackendObjectReference{
+                                                       Name: 
gatewayv1.ObjectName("backend"),
                                                },
                                        },
                                },
@@ -176,12 +175,12 @@ func TestUDPRouteCustomValidator_ValidateUpdate(t 
*testing.T) {
 func TestUDPRouteCustomValidator_ValidateDelete(t *testing.T) {
        validator := buildUDPRouteValidator(t)
 
-       route := &gatewayv1alpha2.UDPRoute{
+       route := &gatewayv1.UDPRoute{
                ObjectMeta: metav1.ObjectMeta{Name: "demo", Namespace: 
"default"},
-               Spec: gatewayv1alpha2.UDPRouteSpec{
-                       CommonRouteSpec: gatewayv1alpha2.CommonRouteSpec{
-                               ParentRefs: []gatewayv1alpha2.ParentReference{{
-                                       Name: 
gatewayv1alpha2.ObjectName("test-gateway"),
+               Spec: gatewayv1.UDPRouteSpec{
+                       CommonRouteSpec: gatewayv1.CommonRouteSpec{
+                               ParentRefs: []gatewayv1.ParentReference{{
+                                       Name: 
gatewayv1.ObjectName("test-gateway"),
                                }},
                        },
                },
@@ -193,26 +192,26 @@ func TestUDPRouteCustomValidator_ValidateDelete(t 
*testing.T) {
 }
 
 func TestUDPRouteCustomValidator_CrossNamespaceBackendRefs(t *testing.T) {
-       otherNamespace := gatewayv1alpha2.Namespace("other")
+       otherNamespace := gatewayv1.Namespace("other")
        objs := []runtime.Object{
                &corev1.Service{ObjectMeta: metav1.ObjectMeta{Name: "backend", 
Namespace: "other"}},
        }
 
        validator := buildUDPRouteValidator(t, objs...)
 
-       route := &gatewayv1alpha2.UDPRoute{
+       route := &gatewayv1.UDPRoute{
                ObjectMeta: metav1.ObjectMeta{Name: "demo", Namespace: 
"default"},
-               Spec: gatewayv1alpha2.UDPRouteSpec{
-                       CommonRouteSpec: gatewayv1alpha2.CommonRouteSpec{
-                               ParentRefs: []gatewayv1alpha2.ParentReference{{
-                                       Name: 
gatewayv1alpha2.ObjectName("test-gateway"),
+               Spec: gatewayv1.UDPRouteSpec{
+                       CommonRouteSpec: gatewayv1.CommonRouteSpec{
+                               ParentRefs: []gatewayv1.ParentReference{{
+                                       Name: 
gatewayv1.ObjectName("test-gateway"),
                                }},
                        },
-                       Rules: []gatewayv1alpha2.UDPRouteRule{{
-                               BackendRefs: []gatewayv1alpha2.BackendRef{
+                       Rules: []gatewayv1.UDPRouteRule{{
+                               BackendRefs: []gatewayv1.BackendRef{
                                        {
-                                               BackendObjectReference: 
gatewayv1alpha2.BackendObjectReference{
-                                                       Name:      
gatewayv1alpha2.ObjectName("backend"),
+                                               BackendObjectReference: 
gatewayv1.BackendObjectReference{
+                                                       Name:      
gatewayv1.ObjectName("backend"),
                                                        Namespace: 
&otherNamespace,
                                                },
                                        },
@@ -235,29 +234,29 @@ func TestUDPRouteCustomValidator_MultipleBackendRefs(t 
*testing.T) {
 
        validator := buildUDPRouteValidator(t, objs...)
 
-       route := &gatewayv1alpha2.UDPRoute{
+       route := &gatewayv1.UDPRoute{
                ObjectMeta: metav1.ObjectMeta{Name: "demo", Namespace: 
"default"},
-               Spec: gatewayv1alpha2.UDPRouteSpec{
-                       CommonRouteSpec: gatewayv1alpha2.CommonRouteSpec{
-                               ParentRefs: []gatewayv1alpha2.ParentReference{{
-                                       Name: 
gatewayv1alpha2.ObjectName("test-gateway"),
+               Spec: gatewayv1.UDPRouteSpec{
+                       CommonRouteSpec: gatewayv1.CommonRouteSpec{
+                               ParentRefs: []gatewayv1.ParentReference{{
+                                       Name: 
gatewayv1.ObjectName("test-gateway"),
                                }},
                        },
-                       Rules: []gatewayv1alpha2.UDPRouteRule{{
-                               BackendRefs: []gatewayv1alpha2.BackendRef{
+                       Rules: []gatewayv1.UDPRouteRule{{
+                               BackendRefs: []gatewayv1.BackendRef{
                                        {
-                                               BackendObjectReference: 
gatewayv1alpha2.BackendObjectReference{
-                                                       Name: 
gatewayv1alpha2.ObjectName("backend-1"),
+                                               BackendObjectReference: 
gatewayv1.BackendObjectReference{
+                                                       Name: 
gatewayv1.ObjectName("backend-1"),
                                                },
                                        },
                                        {
-                                               BackendObjectReference: 
gatewayv1alpha2.BackendObjectReference{
-                                                       Name: 
gatewayv1alpha2.ObjectName("backend-2"),
+                                               BackendObjectReference: 
gatewayv1.BackendObjectReference{
+                                                       Name: 
gatewayv1.ObjectName("backend-2"),
                                                },
                                        },
                                        {
-                                               BackendObjectReference: 
gatewayv1alpha2.BackendObjectReference{
-                                                       Name: 
gatewayv1alpha2.ObjectName("missing-backend"),
+                                               BackendObjectReference: 
gatewayv1.BackendObjectReference{
+                                                       Name: 
gatewayv1.ObjectName("missing-backend"),
                                                },
                                        },
                                },
diff --git a/pkg/utils/k8s_test.go b/pkg/utils/k8s_test.go
index 73ce3579..3add795f 100644
--- a/pkg/utils/k8s_test.go
+++ b/pkg/utils/k8s_test.go
@@ -254,7 +254,7 @@ func newDiscoveryClient(t *testing.T, handler 
http.HandlerFunc) discovery.Discov
 // discovery client rather than a fake: only a definitive answer may resolve to
 // "absent", everything else must be an error.
 func TestHasAPIResource(t *testing.T) {
-       gvk := schema.GroupVersionKind{Group: "gateway.networking.k8s.io", 
Version: "v1alpha2", Kind: "TCPRoute"}
+       gvk := schema.GroupVersionKind{Group: "gateway.networking.k8s.io", 
Version: "v1", Kind: "TCPRoute"}
 
        tests := []struct {
                name      string
@@ -266,7 +266,7 @@ func TestHasAPIResource(t *testing.T) {
                        name: "kind served",
                        handler: func(w http.ResponseWriter, _ *http.Request) {
                                w.Header().Set("Content-Type", 
"application/json")
-                               _, _ = 
w.Write([]byte(`{"kind":"APIResourceList","groupVersion":"gateway.networking.k8s.io/v1alpha2",`
 +
+                               _, _ = 
w.Write([]byte(`{"kind":"APIResourceList","groupVersion":"gateway.networking.k8s.io/v1",`
 +
                                        
`"resources":[{"name":"tcproutes","kind":"TCPRoute"}]}`))
                        },
                        wantFound: true,
@@ -275,7 +275,7 @@ func TestHasAPIResource(t *testing.T) {
                        name: "group/version served but kind missing",
                        handler: func(w http.ResponseWriter, _ *http.Request) {
                                w.Header().Set("Content-Type", 
"application/json")
-                               _, _ = 
w.Write([]byte(`{"kind":"APIResourceList","groupVersion":"gateway.networking.k8s.io/v1alpha2",`
 +
+                               _, _ = 
w.Write([]byte(`{"kind":"APIResourceList","groupVersion":"gateway.networking.k8s.io/v1",`
 +
                                        
`"resources":[{"name":"udproutes","kind":"UDPRoute"}]}`))
                        },
                },
diff --git a/test/e2e/framework/manifests/webhook.yaml 
b/test/e2e/framework/manifests/webhook.yaml
index 5d9198a0..7b06427b 100644
--- a/test/e2e/framework/manifests/webhook.yaml
+++ b/test/e2e/framework/manifests/webhook.yaml
@@ -230,12 +230,12 @@ webhooks:
         - ingressclasses
   failurePolicy: Fail
   sideEffects: None
-- name: vtcproute-v1alpha2.kb.io
+- name: vtcproute-v1.kb.io
   clientConfig:
     service:
       name: webhook-service
       namespace: {{ .Namespace }}
-      path: /validate-gateway-networking-k8s-io-v1alpha2-tcproute
+      path: /validate-gateway-networking-k8s-io-v1-tcproute
     caBundle: {{ .CABundle }}
   admissionReviewVersions:
     - v1
@@ -246,17 +246,17 @@ webhooks:
       apiGroups:
         - gateway.networking.k8s.io
       apiVersions:
-        - v1alpha2
+        - v1
       resources:
         - tcproutes
   failurePolicy: Fail
   sideEffects: None
-- name: vudproute-v1alpha2.kb.io
+- name: vudproute-v1.kb.io
   clientConfig:
     service:
       name: webhook-service
       namespace: {{ .Namespace }}
-      path: /validate-gateway-networking-k8s-io-v1alpha2-udproute
+      path: /validate-gateway-networking-k8s-io-v1-udproute
     caBundle: {{ .CABundle }}
   admissionReviewVersions:
     - v1
@@ -267,7 +267,7 @@ webhooks:
       apiGroups:
         - gateway.networking.k8s.io
       apiVersions:
-        - v1alpha2
+        - v1
       resources:
         - udproutes
   failurePolicy: Fail
diff --git a/test/e2e/gatewayapi/gateway.go b/test/e2e/gatewayapi/gateway.go
index 96cbf795..d9370070 100644
--- a/test/e2e/gatewayapi/gateway.go
+++ b/test/e2e/gatewayapi/gateway.go
@@ -488,7 +488,7 @@ spec:
       port: 8080
 `
                var tcpRouteSpec = `
-apiVersion: gateway.networking.k8s.io/v1alpha2
+apiVersion: gateway.networking.k8s.io/v1
 kind: TCPRoute
 metadata:
   name: %s
@@ -502,7 +502,7 @@ spec:
       port: 80
 `
                var udpRoute = `
-apiVersion: gateway.networking.k8s.io/v1alpha2
+apiVersion: gateway.networking.k8s.io/v1
 kind: UDPRoute
 metadata:
   name: %s
diff --git a/test/e2e/gatewayapi/tcproute.go b/test/e2e/gatewayapi/tcproute.go
index 0ad0a351..cda0b40c 100644
--- a/test/e2e/gatewayapi/tcproute.go
+++ b/test/e2e/gatewayapi/tcproute.go
@@ -62,7 +62,7 @@ spec:
 
        Context("TCPRoute Base", func() {
                var tcpRoute = `
-apiVersion: gateway.networking.k8s.io/v1alpha2
+apiVersion: gateway.networking.k8s.io/v1
 kind: TCPRoute
 metadata:
   name: tcp-app-1
@@ -121,7 +121,7 @@ spec:
 
        Context("TCPRoute With BackendTrafficPolicy", func() {
                var tcpRoute = `
-apiVersion: gateway.networking.k8s.io/v1alpha2
+apiVersion: gateway.networking.k8s.io/v1
 kind: TCPRoute
 metadata:
   name: tcp-tls-upstream
@@ -185,7 +185,7 @@ spec:
 
        Context("TCPRoute With L4RoutePolicy", func() {
                var tcpRoute = `
-apiVersion: gateway.networking.k8s.io/v1alpha2
+apiVersion: gateway.networking.k8s.io/v1
 kind: TCPRoute
 metadata:
   name: tcp-l4policy
diff --git a/test/e2e/gatewayapi/tlsroute.go b/test/e2e/gatewayapi/tlsroute.go
index f58cfe16..fb06be9c 100644
--- a/test/e2e/gatewayapi/tlsroute.go
+++ b/test/e2e/gatewayapi/tlsroute.go
@@ -59,7 +59,7 @@ spec:
       name: apisix-proxy-config
 `
                        tlsRoute = `
-apiVersion: gateway.networking.k8s.io/v1alpha2
+apiVersion: gateway.networking.k8s.io/v1
 kind: TLSRoute
 metadata:
   name: tls-route
diff --git a/test/e2e/gatewayapi/udproute.go b/test/e2e/gatewayapi/udproute.go
index 151ebb37..477a2607 100644
--- a/test/e2e/gatewayapi/udproute.go
+++ b/test/e2e/gatewayapi/udproute.go
@@ -54,7 +54,7 @@ spec:
 `
 
                var udpRoute = `
-apiVersion: gateway.networking.k8s.io/v1alpha2
+apiVersion: gateway.networking.k8s.io/v1
 kind: UDPRoute
 metadata:
   name: udp-app-1
diff --git a/test/e2e/scaffold/k8s.go b/test/e2e/scaffold/k8s.go
index 9fc78501..5a47db98 100644
--- a/test/e2e/scaffold/k8s.go
+++ b/test/e2e/scaffold/k8s.go
@@ -43,7 +43,6 @@ import (
        "k8s.io/client-go/tools/clientcmd"
        client "sigs.k8s.io/controller-runtime/pkg/client"
        gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
-       "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
        apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
        "github.com/apache/apisix-ingress-controller/test/e2e/framework"
@@ -419,7 +418,6 @@ func (s *Scaffold) GetKubeClient() client.Client {
                _ = apiv2.AddToScheme(scheme)
                _ = corev1.AddToScheme(scheme)
                _ = gatewayv1.Install(scheme)
-               _ = v1alpha2.Install(scheme)
                cfg, err := clientcmd.BuildConfigFromFlags("", 
s.opts.Kubeconfig)
                Expect(err).NotTo(HaveOccurred(), "building kubeconfig")
                s.client, err = client.New(cfg, client.Options{Scheme: scheme})
diff --git a/test/e2e/webhook/helpers.go b/test/e2e/webhook/helpers.go
index ca40535b..ebe4f79b 100644
--- a/test/e2e/webhook/helpers.go
+++ b/test/e2e/webhook/helpers.go
@@ -182,7 +182,7 @@ func expectUpdateDenied(err error) {
 func verifySimpleRouteMissingBackendWarnings(s *scaffold.Scaffold, tc 
simpleRouteWebhookTestCase) {
        gatewayName := s.Namespace()
        routeYAML := fmt.Sprintf(`
-apiVersion: gateway.networking.k8s.io/v1alpha2
+apiVersion: gateway.networking.k8s.io/v1
 kind: %s
 metadata:
   name: %s

Reply via email to