kubernetesrabbitmqcloudkubernetes-ingressrabbitmq-management

Expose rabbitmq managment via kubernetes ingrress


I have a kubernetes cluster with a deployment of rabbitmq. I want to expose the rabbitmanagment UI in that way I can access to it in my browser. To do that I have a deployment, service and ingress file:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: rabbitmq
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rabbitmq
  template:
    metadata:
      labels:
        app: rabbitmq
    spec:
      containers:
        - image: rabbitmq:3.8.9-management
          name: rabbitmq
          ports:
            - containerPort: 5672
            - containerPort: 15672
          resources: {}
      restartPolicy: Always

The service:

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
spec:
  ports:
    - name: "5672"
      port: 5672
      targetPort: 5672
    - name: "15672"
      port: 15672
      targetPort: 15672
  selector:
    app: rabbitmq

Ingress file

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
spec:
  rules: 
  - http:
      paths:
      - path: /rabbitmq
        pathType: Prefix
        backend:
          service:
            name: rabbitmq
            port:
              number: 15672

When I type http://localhost/rabbitmq in my browser I get this nginx error: {"error":"Object Not Found","reason":"Not Found"}

But when I enter in some other pod and I type: curl http://rabbitmq:15672 It get the a response of the website.

Im new to kubernetes, I havent found any relevant solution to my problem, If someone could help me I would very grateful!!

Thanks for reading.


Solution

  • Try:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
    spec:
      ingressClassName: nginx  # <-- assumed you only have 1 ingress-nginx
      rules: 
      - http:
          paths:
          - path: /rabbitmq(/|$)(.*)
            ...
    

    Request to http://localhost/rabbitmq will be seen by your rabbitmq service as /