【问题标题】:How do I route/forward RESTful localhost calls from one specific replica set to another, without globally exposing a port?如何在不全局公开端口的情况下将 RESTful localhost 调用从一个特定副本集路由/转发到另一个副本集?
【发布时间】:2022-01-09 09:32:56
【问题描述】:

基本上,我想做的是想象你有一个副本集。这个名为 A 的副本集包含“发布”到 localhost:9000 的 pod,现在我有另一个副本集 B,其 pod 侦听 localhost:8080。我想将 A 上对 localhost:9000 的调用转移到副本集 B 到端口 8080。唯一需要注意的是,如果我有另一个副本集 C,其 pod 也侦听端口 8080,它们不应该接收流量。 https://i.stack.imgur.com/tyU0M.png

【问题讨论】:

  • 在 Kubernetes 中,您通常使用内置的名称服务器和其他原语,如服务。
  • 是的,我认为这就是我认为我可能需要做的,只是通过服务 DNS 对其进行硬编码。您能否提供一个具体示例,如何引用服务名称。会不会像这样 curl (http://:)。但是,我仍在寻找仅限 kubernetes 的配置,和/或替代方案/具体示例。
  • 服务是“仅限 kubernetes”的配置。
  • 这需要我在我的代码库中进行硬编码更改。
  • 您的代码库应该可以使用环境变量进行配置。

标签: kubernetes kubernetes-pod kubernetes-service


【解决方案1】:

只需为 B 定义一个服务。对于 A,而不是发布到本地主机,使用服务 B 的名称发布就可以了。 C 可以拥有使用相同端口的服务,但不会获得流量,因为 A 明确发布到服务 B。

apiVersion: v1
kind: Service
metadata:
  labels:
    app: app-b
  name: service-b  # <-- name of this service
spec:
  type: ClusterIP
  selector:
    app: app-b
  ports:
  - name: http
    port: 9000
    protocol: TCP
    targetPort: 8080

curl -XPOST http://service-b:9000

【讨论】:

  • 因为这样可以完成工作,这需要我对代码库中的更改进行硬编码并创建新图像。
  • 有很多方法可以传递信息,例如one。然后,您的应用可以使用信息而不是硬编码。
  • 这是真的,有趣的路线/解决方法,以及透视感谢,帮助很大。
猜你喜欢
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
相关资源
最近更新 更多