- Arquitetura
- Etapa 1 — Docker (Jenkins Oficial + Jolokia)
- Etapa 2 — Kubernetes (Deployment + Service)
- Etapa 3 — Monitoramento (Prometheus + Jolokia + Node Exporter)
- Segurança (boas práticas aplicadas)
Este repositório documenta a montagem de um laboratório em 3 etapas:
- Docker: Jenkins (imagem oficial) + Jolokia Agent (métricas JVM/Jenkins) com segurança
- Kubernetes (kind): implantação via Deployment + Service
- Monitoramento: Prometheus + Node Exporter + Jolokia Exporter (com Auth Proxy para Jolokia)
Ambiente:VM Ubuntu 22.04 server (VirtualBox) + Docker + kind + kubectl
projeto-jenkins/
├─ docker/
│ ├─ Dockerfile
│ ├─ docker-entrypoint.sh
│ └─ jolokia-access.xml
└─ k8s/
├─ jenkins.yaml
├─ jenkins-mon.yaml
├─ prometheus.yaml
├─ node-exporter.yaml
└─ grafana.yaml- Docker instalado e funcionando
Crie/garanta estes arquivos em docker/:
Policy mínima (somente leitura):
<?xml version="1.0" encoding="utf-8"?>
<restrict>
<commands>
<command>read</command>
<command>list</command>
<command>version</command>
</commands>
</restrict>- Criação do arquivo no diretório docker/docker-entrypoint.sh
- Criação do arquivo no diretório docker/Dockerfile
cd docker
docker build -t esig/jenkins-jolokia:2.528.3 .docker run -d --name jenkins \
-p 8080:8080 \
-p 127.0.0.1:8778:8778 \
-e JOLOKIA_USER=admin \
-e JOLOKIA_PASSWORD='<SUA_SENHA>' \
esig/jenkins-jolokia:2.528.3- Acesse: http://localhost:8080
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword- Sem auth → deve retornar 401:
curl -i http://127.0.0.1:8778/jolokia/version- Com auth → deve retornar 200:
curl -u admin:'<SUA_SENHA>' http://127.0.0.1:8778/jolokia/version- Cluster Local com Kind
kind create cluster --name esigkind load docker-image esig/jenkins-jolokia:2.528.3 --name esigkubectl apply -f k8s/jenkins.yaml
kubectl -n cicd get pods -w
kubectl -n cicd get svc- Se a porta local 8080 estiver ocupada, use 18080.
kubectl -n cicd port-forward svc/jenkins 18080:8080Acesse:
Nesta etapa:
Node Exporter coleta métricas do nó (CPU, memória, disco, rede)
Jolokia Exporter coleta métricas do Jenkins/JVM via Jolokia
Auth Proxy (Nginx sidecar) injeta Authorization no Jolokia (evita falhas e mantém Jolokia protegido)
Prometheus faz scrape de:
node-exporter:9100/metrics
jenkins-metrics:9422/metrics
kubectl apply -f k8s/prometheus.yaml
kubectl -n monitoring get pods -wkubectl apply -f k8s/jenkins-mon.yaml
kubectl -n cicd get pods -w
kubectl -n cicd get svc jenkins-metrics- Port-forward do service de métricas:
kubectl -n cicd port-forward svc/jenkins-metrics 19422:9422- Testar:
curl -s http://127.0.0.1:19422/metrics | head -n 30Port-forward do Prometheus:
kubectl -n monitoring port-forward svc/prometheus 19090:9090Acessar:
Você deve ver como UP:
- jenkins-jolokia (scrape em jenkins-metrics:9422/metrics)
- node-exporter (scrape em node-exporter:9100/metrics)
Porta 8778 protegida: no Docker foi mapeada apenas para 127.0.0.1
Basic Auth habilitado no Jolokia
PolicyRestrictor com comandos mínimos (read, list, version)
No Kubernetes, Prometheus não acessa 8778 diretamente:
usa jenkins-metrics:9422 (exporter)
Jolokia fica interno no Pod
Auth Proxy Nginx: injeta Authorization e evita expor credenciais em URL