Istio-使用DNS名称访问外部数据库(TCP)

时间:2020-10-05 20:26:47

标签: kubernetes istio

我想使用端口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上可访问

1 个答案:

答案 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域一起使用 套接字端点。

相关问题