Istio 可以将不存在的主机映射到 K8s 上的给定服务吗?



2个问题给你们。

我有一个 pod A 试图请求一个名为foo的网址,在 http://foo 上做一个 GET . 但是我的 K8 集群中不存在服务 foo,而是我有一个名为fooX的服务可以完成这项工作。 是否可以创建一个 Istio 配置来将我对 foo 的调用路由到 fooX 服务?

更一般地说,我们有一堆服务调用其他服务,并通过环境变量获取服务URL,但是我们拥有的服务越多,我们拥有的环境变量就越多,它是不可扩展的。我希望服务网格在这方面有所帮助,但我不确定。

您可以使用 K8S ExternalName 服务来实现:

外部名称服务是没有选择器的服务的特殊情况。它不定义任何端口或终结点。相反,它充当将别名返回到驻留在群集外部的外部服务的方法。

虽然它旨在为群集外部的服务定义别名,但它也可用于为群集内的服务创建别名。在您的情况下,只需定义以下 K8S 服务:

kind: Service
apiVersion: v1
metadata:
name: foo
namespace: prod
spec:
type: ExternalName
externalName: fooX.prod.svc.CLUSTER

因此,当您的应用向 http://foo.prod.svc.CLUSTER 发送请求时,请求将 http://fooX.prod.svc.CLUSTER 到达。

如另一个答案所述,可以使用ExternalService(在 0.8.1 中重命名为ServiceEntry(。但是,这需要注意的是,您为ServiceEntry中的别名选择的名称是 HTTP 的 DNS 可解析的。否则,DNS 查找将失败,并且连接将永远不会到达要根据ServiceEntry路由的代理。

最新更新