【问题标题】:Discover port of other service in Kubernetes, without using the FOO_SERVICE_PORT env variable在 Kubernetes 中发现其他服务的端口,而不使用 FOO_SERVICE_PORT 环境变量
【发布时间】:2023-04-06 23:39:02
【问题描述】:

根据 Kubernetes 文档,each container gets a set of environment variables that lets it access other services

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

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_HOST 设置为search 并依靠SEARCH_PORT 来获取端口,但是当我将现有环境变量中的服务url 放在一起时,它变成了http://search:tcp://10.0.110.126:80 这显然是不工作。

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

【问题讨论】:

    标签: kubernetes service-discovery azure-aks


    【解决方案1】:

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

    例如,如果一个名为 foo 的服务存在,所有容器都会得到 初始环境中的以下变量:

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

    变量名称是&lt;your_service_name&gt;_SERVICE_PORT,因此如果您的服务器名称为SEARCH,您可以使用SEARCH_SERVICE_HOSTSEARCH_SERVICE_PORT 环境变量找到它的hostport 值:

    echo $SEARCH_SERVICE_HOST
    
    echo $SEARCH_SERVICE_PORT
    

    【讨论】:

      【解决方案2】:

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

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

      这里有一个官方documentation关于它,但总而言之,记录是这样的:

      &lt;my-port-name&gt;.&lt;my-port-protocol&gt;.&lt;my-svc&gt;.&lt;my-namespace&gt;.svc.cluster.local

      因此,对于您的服务,它将是这样的:

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

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

      【讨论】:

      • 您可以使用一些库来处理 DNS 记录,但您也可以调用类似 dig +short foo-port.tcp.foo.my-namespace.svc.cluster.local SRV|awk '{print $3}' 的名称。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 2021-06-25
      • 2020-05-22
      • 2017-03-13
      • 2018-10-31
      • 2020-10-11
      相关资源
      最近更新 更多