为什么 EKS istio classic LB 上的子域 tcp 路由没有按预期工作?

Why subdomain tcp routing on EKS istio classic LB doesnt work as expected?

配置:

  1. route 53 *.mydomainname.com指向经典LB.
  2. 在经典 LB 上配置的 istio ingress。
  3. 路由特定子域的网关 + 虚拟服务

这是 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