我想访问某个IP上公开的外部数据库: 10.48.100.124 (没有与此IP关联的DNS名称),端口为3306。我已经创建了ServiceEntry:
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: csd-database
namespace: testnam-dev
spec:
hosts:
- csd-database
addresses:
- 10.48.100.124/32
exportTo:
- "."
ports:
- number: 3306
name: tcp
protocol: TCP
location: MESH_EXTERNAL
resolution: STATIC
endpoints:
- address: 10.48.100.124
ports:
tcp: 3306如果我尝试在集群内部通过IP (10.48.100.124)连接,工作正常。但是我想用DNS名称公开这个服务(在k8s/isito集群中),所以我创建了VirtualService:
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: csd-database
namespace: testnam-dev
spec:
hosts:
- csd-database
gateways:
- ingresgateway
tcp:
- route:
- destination:
host: csd-database但是我无法连接到主机: csd-database也无法在3306端口连接到csd-database。如何在集群内暴露DNS名称的ServiceEntry?
数据库没有DNS名称(外部),它只有IP地址。因此,只能在10.48.100.124:3306上访问数据库
发布于 2020-10-06 23:50:45
TLDR:您的ServiceEntry当前配置为按静态ip地址解析。
更改:
resolution: STATIC至
resolution: DNS根据istio documentation
ServiceEntry.Resolution
解析确定代理如何解析与服务关联的网络终结点的IP地址,以便可以路由到其中一个。此处指定的解析模式对应用程序解析与服务关联的IP地址的方式没有影响。应用程序可能仍必须使用DNS将服务解析为IP,以便代理可以捕获出站流量。或者,对于超文本传输协议服务,应用程序可以直接与代理进行通信(例如,通过设置HTTP_PROXY)以与这些服务对话。
NONE -假设传入连接已被解析(到特定的目标IP地址)。这种连接通常使用诸如IP表重定向/ eBPF之类的机制经由代理进行路由。在执行任何与路由相关的转换之后,代理将把连接转发到该连接所绑定到的IP地址。
STATIC -使用端点中指定的静态IP地址(见下文)作为与服务关联的支持实例。
DNS -在请求处理期间,尝试通过查询环境DNS来解析IP地址。如果未指定端点,代理将解析主机字段中指定的DNS地址(如果未使用通配符)。如果指定了终结点,则将解析终结点中指定的DNS地址以确定目标IP地址。DNS解析不能用于Unix域套接字终结点。
https://stackoverflow.com/questions/64215742
复制相似问题