{"id":16119228,"url":"https://github.com/ppatierno/enmasse-aks","last_synced_at":"2026-05-09T05:31:50.344Z","repository":{"id":82452701,"uuid":"123689279","full_name":"ppatierno/enmasse-aks","owner":"ppatierno","description":"Deploying EnMasse on Azure Container Service (AKS)","archived":false,"fork":false,"pushed_at":"2018-03-13T15:21:41.000Z","size":18,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-06T10:18:58.201Z","etag":null,"topics":["aks","amqp","azure","azure-cli","iot","kubernetes-cluster","messaging","mqtt"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ppatierno.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-03-03T12:20:12.000Z","updated_at":"2018-03-20T06:45:15.000Z","dependencies_parsed_at":"2023-06-15T18:15:40.283Z","dependency_job_id":null,"html_url":"https://github.com/ppatierno/enmasse-aks","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ppatierno/enmasse-aks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppatierno%2Fenmasse-aks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppatierno%2Fenmasse-aks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppatierno%2Fenmasse-aks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppatierno%2Fenmasse-aks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ppatierno","download_url":"https://codeload.github.com/ppatierno/enmasse-aks/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppatierno%2Fenmasse-aks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32808399,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"online","status_checked_at":"2026-05-09T02:00:06.633Z","response_time":123,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aks","amqp","azure","azure-cli","iot","kubernetes-cluster","messaging","mqtt"],"created_at":"2024-10-09T20:53:41.521Z","updated_at":"2026-05-09T05:31:50.318Z","avatar_url":"https://github.com/ppatierno.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# enmasse-aks\n\nAbout deploying EnMasse on a Kubernetes cluster provided by Azure Container Service (AKS).\n\n## Azure CLI\n\nIn order to interact with Azure and handling all the related services and resources, the [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest) can be used instead of the [web portal](https://portal.azure.com).\n\n### Installation\n\nThere are different ways for installing the Azure CLI 2.0 in order to manage Azure resources from the console.\nMore information on doing that [here](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest).\n\nIf you have Docker already installed on the PC, a really simple way could be using it to run a standalone Linux container with the Azure CLI 2.0 pre-installed. The big advantage of this solution is to start really quickly without installing any tools on the local PC.\nMore information on doing that [here](https://docs.microsoft.com/en-us/cli/azure/run-azure-cli-docker?view=azure-cli-latest).\n\nIn order to pull and run the above container, execute the following command :\n\n    docker run -it microsoft/azure-cli\n\nThe Azure CLI 2.0 is now available as `az` command in the `/usr/local/bin` path.\nJust to check that all is working fine and `az` is available in the running container, execute :\n\n    bash-4.3# az --help\n\n### Login\n\nThe next step is executing the login as described [here](https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli?view=azure-cli-latest) and the simplest way is the \"Interactive login\".\n\n    az login\n\nAnd follow the procedure using the provided code in the related page in the web browswer.\nOn success, JSON string is printed on the console containing all the information about the logged user and the related Azure subscription.\n\n## Azure Container Service (AKS)\n\nAKS is an Azure service which simplify the deployment, management and operations of Kubernetes. In order to deploy a Kubernetes cluster on Azure, you can avoid to create different VMs for the nodes and then installing Kubernetes on the bare metal making the cluster.\nAKS is a fully managed Kubernetes container orchestration service which deploy a Kubernetes cluster for you in a really simple way.\n\n\u003e Other than Kubernetes, AKS supports other orchestrators like Docker Swarm or CD/OS\n\n### Enabling AKS\n\nAt the time of writing, AKS is still in preview so it's needed to \"enable\" it for the current subscription.\n\n    az provider register -n Microsoft.ContainerService\n\nThe Kubernetes cluster that we are going to deploy is made by different Azure resources which need to be grouped. For this reason creating a resource group is the next step in the cluster creation process.\n\n    az group create --name k8sgroup --location westeurope\n\n### Provisioning the Kubernetes cluster\n\nIn order to deploy a Kubernetes cluster named `k8scluster` with only `1` node and using the previously created resource group `k8sgroup` for grouping all the related Azure resources, run the following command.\n\n    az aks create --resource-group k8sgroup --name k8scluster --node-count 1 --generate-ssh-keys\n\nThe command needs several minutes to complete and after that it return a JSON string with all the cluster information.\n\n### Connect to the cluster\n\nIn order to interact with the Kubernetes cluster, the `kubectl` tool is needed. For installation and set up information see [here](https://kubernetes.io/docs/tasks/tools/install-kubectl/).\n\nAnother simple way to install `kubectl` is through the Azure CLI.\n\n    az aks install-cli\n\nFinally, `kubectl` needs to be configured in order to connect the Kubernetes cluster.\n\n    az aks get-credentials --resource-group k8sgroup --name k8scluster\n\nTo check the connection to the cluster, let's show the nodes.\n\n    kubectl get nodes\n\n### Delete the cluster\n\nWhen the cluster isn't needed anymore, it's possible to delete the entire resource group.\n\n    az group delete --name k8sgroup --yes --no-wait\n\n## EnMasse\n\nAt the time of writing the latest EnMasse version is the 0.17.0 that you can dowload from the [releases page](https://github.com/EnMasseProject/enmasse/releases) or just running the following command for unpacking it as well.\n\n    wget https://github.com/EnMasseProject/enmasse/releases/download/0.17.0/enmasse-0.17.0.tgz\n    tar -xvzf enmasse-0.17.0.tgz\n\nThen move to the unpacked folder and run the deployment script for Kubernetes :\n\n    cd enmasse-0.17.0\n    deploy-kubernetes.sh\n\nAfter a while a set of Pods should be running :\n\n    kubectl get pods -n enmasse\n\n    NAME                                 READY     STATUS    RESTARTS   AGE\n    address-controller-342601593-mqf5c   1/1       Running   0          59s\n    admin-828300946-r6w0s                2/2       Running   0          53s\n    mqtt-gateway-1247149937-8gqcb        2/2       Running   0          53s\n    mqtt-lwt-3794926199-365rh            1/1       Running   0          52s\n    none-authservice-2472962060-h8ltm    1/1       Running   0          1m\n    qdrouterd-3390838898-33jx5           2/2       Running   1          52s\n    subserv-3643744501-n2925             1/1       Running   0          52s\n\nOther than the deployed services, it's useful to exposing the REST API as well in order to create addresses using the command line sending HTTP requests using `curl`.\n\n    kubectl apply -f kubernetes/addons/external-lb.yaml -n enmasse\n\nTaking a look at services, some of them are exposed externally through load balancer and external IP addresses.\n\n    kubectl get services -n enmasse\n\n    NAME                 CLUSTER-IP     EXTERNAL-IP      PORT(S)                                           AGE\n    address-controller   10.0.90.122    \u003cnone\u003e           443/TCP                                           6m\n    console              10.0.206.150   \u003cnone\u003e           8081/TCP                                          6m\n    console-external     10.0.201.217   40.68.154.198    8081:31810/TCP                                    6m\n    messaging            10.0.219.206   \u003cnone\u003e           5672/TCP,5671/TCP,55671/TCP,56671/TCP,55672/TCP   6m\n    messaging-external   10.0.92.180    52.166.123.203   5671:31207/TCP                                    6m\n    mqtt                 10.0.239.201   \u003cnone\u003e           1883/TCP,8883/TCP                                 6m\n    mqtt-external        10.0.24.149    52.174.51.191    8883:32718/TCP                                    6m\n    none-authservice     10.0.247.190   \u003cnone\u003e           5671/TCP                                          6m\n    queue-scheduler      10.0.85.63     \u003cnone\u003e           5672/TCP                                          6m\n    ragent               10.0.21.137    \u003cnone\u003e           5671/TCP                                          6m\n    restapi-external     10.0.46.5      13.93.81.228     443:30772/TCP                                     2m\n    subscription         10.0.177.25    \u003cnone\u003e           5672/TCP                                          6m\n\n\nThe web console for handling address is accessible through the `console-external` service, opening a browser at `https://40.68.154.198:8081`.\nThe related REST API are accessible at `https://13.93.81.228:443/apis/enmasse.io/v1`.\n\n### Deploying addresses\n\nIn order to create some addresses as examples, use the following `addresses.json`.\n\n```json\n{\n  \"apiVersion\": \"enmasse.io/v1\",\n  \"kind\": \"AddressList\",\n  \"items\": [\n    {\n      \"spec\": {\n        \"address\": \"myqueue\",\n        \"type\": \"queue\",\n        \"plan\": \"sharded-queue\"\n      }\n    },\n    {\n      \"spec\": {\n        \"address\": \"mytopic\",\n        \"type\": \"topic\",\n        \"plan\": \"sharded-topic\"\n      }\n    },\n    {\n      \"spec\": {\n        \"address\": \"myanycast\",\n        \"type\": \"anycast\",\n        \"plan\": \"standard-anycast\"\n      }\n    },\n    {\n      \"spec\": {\n        \"address\": \"mymulticast\",\n        \"type\": \"multicast\",\n        \"plan\": \"standard-multicast\"\n      }\n    }\n  ]\n}\n```\n\nIt's needed to POST this JSON file to the REST API.\n\n    curl -X POST -H \"content-type: application/json\" --data-binary @addresses.json -k https://13.93.81.228:443/apis/enmasse.io/v1/addresses/default\n\nThe addresses will be created in the `default` address space.\n\n\u003e if you don't have `curl` but `wget` you can use it in the following way `wget --header=\"content-type: application/json\" --post-file=addresses.json --no-check-certificate https://52.166.6.51:443/apis/enmasse.io/v1/addresses/default`\n\n### Connecting with AMQP\n\nUsing Qpid Proton Python examples, [sender](http://qpid.apache.org/releases/qpid-proton-0.18.0/proton/python/examples/simple_send.py.html) and [receiver](http://qpid.apache.org/releases/qpid-proton-0.18.0/proton/python/examples/simple_recv.py.html).\n\nRunning the receiver for getting 10 messages.\n\n    ./simple_recv.py -a \"amqps://52.166.123.203:5671/myanycast\" -m 10\n\nRunning the sender for sending 10 messages.\n\n    ./simple_send.py -a \"amqps://52.166.123.203:5671/myanycast\" -m 10\n\n\u003e There is no need for getting TLS certificates from the AMQP exposed endpoint because the above clients don't do the verification.\n\n### Connecting with MQTT\n\nFirst getting TLS certificates.\n\n    mkdir -p certs\n    kubectl get secret external-certs-mqtt -o jsonpath='{.data.tls\\.crt}' -n enmasse | base64 -d \u003e certs/tls.crt\n\nUsing MQTT [sender](https://raw.githubusercontent.com/EnMasseProject/enmasse/master/documentation/design_docs/examples/tls_mqtt_send.py) and [receiver](https://raw.githubusercontent.com/EnMasseProject/enmasse/master/documentation/design_docs/examples/tls_mqtt_recv.py).\n\nRunning the receiver.\n\n    ./tls_mqtt_recv.py -c 52.174.51.191 -p 8883 -t mytopic -q 1 -s ./certs/tls.crt\n\nRunning the server.\n\n    ./tls_mqtt_send.py -c 52.174.51.191 -p 8883 -t mytopic -q 1 -s ./certs/tls.crt -m \"Hello EnMasse\"","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fppatierno%2Fenmasse-aks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fppatierno%2Fenmasse-aks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fppatierno%2Fenmasse-aks/lists"}