我在一个小集群内运行两个服务用于测试目的。我有一个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的服务定义中定义,但现在我也必须知道端口。
有没有更好的方法,或者这是目前唯一的方法吗?
答案 0 :(得分:2)
但是,如果我将服务B的服务定义的端口从80更改为其他任何内容
好吧,鉴于每个Service
都有自己的ClusterIP,因此它有自己的非冲突端口,没有直接的原因可以改变Service
端口 - 一个会改变Pod
Service
端口指向的端口。除此之外,如果Service
端口正在使用targetPort: some-name
而不是targetPort: 1234
,则可以进一步免除更改Service
端口,因为Pod
可以只更改名为 containerPort
端口的Pod
,而下游的内容则不是更明智。
也就是说,如果更改Service
的数字端口并且这些端口名称正确非常重要,那么您可以利用SRV record support由kube-dns
提供,以便将应用与硬编码的端口号分离。但是,使用SRV
记录可以使URL构建三个步骤(查找记录,汇编URL,请求URL),从而引入更多应用程序代码以及更多失败机会。