Istio-连接到外部IP

时间:2019-05-11 22:27:03

标签: kubernetes istio

我安装了Istio,

gateways.istio-egressgateway.enabled = true

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

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定义内部域吗?

2 个答案:

答案 0 :(得分:2)

问题在于解决了与您resolutionServiceEntry的配置基本上有关的DNS。

基于istio的documentation

  

解决方案确定代理如何解析与服务关联的网络终结点的IP地址,以便它可以路由到其中之一。

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

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

答案 1 :(得分: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

然后您可以将主机external-db.default.svc.cluster.local

添加到ServiceEntry中
相关问题