Amazon web services 多个外部数据库的Istio ServiceEntry将转到同一数据库

Amazon web services 多个外部数据库的Istio ServiceEntry将转到同一数据库,amazon-web-services,kubernetes,cloud,istio,Amazon Web Services,Kubernetes,Cloud,Istio,我们的集群中有两个服务位于同一名称空间中,每个服务使用自己的数据库,如下所示: 我们为每个数据库添加了2个ServiceEntry: --- apiVersion: networking.istio.io/v1alpha3 kind: ServiceEntry metadata: name: service-1 namespace: mynamespace spec: exportTo: - "." hosts: - service1-db.xxx.com

我们的集群中有两个服务位于同一名称空间中,每个服务使用自己的数据库,如下所示:

我们为每个数据库添加了2个ServiceEntry:

---
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: service-1
  namespace: mynamespace
spec:
  exportTo:
    - "."
  hosts:
    - service1-db.xxx.com
  ports:
    - number: 5432
      name: tcp
      protocol: tcp
  resolution: DNS
  location: MESH_EXTERNAL
...

---
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: service-2
  namespace: mynamespace
spec:
  exportTo:
    - "."
  hosts:
    - service2-db.xxx.com
  ports:
    - number: 5432
      name: tcp
      protocol: tcp
  resolution: DNS
  location: MESH_EXTERNAL
...
由此产生的交互如下所示,这是不期望的:


关于我们遗漏了什么,有什么线索吗?

因此,最后,ServiceEntry不能仅仅根据主机名工作,它还需要地址

以下是有效的方法:

---
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: service-1
  namespace: mynamespace
spec:
  exportTo:
    - "."
  hosts:
    - service1-db.xxx.com
  addresses:
    - xx.xx.xx.xx/32
  ports:
    - number: 5432
      name: tcp
      protocol: tcp
  resolution: NONE
  location: MESH_EXTERNAL
...

---
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: service-2
  namespace: mynamespace
spec:
  exportTo:
    - "."
  hosts:
    - service2-db.xxx.com
  addresses:
    - xx.xx.xx.yy/32
  ports:
    - number: 5432
      name: tcp
      protocol: tcp
  resolution: NONE
  location: MESH_EXTERNAL
...
以下是导致我们得出这一结论的摘录

如果地址字段为空,则将仅基于目标端口识别通信量。在这种情况下,mesh中的任何其他服务都不能共享正在访问服务的端口

请注意,当解析设置为DNS类型且未指定端点时,主机字段将用作要将流量路由到的端点的DNS名称


注意:虽然这有助于解决这个特定的实例,但它打开了另一个使用动态ip地址的不同问题,就像一些试图访问AWS secrets manager的应用程序一样。此类服务的ip地址不断变化,无法将其绑定到服务条目。因此,我们只为已知的外部流量添加服务条目,并允许其他流量未知。在Kiali(Istio的visualiser)中,这些“未知数”显示为PassThroughClusters,这很烦人,但只是问题的一半。

是否涉及任何负载平衡器或代理设置?您有哪个Istio版本?Istio版本为1.4