Kubernetes nginx ingress rabbitmq management and kibana

6/23/2019

On my AKS cluster I have a Nginx ingress controller that I used to reverse proxy my kibana service running on the AKS. I want to however add another http services through the ingress, rabbitmq management console.

I'm unable to get both to work with the following configuration:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-aegis
  namespace: dev
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/rewrite-target: /    
spec:
  tls:
  - hosts:
    - dev.endpoint.net
    secretName: dev-secret   
  rules:
  - host: dev.endpoint.net
    http:
      paths:
      - path: /
        backend:
          serviceName: kibana-kibana
          servicePort: 5601
      - path: /rabbit
        backend:
          serviceName: rabbitmq
          servicePort: 15672

The Kibana works fine at root however RabbitMQ fails to load with a 503 with any path except /. If RabbitMQ's path is / then it works fine but then Kibana won't run.

I assume this is because internally they are sitting on the root aka localhost:15672 so it redirects to / on dev.endpoint.net.

How do I have multiple services like Kibana and RabbitmQ running from one endpoint?

-- Softey
azure-aks
kibana
kubernetes
nginx
rabbitmq

2 Answers

6/23/2019

One idea would be to do host name based rules to switch backends. However, this would require a wildcard or SAN SSL certificate.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-aegis
  namespace: dev
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/rewrite-target: /    
spec:
  tls:
  - hosts:
    - dev.endpoint.net
    - rabbit.endpoint.net
    secretName: dev-secret   
  rules:
  - host: dev.endpoint.net
    http:
      paths:
      - path: /
        backend:
          serviceName: kibana-kibana
          servicePort: 5601
  - host: rabbit.endpoint.net
    http:
      paths:
      - path: /
        backend:
          serviceName: rabbitmq
-- Andy Shinn
Source: StackOverflow

6/25/2019

What you need to do is set the basePath for kibana to /kibana

See the below url

https://www.elastic.co/guide/en/kibana/current/settings.html

You are looking to configure server.basePath to /kibana. Then this will sort the reverse proxying issues and you can keep the MQ one directly on root /

You can also set SERVER_BASEPATH environment variable in your kibana pod and it will automatically pick the base path from that variable

-- Tarun Lalwani
Source: StackOverflow