Ingress Monitor Controller — Uptime Alerts for Kubernetes Services
There’s a common practice in Kubernetes space in which you would want to monitor your running services in Kubernetes. When you think of monitoring, there are a couple of solutions out there like UptimeRobot, StatusCake, Cabot etc that let you create monitors for your services. The problem with this is that you have to micromanage each and every single service you want to monitor i.e., creating / updating / deleting monitors manually from the vendor’s website. This is where you can benefit from our Ingress Monitor Controller.
Ingress Monitor Controller is a Kubernetes controller that will continuously watch ingresses created from services in the namespace it is running, and automatically add / remove monitors in any of the available uptime checkers. This helps you keep a check on your services and see whether they’re up and running and live. And most of all, you don’t have to manage these monitors yourself.
Since Ingress Monitor Controller runs on kubernetes and it watches ingresses, it is required that you have the following things setup:
- A kubernetes cluster
- Ingresses created for your services
Supported Uptime Services
Currently we support the following services for monitoring:
Installing it on your cluster
You can deploy Ingress Monitor Controller via 2 methods
- Applying Vanilla Manifests
- Installing via Helm
You can configure IMC for installation in 2 steps
- Add annotation to your ingresss
- Modify config.yaml file in ConfigMap
By default, the controller ignores the ingresses without a specific annotation on it. You will need to add the following annotation on your ingresses so that the controller is able to recognize and monitor the ingresses.
The annotation key is
monitor.stakater.com/enabled and you can toggle the value of this annotation between
false to enable or disable monitoring of that specific ingress.
First of all you need to modify
config.yaml file. You can see a sample of the config file below:
- name: UptimeRobot
Following are the available options that you can use to customize the controller:
For the list of providers, there’s a number of options that you need to specify. We will be using UptimeRobot for the example. The table below lists them:
You can get your UptimeRobot API Key and URL from here. Once you have them, the next step is to create alert contacts in the dashboard which will be used to send notifications.
Go to the dashboard and choose
My Settings from the top menu and scroll down until you see the following:
Add Alert Contact and create your choice of alert contacts. You can choose from email, slack, and various others.
After adding alert contacts you will need to follow this guide to see how to fetch
alertContacts from UptimeRobot to be used by IMC (IngressMonitorController). Once you have them, add it to the config as well.
At this point your
config.yaml would look like following:
- name: UptimeRobot
Deploying to Kubernetes
Now that you have your configuration setup, you can deploy IMC to Kubernetes via any of the 2 methods mentioned above.
Applying Vanilla Manifests
You can deploy the controller in the namespace you want to monitor by running the following kubectl commands:
kubectl apply -f configmap.yaml -n <namespace>
kubectl apply -f rbac.yaml -n <namespace>
kubectl apply -f deployment.yaml -n <namespace>
Note: Before applying
rbac.yaml, You need to modify the namespace in the
RoleBindingsubjects section to the namespace you want to apply
Installing via Helm
If you have configured
helm on your cluster, you can deploy the controller via helm chart located under
kubernetes/chart folder. Simply add the above config values in
values.yaml and run the following commands
helm install . --name ingressmonitorcontroller --namespace <your-namespace>
Now IMC will be up and running in the target namespace that you installed it into. Once any of your services goes down, UptimeRobot will send a notification to your alert contacts. For example, if you added a Slack WebHook as your alert contact, you will receive a notification like the following:
You can find Ingress Monitor Controller on GitHub here.
This is how we get notified if any of our services on Kubernetes go down in Stakater. For more information about us and what we do, or professional services regarding your stack / devops, visit stakater.com