-
Notifications
You must be signed in to change notification settings - Fork 592
Description
I have configured two listeners on a Gateway for two different (sub)domains, e.g. foo.example.com and bar.example.com:
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: envoy-gateway-https
namespace: default
spec:
gatewayClassName: envoy
listeners:
- allowedRoutes:
namespaces:
from: Same
hostname: 'foo.example.k3d'
name: example-foo
port: 443
protocol: HTTPS
tls:
certificateRefs:
- group: ""
kind: Secret
name: example-wildcard-tls
namespace: default
mode: Terminate
- allowedRoutes:
namespaces:
from: Same
hostname: 'bar.example.k3d'
name: example-bar
port: 443
protocol: HTTPS
tls:
certificateRefs:
- group: ""
kind: Secret
name: example-wildcard-tls
namespace: default
mode: TerminateIf I try to reach foo.example.com or bar.example.com with a CLI tool such as curl both domains are working fine and the desired content is correctly served. However, if I try to do the same from within a browser session with Chrome or Firefox, only one of both is working and the other one responds with 404's. Which one is working and which one not depends on the order in which I attempt to reach it: If I open Chrome and navigate to foo.example.com the desired content is served correctly, but if I go to bar.example.com afterwards I receive a 404. If I close the browser and open it again and this time first navigate to bar.example.com it is correctly served and subsequent requests to foo.example.com receive 404's. Therefore I assume this might have something to do with connection sharing / reuse, but this is only a wild guess.
In the envoy debug logs I can see the failing request and the reason for the 404 seems to be a problem with the route matching:
[2024-02-22 15:32:32.711][26][debug][router] [source/common/router/router.cc:446] [Tags: "ConnectionId":"3","StreamId":"11246534096143794784"] no route match for URL '/'
If I remove the hostname constraint from the Gateway entirely, all domains are working fine as well as with curl as in a browser session.