Can Istio将非现有主机映射到K8上的给定服务

时间:2018-06-07 15:47:35

标签: kubernetes istio

你们两个问题。

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

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

2 个答案:

答案 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将其路由到代理。