你们两个问题。
我有一个pod A试图请求一个名为 foo 的网址在http://foo上进行GET。 但是我的K8集群中不存在服务foo,而是我有一个名为 fooX 的服务可以完成这项工作。 是否可以创建一个Istio配置来将我对foo的调用路由到fooX服务?
更一般地说,我们有一堆服务调用其他服务并通过环境变量获取服务URL,但是我们拥有的服务越多,我们拥有的环境变量就越多,它就无法扩展。我希望服务网可以提供帮助,但我不确定。
答案 0 :(得分:0)
您可以使用K8S ExternalName services:
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。
答案 1 :(得分:0)
如其他答案中所述,可以使用ExternalService
(在0.8.1中重命名为ServiceEntry
)。但是,这需要注意的是,您为ServiceEntry
中的别名选择的名称是DNS可解析的DNS。否则,DNS查找将失败,并且连接将永远不会根据ServiceEntry
将其路由到代理。