【发布时间】:2019-09-29 09:00:48
【问题描述】:
我用
安装了 Istiogateways.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