The standard kube-prometheus install is a good starting point, but on a bare-metal cluster it usually stops one step short of being conveniently usable.
That missing step is what this note was about: getting Prometheus and Grafana onto stable external IPs through MetalLB, and fixing the RBAC when the default permissions were not enough.
1. Install kube-prometheus
The base install was:
| |
That gets the stack into the cluster, but it does not guarantee that the services are externally reachable the way you want.
2. Deal with the Network Policies
The source note explicitly removed the monitoring namespace network policies because they blocked the external access pattern that was needed:
| |
I would treat that as a temporary or environment-specific choice, not a universal best practice. Sometimes the right move is to modify those policies instead of deleting them.
3. Add MetalLB
The MetalLB install flow was:
| |
Then define an address pool and an advertisement:
| |
The real addresses from the note are replaced here with documentation-safe examples.
4. Convert the Monitoring Services to LoadBalancer
Once MetalLB is ready, exposing the services is simple:
| |
That is the point where the monitoring stack stops feeling theoretical and starts feeling usable.
5. Patch the RBAC if the Default Install Is Not Enough
The stock prometheus-k8s role in the note needed extra resource permissions:
| |
This is exactly the kind of thing polished install guides tend to skip. In real clusters, the “works on paper” RBAC is sometimes not enough for the observability you actually want.
Closing Thought
The install itself is not the interesting part here. The interesting part is what made the stack practical:
- the monitoring namespace was reachable
- MetalLB supplied stable service IPs
- Prometheus had the permissions it needed
That is the difference between “deployed” and “actually usable.”