Kubernetes的服务发现

时间:2018-01-30 23:17:41

标签: kubernetes service-discovery

我在一个小集群内运行两个服务用于测试目的。我有一个nginx入口控制器,然后是服务A,可以直接卷曲,然后是从服务A调用的服务B.

我能够接收来自ingress的电话和通讯 - > A - > B工作正常,如果在服务A中查找B时,我按如下方式对B进行http调用:http:// {ServiceB.serviceName} / ...这不需要我指定端口只要外部服务B的端口在其服务定义中的端口80上定义。

但是,如果我将服务B的服务定义的端口从80更改为其他任何内容,为了在服务A中使用它,我现在必须将用于调用服务B的URL更改为http:// {Serviceb.serviceName}:{Serviceb.portNumber} /。基本上,我必须在查找时添加端口号。这要求在服务A中,现在我不仅要知道服务B的名称,因为它在服务B的服务定义中定义,但现在我也必须知道端口。

有没有更好的方法,或者这是目前唯一的方法吗?

1 个答案:

答案 0 :(得分:2)

  

但是,如果我将服务B的服务定义的端口从80更改为其他任何内容

好吧,鉴于每个Service都有自己的ClusterIP,因此它有自己的非冲突端口,没有直接的原因可以改变Service端口 - 一个会改变Pod Service端口指向的端口。除此之外,如果Service端口正在使用targetPort: some-name而不是targetPort: 1234,则可以进一步免除更改Service端口,因为Pod可以只更改名为 containerPort端口的Pod,而下游的内容则不是更明智。

也就是说,如果更改Service的数字端口并且这些端口名称正确非常重要,那么您可以利用SRV record supportkube-dns提供,以便将应用与硬编码的端口号分离。但是,使用SRV记录可以使URL构建三个步骤(查找记录,汇编URL,请求URL),从而引入更多应用程序代码以及更多失败机会。