为什么 EKS istio classic LB 上的子域 tcp 路由没有按预期工作?
Why subdomain tcp routing on EKS istio classic LB doesnt work as expected?
配置:
- route 53 *.mydomainname.com指向经典LB.
- 在经典 LB 上配置的 istio ingress。
- 路由特定子域的网关 + 虚拟服务
这是 yaml:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: my-gateway
namespace: default
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 9999
name: aa
protocol: TCP
hosts:
- "a.example.com"
- "b.example.com"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sv1
namespace: default
spec:
hosts:
- "a.example.com"
gateways:
- my-gateway
tcp:
- route:
- destination:
host: svc1 #k8s service on the default namespace
port:
number: 8000
weight: 100
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sv1
namespace: default
spec:
hosts:
- "b.example.com"
gateways:
- my-gateway
tcp:
- route:
- destination:
host: svc2
port:
number: 8000
weight: 100
我希望 a.example.com 流量应该流向 svc1,b.example.com 流量应该流向 svc2。
事实上,所有流量 *.example.com 都路由到 svc1。
我错过了什么?
我怎样才能让它发挥作用?
标准 TCP 路由不支持主机匹配。主机匹配通常适用于 HTTP 服务,但它也可以用于使用带 SNI 的 TLS 的 TCP 服务。
这就是为什么您在该特定端口上的所有端点最终都在 svc1 中的原因。
参考检查:
https://istio.io/latest/docs/reference/config/networking/gateway/#Server
配置:
- route 53 *.mydomainname.com指向经典LB.
- 在经典 LB 上配置的 istio ingress。
- 路由特定子域的网关 + 虚拟服务
这是 yaml:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: my-gateway
namespace: default
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 9999
name: aa
protocol: TCP
hosts:
- "a.example.com"
- "b.example.com"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sv1
namespace: default
spec:
hosts:
- "a.example.com"
gateways:
- my-gateway
tcp:
- route:
- destination:
host: svc1 #k8s service on the default namespace
port:
number: 8000
weight: 100
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sv1
namespace: default
spec:
hosts:
- "b.example.com"
gateways:
- my-gateway
tcp:
- route:
- destination:
host: svc2
port:
number: 8000
weight: 100
我希望 a.example.com 流量应该流向 svc1,b.example.com 流量应该流向 svc2。 事实上,所有流量 *.example.com 都路由到 svc1。 我错过了什么? 我怎样才能让它发挥作用?
标准 TCP 路由不支持主机匹配。主机匹配通常适用于 HTTP 服务,但它也可以用于使用带 SNI 的 TLS 的 TCP 服务。
这就是为什么您在该特定端口上的所有端点最终都在 svc1 中的原因。
参考检查:
https://istio.io/latest/docs/reference/config/networking/gateway/#Server