Spring Boot 如何在除了HTTP或HTTPS之外K8中创建服务(AMQP)和入口资源?

rbl8hiat  于 2023-02-04  发布在  Spring
关注(0)|答案(1)|浏览(118)

如何在除了HTTP或HTTPS之外K8中创建服务(AMQP)和入口资源?
我们有一个要求,我们的java-spring-bot应用程序需要通过443/80端口发送请求,我们需要在端口443/80上接收该请求,并将其重定向到我们的rabbitmq pod,它运行在amqp协议上,而不是http/https上。
我不知道到目前为止这是可能的或不可能的,但我们已经创建了入口资源,用它来重定向请求到我们的rabbitmq部署/pod。
下面是入口资源定义。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ing-rabbitmq-amqp
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - http:
       paths:
        - path: /amqp
          pathType: Prefix
          backend:
            service:
              name: rabbitmq-amqp
              port:
                number: 5671

但是我们正在通过这个配置使java应用程序连接到rabbitmq,我们收到了错误消息。
从我们的Java应用程序

2023-02-03 07:13:51.031  INFO 1 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'
2023-02-03 07:13:51.106  INFO 1 --- [           main] o.s.a.r.c.CachingConnectionFactory       : Attempting to connect to: [10.25.119.247/amqp:80]
2023-02-03 07:13:51.125  INFO 1 --- [           main] o.s.a.r.l.SimpleMessageListenerContainer : Broker not available; cannot force queue declarations during start: java.net.UnknownHostException: 10.25.119.247/amqp


Usually our app throws this messages for successful connection with rabbitmq on port 5671

2023-02-03 07:15:44.087  INFO 1 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'
2023-02-03 07:15:44.150  INFO 1 --- [           main] o.s.a.r.c.CachingConnectionFactory       : Attempting to connect to: [10.25.119.247:5671]
2023-02-03 07:15:46.182  INFO 1 --- [           main] o.s.a.r.c.CachingConnectionFactory       : Created new connection: rabbitConnectionFactory#2f01783a:0/SimpleConnection@5b202a3a [delegate=amqp://test_bot_user@10.25.119.247:5671/test, localPort= 58840]

当nginx-ingress-controller pod抛出以下错误消息时。

2023/02/03 07:20:08 [error] 4299#4299: *209766772 recv() failed (104: Connection reset by peer) while proxying and reading from upstream, client: 10.25.119.247, server: 0.0.0.0:5671, upstream: "192.168.52.60:5671", bytes from/to client:5467/6570, bytes from/to upstream:6570/5467
[5.161.119.202] [03/Feb/2023:07:20:08 +0000] TCP 200 6570 5467 263.959

This is our serverIP: 10.25.119.247
This is rabbitmq-pod IP which is coming in that log: 192.168.52.60

那么首先,是否有可能在其他协议(如amqp)上创建k8s服务和入口资源?
其次,如果第一个问题的答案为否,我们无法在协议http/https上的k8中创建这些资源,即使我们可以创建,但我无法实现此场景,那么如何实现客户端位于代理后面的场景(Cisco-WSA/12.5.2 - 007)希望使用我们的java-springboot应用程序(它在AMQP协议上与rabbitmq连接)只通过https端口与我们的rabbitmq-pod连接,并且不愿意在他的出站请求中打开rabbitmqtls端口5671?
如果有任何疑问,请告诉我?

cgfeq70w

cgfeq70w1#

我认为这将是不可能的Nginx入口就像这样,因为它支持HTTP****协议
Nginx ingress controller doc
尽管amqp使用TCP作为传输协议,但在Nginx入口控制器上实现tcp_passthrough配置可能会成功。

    • 更新日期:**

入口不支持TCP或UDP服务。因此,此入口控制器使用标志--tcp-services-configmap
因此,您可以在入口控制器上公开一个端口,并使用它访问TCP****服务
ingress-nginx名称空间中创建配置Map

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  5672: "default/rabbitmq-service:5672"

使用arg按原样更新nginx部署,而不进行任何更改

--tcp-services-configmap=$(POD_NAMESPACE)/tcp-services

最后,在nginx入口的部署中添加端口配置,如文档所示。
https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/

相关问题