我想使用端口3306访问在某些IP上公开的外部数据库:10.48.100.124(没有与此IP关联的DNS名称) 我创建了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数据库 telnet也无法通过3306端口连接到csd数据库。 如何在群集内部使用DNS名称公开ServiceEntry?
数据库没有DNS名称(外部),它只有IP地址。 SO DB仅在10.48.100.124:3306上可访问
答案 0 :(得分:0)
TLDR:您的ServiceEntry
当前配置为通过静态IP地址解析。
更改:
resolution: STATIC
到
resolution: DNS
根据istio documentation:
ServiceEntry.Resolution
解决方案确定代理如何解析代理的IP地址 与服务关联的网络端点,以便它可以 路由到其中之一。此处指定的分辨率模式没有影响 有关应用程序如何解析与 服务。该应用程序可能仍必须使用DNS来解析 IP服务,以便出站流量可以被捕获 代理。另外,对于HTTP服务,应用程序可以 直接与代理通信(例如,通过设置HTTP_PROXY)以 与这些服务交谈。
NONE
-假设传入的连接已经解析 (到特定的目标IP地址)。这种连接通常是 使用诸如IP表REDIRECT / eBPF之类的机制通过代理路由。 执行任何与路由相关的转换后,代理将 将连接转发到连接所在的IP地址 绑定。
STATIC
-使用端点中指定的静态IP地址(请参阅 下面)作为与服务关联的支持实例。
DNS
-尝试通过查询环境DNS来解析IP地址, 在请求处理期间。如果未指定端点,则代理 将解析在主机字段中指定的DNS地址,如果 不使用通配符。如果指定了端点,则DNS地址 端点中指定的将被解析以确定 目的IP地址。 DNS解析不能与Unix域一起使用 套接字端点。