Make rabbitmq cluster publicly accesible

4/16/2019

I am using this helm chart to configure rabbitmq on k8s cluster: https://github.com/helm/charts/tree/master/stable/rabbitmq

How can I make cluster accessible thru public endpoint? Currently, I have a cluster with below configurations. I am able to access the management portal by given hostname (publicly endpoint, which is fine). But, when I checked inside the management portal cluster can be accessible by internal IP and/or hostname which is: rabbit@rabbitmq-0.rabbitmq-headless.default.svc.cluster.local and rabbit@<private_ip>. I want to make cluster public so all other services which are outside of VNET can connect to it.

helm install stable/rabbitmq --name rabbitmq \
  --set rabbitmq.username=xxx \
  --set rabbitmq.password=xxx \
  --set rabbitmq.erlangCookie=secretcookie \
  --set rbacEnabled=true \
  --set ingress.enabled=true \
  --set ingress.hostName=rabbitmq.xxx.com \
  --set ingress.annotations."kubernetes\.io/ingress\.class"="nginx" \
  --set resources.limits.memory="256Mi" \
  --set resources.limits.cpu="100m"
-- Ronak Patel
kubernetes
kubernetes-helm
rabbitmq

2 Answers

4/16/2019

From your Helm values passed, I see that you have configured your RabbitMQ service with an Nginx Ingress.

You should create a DNS record with your ingress.hostName (rabbitmq.xxx.com) directed to the ingress IP (if GCP) or CNAME (if AWS) of your nginx-ingress load-balancer. That DNS hostname (rabbitmq.xx.com) is your public endpoint to access your RabbitMQ service.

Ensure that your nginx-ingress controller is running in your cluster in order for the ingresses to work. If you are unfamiliar with ingresses:
- Official Ingress Docs
- Nginx Ingress installation guide
- Nginx Ingress helm chart

Hope this helps!

-- Frank Yucheng Gu
Source: StackOverflow

4/16/2019

I was not tried with Helm but I was build and deploy to Kubernetes directly from .yaml configure file. So I only followed the Template of Helm

For publish you RabbitMQ service out of cluster

1, You need to have an external IP:

If you using Google Cloud, run these commands:

gcloud compute addresses create rabbitmq-service-ip --region asia-southeast1
gcloud compute addresses describe rabbitmq-service-ip --region asia-southeast1
>address: 35.240.xxx.xxx

Change rabbitmq-service-ip to the name you want, and change the region to your own.

2, Configure Helm parameter

service.type=LoadBalancer

service.loadBalancerSourceRanges=35.240.xxx.xxx/32 # IP address you got from gcloud

service.port=5672

3, Deploy and try to telnet to your RabbitMQ service

telnet 35.240.xxx.xxx 5672
Trying 35.240.xxx.xxx...
Connected to 149.185.xxx.xxx.bc.googleusercontent.com.
Escape character is '^]'.

Gotcha! It's worked

FYI:

Here is base template if you want to create .yaml and deploy without Helm

service.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: rabbitmq
  labels:
    name: rabbitmq
  namespace: smart-office
spec:
  type: LoadBalancer
  loadBalancerIP: 35.xxx.xxx.xx
  ports:
    # the port that this service should serve on
  - port: 5672
    name: rabbitmq
    targetPort: 5672
    nodePort: 32672
  selector:
    name: rabbitmq

deployment.yaml

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: rabbitmq
  labels:
    name: rabbitmq
  namespace: smart-office
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: rabbitmq
      annotations:
        prometheus.io/scrape: "false"
    spec:
      containers:
      - name: rabbitmq
        image: rabbitmq:3.6.8-management
        ports:
        - containerPort: 5672
          name: rabbitmq
        securityContext:
          capabilities:
            drop:
              - all
            add:
              - CHOWN
              - SETGID
              - SETUID
              - DAC_OVERRIDE
          readOnlyRootFilesystem: true
      - name: rabbitmq-exporter
        image: kbudde/rabbitmq-exporter
        ports:
        - containerPort: 9090
          name: exporter
      nodeSelector:
        beta.kubernetes.io/os: linux

Hope this help!

-- Quynh Nguyen
Source: StackOverflow