0

根据 Kubernetes 文档,每个容器都有一组环境变量,可以访问其他服务

例如,如果存在名为 foo 的服务,则所有容器将在其初始环境中获取以下变量:

FOO_SERVICE_HOST=<the host the Service is running on>
FOO_SERVICE_PORT=<the port the Service is running on>

但是,似乎在我的集群中我没有得到这些变量的预期值:

tlycken@local: k exec -ti <my-pod> ash
/app # echo $SEARCH_HOST

/app # echo $SEARCH_PORT
tcp://10.0.110.126:80

我宁愿期待看到类似的东西

tlycken@local: k exec -ti <my-pod> ash
/app # echo $SEARCH_HOST
10.0.110.126
/app # echo $SEARCH_PORT
80

我知道文档也说

如果您正在编写与服务对话的代码,请不要使用这些环境变量;请改用服务的 DNS 名称。

但这只会给我服务的主机名,而不是端口。因此,我想在我的部署模板中设置SEARCH_HOSTsearch并依赖SEARCH_PORT来获取端口,但是当我将现有环境变量中的服务 url 放在一起时,它变成了http://search:tcp://10.0.110.126:80显然不起作用。

如果我不能依靠FOO_SERVICE_PORT变量给我端口号,我应该怎么做?

4

2 回答 2

0

如果我不能依靠 FOO_SERVICE_PORT 变量给我端口号,我应该怎么做?

我认为最好的方法是使用SRV记录来解析有关服务的信息,因为集群的 DNS 提供了服务发现功能。

这是关于它的官方文档,但简而言之,记录看起来像这样:

<my-port-name>.<my-port-protocol>.<my-svc>.<my-namespace>.svc.cluster.local

因此,对于您的服务,它将类似于:

foo-port.tcp.foo.my-namespace.svc.cluster.local,其中my-namespacefoo服务的命名空间。

您的服务地址可以从foo.my-namespace.svc.cluster.local记录中获得。

于 2018-03-29T09:04:02.597 回答
0

根据kubernetes问题中发布的文档的一部分:

例如,如果存在名为 foo 的服务,则所有容器将在其初始环境中获取以下变量:

FOO_SERVICE_HOST=<the host the Service is running on>
FOO_SERVICE_PORT=<the port the Service is running on>

变量 name 是<your_service_name>_SERVICE_PORT,所以如果你的服务器有 name ,你可以使用和环境变量SEARCH找到它host和值:portSEARCH_SERVICE_HOSTSEARCH_SERVICE_PORT

echo $SEARCH_SERVICE_HOST

echo $SEARCH_SERVICE_PORT
于 2018-03-29T13:10:17.363 回答