【问题标题】:kubernetes nodePort service on a range范围内的 kubernetes nodePort 服务
【发布时间】:2020-04-09 00:16:46
【问题描述】:

我想在 3000-14000 之间的所有端口上公开我的应用程序。为此,我通过更新 kubeapi-server 清单文件字段“--service-node-port-range=3000-14000”更改了默认的 nodePort 范围 30k - 32767。对我来说,按照下面的模板手动指定所有端口号几乎是不可能的。

apiVersion: v1
kind: Service
metadata: 
   name: myapp-service
spec:
  type: nodePort
  selector:
   app: myapp
  ports:
  - targetPort: 3000
    port: 3000
    nodePort: 3000
  ...................
  ...................
 - targetPort: 14000
    port: 14000
    nodePort: 14000

我们是否有任何其他替代解决方案/插件,以便打开范围 3k - 14k 之间的所有端口。

【问题讨论】:

  • 你为什么要在所有 ~11000 个端口上公开你的服务?
  • 我的应用程序不通过预定义的静态端口发送/输出信息,而是自动分配范围在 3k 到 14k 之间的端口。
  • 那么在这种情况下,使用nodePort 将如何帮助您?专用端口号主要用于允许传入流量。
  • 好的,让我详细介绍一下。我的应用程序是一个单体应用程序,它结合了 11k 个不同的服务,每个服务使用一个特定的端口但在同一个应用程序下(还不是微服务)。我想公开所有这些 11k 服务。
  • 编写一个脚本来创建这个模板。为什么你有 11k 种不同的服务?

标签: kubernetes kubernetes-ingress istio kubernetes-service


【解决方案1】:

很遗憾,Kubernetes 还不支持exposing range of ports(在Docker 中是可能的)。

作为一种解决方法,使用 Helm templates 在 values.yaml 文件中创建带有服务模板和端口的图表。或者创建一个脚本来自动创建服务 yaml 以公开每个端口。

【讨论】:

  • 伤心!如果 k8s 能支持这个功能就太好了。谢谢你的澄清。
【解决方案2】:

嗯,根据 cmets,这与拥有 11k 应用程序(原文如此!)相同。
所以你必须以我认为的“正常”方式来做......这意味着你必须手动映射所有 11k 端口。

然而,为了让它不那么痛苦,你可以省略nodePort 属性。 Kubernetes 会自动分配一个未使用的。

【讨论】:

  • 我指定了 nodePort 属性,因为我要求我的 targetPort 和 NodePort 相同。无论如何感谢您的合理回答。您对“服务网格”Istio 有什么想法,可以通过使用它来实现吗?
  • 是的,我知道(一点)Istio。但是,我知道服务网格的原理,但我不知道它将如何解决您的问题。它们本质上是为了促进可观察性、可靠性和安全性。他们不会自动填充您的服务(或者至少我不知道该功能)。此外,如果您只是不想编写所有 yaml 文件(这是可以理解的),您仍然可以对其进行编码。只需编写一个 bash/python/java/[插入您最喜欢的语言] 脚本来编辑您的文件。这就是我会做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 2021-06-21
  • 2022-12-11
  • 1970-01-01
相关资源
最近更新 更多