【问题标题】:Multiple services for same app:port in kubernetes同一应用程序的多个服务:kubernetes 中的端口
【发布时间】:2019-09-06 04:43:03
【问题描述】:

我正在 Kubernetes 上试验服务发现方案。我有 20 多个 GRPC 服务,它们可以分组并部署为 Kubernetes 上的应用程序。每个应用程序通过一个通用的 GRPC 服务器为其中的几个服务提供服务。有一个服务可以发布这个 GRPC 端口,而且我在这些服务上都有标签,可以识别哪些 GRPC 服务器正在那里运行。

例如,我有 APP1 应用程序为 GRPC 服务 a、b、c 提供服务。 APP1前面有一个服务连接到8000端口,标签为a,b,c。因此,当集群中的一个组件需要连接到服务时,比如“b”,它会查找具有标签“b”的服务,并连接到其中一个的端口 8000。这样,我可以以不同的方式对 GRPC 服务进行分组,部署它们,它们都可以找到彼此。

我开始考虑另一种方法。我不想为每个应用程序提供一个带有标签的服务,而是希望为同一个 app:port 提供多个服务(每个 GRPC 服务一个),但名称不同。所以在这个新方案中,APP1 将拥有三个服务,a、b 和 c,它们都连接到同一个 app:port。客户端只需查找名称“b”即可找到 GRPC 服务器“b”。

问题是:您是否发现将多个具有不同名称的服务连接到同一应用程序的同一端口并暴露同一端口有任何潜在问题?即地址a:8000b:8000c:8000都指向APP1:8000

【问题讨论】:

    标签: kubernetes kubernetes-service


    【解决方案1】:

    老实说,只要您的应用程序在内部识别出客户端正在尝试与a:8000b:8000c:8000 通信,我看不出有任何问题。本质上,在这种情况下,您会在容器中找到一个端口8000。这类似于每个服务的不同 HTTP 端点,例如 https://myendpoint:8000/ahttps://myendpoint:8000/bhttps://myendpoint/c

    请注意,8000 将是容器中的端口,但 Kubernetes 将使用节点上的随机端口将流量转发到容器中的 8000

    【讨论】:

    • 谢谢。一旦客户端获得端点,它就会创建一个 GRPC 客户端,然后服务器知道它是 a、b 还是 c。关键是能够独立于部署结构找到服务。这与同一服务的多个 http 端点不同,因为在该示例中它们都具有相同的主机名。对于多个服务,DNS 将有几个不同的名称解析到同一个地址。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 2019-08-29
    • 2018-12-05
    相关资源
    最近更新 更多