kubernetesnginxminikubeactivemq-artemisportforwarding

nginx configuration for accessing ActiveMQ Artemis web console inside minikube


I'm setting up minikube to run services which will communicate via ActiveMQ Artemis.

In order to access the services from other machines, I set up nginx on the host, which forwards from port 19000 to the Ingress Controller port

server {
    listen       19000;
    listen       [::]:19000;
    server_name  _;
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
        proxy_pass http://192.168.58.2:32076; # Ingress controller port
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }


    error_page 404 /404.html;
    location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
}

So this works for me, so far. Now I've deployed ActiveMQ Artemis.

minikube service list
|---------------|------------------------------------|--------------|---------------------------|
|   NAMESPACE   |                NAME                | TARGET PORT  |            URL            |
|---------------|------------------------------------|--------------|---------------------------|
| default       | artemis-web                        |         8161 | http://192.168.58.2:30001 |

and I can access it with curl -L http://192.168.58.2:30001 via the nodeport.

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8" />
  <title>Hawtio</title>
  <base href='/console/'>
  <link id="favicon" rel="icon" type="image/x-icon" href="img/favicon.ico?v=1">

  <link rel="stylesheet" href="css/lib-6a1e4ce9ea.css"/>

  <link rel="stylesheet" href="css/app-9653e9917c.css"/>

  <!-- branding -->
  <link id="branding" rel="stylesheet" type="text/css" href="" />

  <script src="js/lib-e53c220218.js" defer></script>

  <script src="js/app-fafe513f4b.js" defer></script>
</head>


<body>
  <hawtio-login></hawtio-login>
</body>

But I can't seem to create an nginx server or location mapping to access the web console from my host machine.

For example, adding this:

location /artemis/ {
    proxy_pass http://192.168.58.2:30001;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

and calling http://myip:19000/artemis/ results in

HTTP ERROR 404 Not Found
URI:    /artemis/
STATUS: 404
MESSAGE:    Not Found
SERVLET:    -

Similar results if i make a new server on 19001 that forwards to 30001.

Interestingly, if I try console since I imagine it tries to redirect to :8161/console

location /console/ {
    proxy_pass http://192.168.58.2:30001;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

then curl -L http://myip:19000/console/ says Failed to connect to myip port 80: Connection refused which implies that it's redirecting to port 80 somehow. (This isn't configured anywhere).

Anyone managed to access the web console inside minikube?


Solution

  • I successfully use ArtemisCloud Operator to deploy ActiveMQArtemis on minikube and access the console. The operator create an ingress resource if the spec.console.expose is true, i.e.

    apiVersion: broker.amq.io/v1beta1
    kind: ActiveMQArtemis
    metadata:
      name: my-artemis
    spec:
      console:
        expose: true
        ingressHost: my-artemis.my-domain.io
    
    $ curl -Lv --proxy http://192.168.49.2:80 http://my-artemis.my-domain.io
    

    I created a nigix container based on your config and it worked. I only changed the proxy_pass parameter to <MINIKUBE IP>:80(use the command minikube ip to get <MINIKUBE IP>), i.e.

    $ docker run --name my-nginx --rm -it --network host -p 19000:19000 -v ./nginx.conf:/etc/nginx/nginx.conf:ro nginx
    
    $ curl -Lv --proxy http://localhost:19000 http://my-artemis.my-domain.io