Kubernetes WordPress with Remote MySQL Access

Deploying WordPress to Azure Kubernetes Service (AKS) was a great exercise for me to learn and improve my Helm and Kubernetes knowledge. Bitnami has a Helm chart for WordPress on AKS.

The most ideal way of doing this is to modify the Helm Charts to include an additional load balancer, but, the purpose of this blog post is to expose people to the command line and how Kubernetes manages incoming traffic in a cloud environment. This also may be a functionality that you may want to enable only during maintenance. This blog post will teach you how to expose the MySQL port 3306 through a load balancer via command-line.

https://docs.bitnami.com/kubernetes/get-started-aks/
https://bitnami.com/stack/wordpress/helm

Pulling the Charts

You will need to do certain things like add the Helm repository and pull the charts locally.

helm repo add azure-marketplace https://marketplace.azurecr.io/helm/v1/repo

The Helm Pull command will pull the chart locally and the --untar flag will expand it.

helm pull azure-marketplace/wordpress --untar

Modifying Helm Charts

In order to have remote access, the easiest way is to enable the root user which by default allows remote access. This configuration setting is found in the values.yaml file. Uncommenting the value rootUser and setting a password value will enable the root user.

Deploying WordPress to AKS with Helm

Assuming you have an Azure Kubernetes Service set up and running in the cloud and you know how to connect using Azure CLI this part should be a breeze.

Login to Azure

az login --use-devicde-code
az account set --subscription "SUBSCRIPTION-NAME"
az aks get-credentials --name aks-cluster --resource-group aks-resource-group

Deploy Helm Charts

helm install my-release azure-marketplace/wordpress

Verifying if the install was successful is easy…

kubectl get all

Exposing MySQL Server via Load Balancer

With cloud infrastructure providers like Azure Kubernetes Service (AKS) the best way to expose a port is through a load balancer type.

kubectl expose pod/wp-mariadb --name wp-mariadb-lb --port=3306 --target-port=3306 --type=LoadBalancer

Connecting to the MySQL Database Remotely

I highly recommend using SQLyog it’s been very good to me for many years.

Further Reading

https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#expose
https://docs.microsoft.com/en-us/azure/aks/concepts-network#services
https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0