用于多个外部数据库的Istio ServiceEntry进入同一数据库

问题描述 投票:0回答:1

我们在群集中的相同名称空间中有2个服务,每个服务都使用自己的数据库,如下所示:enter image description here

我们为每个数据库添加了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
...

由此产生的交互看起来像这样,这是不期望的:

enter image description here

关于我们缺少什么的任何线索?

amazon-web-services kubernetes cloud istio
1个回答
1
投票
因此,最后,碰巧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 ...

这里是the documentation的摘录,使我们得出了这个结论。

如果“地址”字段为空,将仅根据目标端口识别流量。在这种情况下,网格中的任何其他服务都不得共享正在访问服务的端口。

请注意,如果将分辨率设置为DNS类型并且未指定端点,则主机字段将用作将流量路由到的端点的DNS名称。

注意:虽然这有助于解决此特定实例,但它提出了另一个使用动态IP地址的问题,例如某些尝试访问AWS Secrets Manager的应用程序。此类服务的ip地址不断变化,无法将其绑定到服务条目。因此,我们仅为已知的外部流量添加了服务条目,并允许其他条目未知。在Kiali(Istio的可视化工具)中,这些“未知”显示为PassThroughClusters,这很烦人,但问题只有一半。

© www.soinside.com 2019 - 2024. All rights reserved.