【问题标题】:Istio - Connect to an external ipIstio - 连接到外部 ip
【发布时间】:2019-09-29 09:00:48
【问题描述】:

我用

安装了 Istio
gateways.istio-egressgateway.enabled = true

当我尝试连接到外部数据库时,我收到一个错误。 我没有域(只有 ip 和端口),所以我定义了以下规则:

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-db
spec:
  hosts:
  - external-db.tcp.svc
  addresses:
  - 190.64.31.232/32
  ports:
  - number: 3306
    name: tcp
    protocol: TCP
  location: MESH_EXTERNAL
  resolution: STATIC
  endpoints:
  - address: 190.64.31.232

然后我在我的系统中打开一个 Shell(部署在我的服务网格中) 并且无法解析名称

$ ping external-db.tcp.svc
ping: ceip-db.tcp.svc: Name or service not known

但我可以使用 ip 地址连接

$ ping 190.64.31.232
PING 190.64.31.232 (190.64.31.232) 56(84) bytes of data.
64 bytes from 190.64.31.232: icmp_seq=1 ttl=249 time=1.35 ms
64 bytes from 190.64.31.232: icmp_seq=2 ttl=249 time=1.42 ms

发生了什么?我必须使用域或 ip 连接吗? 我可以为我的外部 IP 定义一个内部域吗?

【问题讨论】:

  • 您尝试通过 IP 连接吗?有用吗?
  • @VasilyAngapov 是的,使用 ip 可以工作。创建 ServiceEntry 后,我能够通过 IP 进行连接,但它无法解析我定义的域名(“external-db.tcp.svc”)。这是正确的行为吗?我可以使用名称连接吗?
  • 如果您已经拥有 Service,那么拥有 ServiceEntry 的原因是什么?似乎Endpoints 没有Service 就无法工作(对吗?),并且服务已经创建了您可以使用的主机名(例如external-db.default.svc.cluster.local)......另一方面,似乎应该有一种方法可以仅使用 ServiceEntry 和某种端点来使其工作,但我无法弄清楚。

标签: kubernetes istio


【解决方案1】:

您可以使用硬编码的 IP 端点创建无头服务:

---
apiVersion: v1
kind: Service
metadata:
  name: external-db
spec:
  clusterIP: None
  ports:
  - protocol: TCP
    port: 3306
---
apiVersion: v1
kind: Endpoints
metadata:
  name: external-db
subsets:
  - addresses:
    - ip: 190.64.31.232
    ports:
    - port: 3306

然后您可以向您的 ServiceEntry 添加主机 external-db.default.svc.cluster.local

【讨论】:

  • 这对我有用,除了我必须使用常规 clusterIP 服务并且 Istio 忽略了 ServiceEntry(在黑洞集群中!)
【解决方案2】:

问题是解析DNS,这基本上与resolution 在您的ServiceEntry 中的配置有关。

基于 istio 的 documentation:

解析决定代理将如何解析与服务关联的网络端点的 IP 地址,以便它可以路由到其中一个。

由于您已将其配置为 STATIC,因此您告诉 istio-proxy/envoy 寻找 Endpoint 来解析该 DNS 名称;因此您需要将Endpoint 定义为Vasily suggested

如果该 DNS 名称是在网格之外定义的,另一种简单的方法是将 resolution 更改为 DNS,这将强制 istio-proxy 在请求处理期间查询 DNS 服务器。

【讨论】:

    猜你喜欢
    • 2017-02-21
    • 2014-04-11
    • 2015-08-14
    • 2020-11-11
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多