Is there an existing issue for this?
Version
equal or higher than v1.18.4 and lower than v1.19.0
What happened?
According to the Gateway API reference, when a tie occurs between HTTPRouteRules, the first rule should be selected. However, this behavior is as expected in practice.
Take the following HTTPRoute as an example. when the ratings service exists, requests are sometimes routed to ratings and sometimes to productpage. When the ratings service does not exist, the first rule is skipped, and all requests are routed to productpage. The behaviors under this two occasions are both inconsistent to the reference.
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: hr
spec:
parentRefs:
- name: my-gateway
rules:
- matches:
- path:
type: Exact
value: /productpage
backendRefs:
- name: ratings
port: 8080
- matches:
- path:
type: Exact
value: /productpage
backendRefs:
- name: productpage
port: 9080
How can we reproduce the issue?
- Create a Cilium cluster with
cilium install --version 1.18.4 \
--set kubeProxyReplacement=true \
--set gatewayAPI.enabled=true \
--set nodePort.enabled=true
- Deploy gateway and services (
ratings and productpage).
- Apply the
HTTPRoute above.
curl http://"$GATEWAY":80/productpage.
Cilium Version
v1.18.4
Kernel Version
6.12.54-linuxkit
Kubernetes Version
Client Version: v1.34.1
Kustomize Version: v5.7.1
Server Version: v1.34.0
Regression
No response
Sysdump
cilium-sysdump-20251125-161445.zip
Relevant log output
Anything else?
No response
Cilium Users Document
Code of Conduct
Is there an existing issue for this?
Version
equal or higher than v1.18.4 and lower than v1.19.0
What happened?
According to the Gateway API reference, when a tie occurs between HTTPRouteRules, the first rule should be selected. However, this behavior is as expected in practice.
Take the following HTTPRoute as an example. when the
ratingsservice exists, requests are sometimes routed toratingsand sometimes toproductpage. When theratingsservice does not exist, the first rule is skipped, and all requests are routed toproductpage. The behaviors under this two occasions are both inconsistent to the reference.How can we reproduce the issue?
cilium install --version 1.18.4 \ --set kubeProxyReplacement=true \ --set gatewayAPI.enabled=true \ --set nodePort.enabled=trueratingsandproductpage).HTTPRouteabove.curl http://"$GATEWAY":80/productpage.Cilium Version
v1.18.4
Kernel Version
6.12.54-linuxkit
Kubernetes Version
Client Version: v1.34.1
Kustomize Version: v5.7.1
Server Version: v1.34.0
Regression
No response
Sysdump
cilium-sysdump-20251125-161445.zip
Relevant log output
Anything else?
No response
Cilium Users Document
Code of Conduct