如何在Nginx Ingress中将rabbitmq端口5671公开为TCP(而不是HTTP/HTTPS)

问题描述 投票:0回答:1

我已经在我的 EKS 集群 Pod 中部署了 Rabbitmq Statefulset,并且已启动并运行,并且我还可以执行端口转发,以使用 localhost:端口号测试 Rabbitmq UI 页面服务连接。

为了实现 TCP 端口公开,我在运行 Rabbitmq pod 的默认命名空间中创建了 configmap。

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

按照上面的配置映射,我创建了 Rabbitmq 服务作为 clusterIP 服务

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
  labels:
    app: rabbitmq
spec:
  selector:
    app: rabbitmq
  ports:
   - name: http
     protocol: TCP
     port: 15672
     targetPort: 15672
   - name: amqp
     protocol: TCP
     port: 5672
     targetPort: 5672
   - name: amqps
     protocol: TCP
     port: 5671
     targetPort: 5671 

最后是 nginx ingress yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: HTTPS
  name: rabbit-ingress
spec:
  ingressClassName: nginx
  rules:
    - host:my-host.com
      http:
        paths:
          - backend:
              service:
                name: rabbitmq
                port:
                  number: 5672
            path: /
            pathType: Prefix

应用所有配置后如何测试和验证 TCP 连接端口连接。

kubernetes
1个回答
0
投票

来自官方Kubernetes文档

Ingress 不会公开任意端口或协议。将 HTTP 和 HTTPS 以外的服务公开到互联网通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的服务。

因此您可以使用 LoadBalancer 类型的服务

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
spec:
  type: LoadBalancer
  ports:
    - appProtocol: amqps
      name: amqps
      port: 5671
      protocol: TCP
      targetPort: 5671
  selector:
    app: rabbitmq
© www.soinside.com 2019 - 2024. All rights reserved.