Description
Currently when an ApisixRoute is not accepted, ** all ** ApisixRoutes are shown as not accepted, and it is not easy to determine which ApisixRoute is at fault. The index of the problem route is indicated, but not the name & namespace.
It would be beneficial to only reject the invalid routes, allowing those that are valid to continue to update the config.
If that is not possible, it would make troubleshooting easier if the message included the namespace & name of the problem route.
Steps to reproduce:
Install apisix
helm install apisix \
--namespace ingress-apisix \
--create-namespace \
--set apisix.deployment.role=traditional \
--set apisix.deployment.role_traditional.config_provider=yaml \
--set etcd.enabled=false \
--set ingress-controller.enabled=true \
--set ingress-controller.config.provider.type=apisix-standalone \
--set ingress-controller.apisix.adminService.namespace=ingress-apisix \
--set ingress-controller.gatewayProxy.createDefault=true \
apisix/apisix
Install a hello-world service
helm install hello-world \
--namespace hello-world \
--create-namespace \
--version 21.0.8 \
--set image.repository=bitnamilegacy/nginx \
--set global.security.allowInsecureImages=true \
--set-literal serverBlock='server {listen 0.0.0.0:8080;location /hello-world {default_type text/plain;return 200 "Hello, World!";}}' \
oci://registry-1.docker.io/bitnamicharts/nginx
Add a valid route
kubectl apply -f - << __EOF__
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: hello-world-1
namespace: hello-world
spec:
ingressClassName: apisix
http:
- name: hello-world-1
match:
paths:
- /hello-world-1
backends:
- serviceName: hello-world-nginx
servicePort: 80
__EOF__
Check the route's status
kubectl get apisixroute -n hello-world hello-world-1 -o yaml | yq .status
conditions:
- lastTransitionTime: "2026-02-03T18:33:40Z"
message: ""
observedGeneration: 2
reason: Accepted
status: "True"
type: Accepted
Add an invalid route (reference a plugin that does not exist)
kubectl apply -f - << __EOF__
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: hello-world-2
namespace: hello-world
spec:
ingressClassName: apisix
http:
- name: hello-world-2
match:
paths:
- /hello-world-2
backends:
- serviceName: hello-world-nginx
servicePort: 80
plugins:
- name: non-existent-plugin
enable: true
__EOF__
Verify the new plugin
kubectl get apisixroute -n hello-world hello-world-2 -o yaml | yq .status
conditions:
- lastTransitionTime: "2026-02-03T18:36:37Z"
message: 'ServerAddr: http://10.244.0.6:9180, Err: invalid routes at index 1, err: unknown plugin [non-existent-plugin]'
observedGeneration: 1
reason: SyncFailed
status: "False"
type: Accepted
Observe that the original apisixroute is also no longer accepted
kubectl get apisixroute -n hello-world hello-world-1 -o yaml | yq .status
conditions:
- lastTransitionTime: "2026-02-03T18:36:37Z"
message: 'ServerAddr: http://10.244.0.6:9180, Err: invalid routes at index 1, err: unknown plugin [non-existent-plugin]'
observedGeneration: 2
reason: SyncFailed
status: "False"
type: Accepted
Description
Currently when an ApisixRoute is not accepted, ** all ** ApisixRoutes are shown as not accepted, and it is not easy to determine which ApisixRoute is at fault. The index of the problem route is indicated, but not the name & namespace.
It would be beneficial to only reject the invalid routes, allowing those that are valid to continue to update the config.
If that is not possible, it would make troubleshooting easier if the message included the namespace & name of the problem route.
Steps to reproduce:
Install apisix
Install a hello-world service
helm install hello-world \ --namespace hello-world \ --create-namespace \ --version 21.0.8 \ --set image.repository=bitnamilegacy/nginx \ --set global.security.allowInsecureImages=true \ --set-literal serverBlock='server {listen 0.0.0.0:8080;location /hello-world {default_type text/plain;return 200 "Hello, World!";}}' \ oci://registry-1.docker.io/bitnamicharts/nginxAdd a valid route
Check the route's status
kubectl get apisixroute -n hello-world hello-world-1 -o yaml | yq .statusAdd an invalid route (reference a plugin that does not exist)
Verify the new plugin
kubectl get apisixroute -n hello-world hello-world-2 -o yaml | yq .statusObserve that the original apisixroute is also no longer accepted
kubectl get apisixroute -n hello-world hello-world-1 -o yaml | yq .status