代码之家  ›  专栏  ›  技术社区  ›  Tomas Aschan

在Kubernetes中发现其他服务的端口,而不使用FOO\u service\u port env变量

  •  0
  • Tomas Aschan  · 技术社区  · 6 年前

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

    例如,如果存在名为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_HOST search 在我的部署模板中,并依赖 SEARCH_PORT 获取端口,但当我将现有环境变量中的服务url放在一起时,它会变成 http://search:tcp://10.0.110.126:80 这显然不起作用。

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

    2 回复  |  直到 6 年前
        1
  •  0
  •   nickgryg    6 年前

    根据 kubernetes 问题中发布的文件:

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

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

    变量名称为 <your_service_name>_SERVICE_PORT ,因此如果您的服务器具有名称 SEARCH ,您可以找到它 host port 值使用 SEARCH_SERVICE_HOST SEARCH_SERVICE_PORT 环境变量:

    echo $SEARCH_SERVICE_HOST
    
    echo $SEARCH_SERVICE_PORT
    
        2
  •  0
  •   Anton Kostenko    6 年前

    如果我不能依赖FOO\u SERVICE\u PORT变量来提供端口号,我应该怎么做?

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

    这是一位官员 documentation 关于它,但简而言之,记录是这样的:

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

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

    foo-port.tcp.foo.my-namespace.svc.cluster.local 哪里 my-namespace 是的命名空间 foo 服务

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