【问题标题】:How to expose Kubernetes-hosted RabbitMQ to the outside?如何将 Kubernetes 托管的 RabbitMQ 暴露给外部?
【发布时间】:2020-08-10 06:11:37
【问题描述】:

我们使用安装了 HAProxy Ingress 的 kubernetes 集群。我们想在 kubernetes 集群之外公开 RabbitMQ。这怎么可能?

要求:这是一个基于 OpenShift 的共享 k8s 集群,其中暴露服务的唯一方法是使用入口。

  1. Management-UI 提供基本的 REST 端点,不应用于大量数据
  2. STOMP-Websockets 看起来真的没有维护。不仅是协议,还有客户端库
  3. MQTT-Websockets 看起来不像 STOMP 那样糟糕,但也不是很面向未来
  4. 拥有 REST 服务可能需要大量工作
  5. AMQP 无法通过 HAProxy 公开

我无法想象我们是第一个需要连接到托管在 Kubernetes 中的 RabbitMQ 的人?!?

客户端需要基于.net

【问题讨论】:

  • 您是在询问有关连接到 RabbitMQ 服务的包的建议,还是如何从 docker 容器中公开 RabbitMQ 服务?
  • 我们希望将 RabbitMQ 暴露在 kubernetes 集群之外。这怎么可能?最佳实践。
  • 使用 docker 文档 here 中描述的端口映射。基本上,RabbitMQ 默认侦听端口 5672,但您可以将其映射到任何外部端口。另外,如果您的问题是关于如何公开 RabbitMQ,那么为什么要声明/询问您肯定不是第一个,并且客户端需要基于 .NET
  • 可以,但是除了 HTTP 协议之外,kubernetes 不会暴露 TCP/UDP 流量
  • Kubernetes 不公开任何东西,它编排各个 docker 容器,容器本身公开 TCP/UDP 端口。但是,您可以使用容器规范的 containerPort 选项配置要向 Kubernetes 公开的端口

标签: c# .net kubernetes rabbitmq


【解决方案1】:

只需为要在集群外公开的每个组件定义Serviceof typeNodePort 默认情况下,您必须将组件的端口“映射”到 [32000-32767] 范围内的端口,然后您就可以使用这些端口访问组件

基本上,NoperPort 服务将使集群的每个节点都侦听该服务的端口,并将流量路由到正确端口上的正确 pod。对于 Ingress/Routes 没有协议限制

k8s services

OCP doc on nodeport

[更新]
这根本不能解决问题,因为“公开服务的唯一方法是使用入口。

【讨论】:

  • Ingress 不会暴露任意端口或协议。向 Internet 公开 HTTP 和 HTTPS 以外的服务通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的服务。
  • @masterchris_99 准确。那么在哪些 Nodeport 类型的定义服务中不能满足您的需求呢?
  • 正如我在问题中所写:要求:这是一个基于 OpenShift 的共享 k8s 集群,其中公开服务的唯一方法是使用入口
  • kubernetes Ingress 资源只能导出 HTTP(S) 服务,因此您不能使用它来公开任意二进制/文本协议,就像 RabbitMQ 使用的那些(参见 rabbitmq.com/protocols.html)。 “Ingress 不会公开任意端口或协议。向 Internet 公开 HTTP 和 HTTPS 以外的服务通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的服务。” (来自kubernetes.io/docs/concepts/services-networking/ingress
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多