While preparing for my Techdays session about “How ASP.NET Core and Docker will change the life of a Microsoft Developer” I was experimenting a bit with Azure Container Service and running my ASP.NET Core application on the ACS Cluster.
Together with my colleague Alex Thissen and with some help of my Xebia Colleague Mark van Holsteijn I managed to set up a ACS cluster with DCOS. Within the cluster we use the Marathon Load Balancer (marathon-lb) to redirect the traffic within the cluster to the specific container,
In this post I will describe a step by step to setup the ACS Cluster and run a simple application on it.
Generating SSH Keys
FIrst you need to have an SSH client installed and have some SSH keys that you can use. I use Putty and PuttyGen. To generate keys follow this great guide that describe the steps in detail.
Spinning up the cluster
Go the Azure Portal and spin up a new Azure Container Service Cluster. Make sure you paste in the SSH public key you just created and spin up 3 agents.
Set up an SSH tunnel and connect to DCOS
When the cluster has been created you need to set up a SSH tunnel to be able to connect to it. Open Putty and fill in the session details
Host name / IP Address: The DNS name or IP of the DCOS master
SSH / Tunnels
Create a port forwarding for port 80
SSH / Auth
Select the Private Key that you generated and point to it
Do not forget to save your session!
Configure the Marathon-LB Load Balancer
Navigate to the Universe on the left side, and search for marathon-lb. Choose install and select advanced installation. Check if the HAPROXY_GROUP is set to external
When you hit Review and install, the load balancer is being deployed.
Deploy your first ASP.NET Core Docker container
When the load balancer is configured, you can deploy your first application. For convenience, I created a Docker container with an ASP.NET Core Web Application inside. You can pull this image from Dockerhub with the tag rvanosnabrugge/tdweb
If you want to test this on a local Linux host just run the command
docker run –d –p 8080:80 rvanosnabrugge/tdweb
Then you can access the web application on localhost:8080
In the DCOS Services tab, open Marathon to manage your application.
In Marathon, add a new application and configure it
On the Docker Container Tab, point to the Docker container rvanosnabrugge/tdweb, set the Network to Bridged,
On the Ports and Discovery Tab, Add Port 80 to expose the port inside the container to the cluster
On the Labels tab we need to link this container to the Marathon Load Balancer. Add a Label
HAPROXY_GROUP and set the value to external (this label is also present on the marathon-lb)
HAPROXY_0_VHOST and set the value to a DNS name. You can use the service xip.io to get a DNS name. Just choose a name and add the IP. Something like tdweb.<IP ADDRESS>.xip.io.
For IP Address use the IP address of the Load Balancer of the agents. This can be found in t the Azure Portal.
When you hit Create Application, the Container is deployed.
Open a browser and navigate to the XIP.IO address(tdweb.<IP ADDRESS>.xip.io. ) that you created and Voila!
You can now scale up and scale down your container (s) on the cluster!
Good luck !