6. prometheus oauth2
prometheus가 인증없이 접근이 가능하다. 외부에 오픈하면 안되기때문에 인증을 넣어야한다.
basic으로 처리도 가능하다. 그러나 난 oauth2를 사용하기로 결정
oauth2를 사용하는 경우에는 oauth2_proxy를 사용하여 prometheus에 접근할 수 있도록 해야 한다.
flow diagram

nginx proxy가 트래픽을 oauth2-proxy 로 보낸다. 로그인정보가 없으면 로그인 화면을 보여준다. 로그인 버튼을 누르면 auth0.com으로 가서 로그인을 한후 다시 oauth2-proxy로 돌아온다. 이제 로그인이 성공하였으므로 oauth2-proxy는 트래픽을 prometheus로 보낸다.
nginx에서는 ssl을 추가해두기 바란다.
auth0.com
앱을만들고 callback url을 설정한다.
secret/clientid를 적어둔다.

oauth2_proxy
https://oauth2-proxy.github.io/oauth2-proxy/docs/
create OAUTH2_PROXY_COOKIE_SECRET
dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64 | tr -d -- '\n' | tr -- '+/' '-_'; echo
이걸 아래 파일에 넣는다.
docker-compose
version: '3'
services:
nginx:
image: nginx:1.23.3-alpine
container_name: nginx
depends_on:
- prometheus
- grafana
ports:
- 80:80
- 443:443
volumes:
- ./nginx:/etc/nginx/conf.d
- /etc/letsencrypt:/etc/letsencrypt
restart: always
oauth2-proxy:
image: quay.io/oauth2-proxy/oauth2-proxy:v7.4.0
container_name: oauth2-proxy
environment:
OAUTH2_PROXY_HTTP_ADDRESS: 0.0.0.0:4180
OAUTH2_PROXY_UPSTREAMS: http://prometheus:9090
OAUTH2_PROXY_PROVIDER_DISPLAY_NAME: Auth0
OAUTH2_PROXY_PROVIDER: oidc
OAUTH2_PROXY_OIDC_ISSUER_URL: https://yourdomain.us.auth0.com/
OAUTH2_PROXY_CLIENT_ID: xxxxxxxxxxxx
OAUTH2_PROXY_CLIENT_SECRET: xxxxxxxxxxxx
OAUTH2_PROXY_CODE_CHALLENGE_METHOD: S256
OAUTH2_PROXY_EMAIL_DOMAINS: '*'
OAUTH2_PROXY_REDIRECT_URL: https://prom.your-domain.com/oauth2/callback
OAUTH2_PROXY_COOKIE_SECRET: 'xxxxxxxxxx'
ports:
- 4180:4180
prometheus:
image: prom/prometheus:v2.40.7
container_name: prometheus
ports:
- '9090:9090'
volumes:
- ./prometheus/prometheus.yaml:/etc/prometheus/prometheus.yaml
- ./prometheus/k8s:/etc/prometheus/k8s
- ./prometheus/alerts:/etc/prometheus/alerts
- ./prometheus/file-sd:/etc/prometheus/file-sd
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yaml'
depends_on:
- alertmanager
restart: always
volumes:
prometheus_data:
nginx config
server {
server_name prom.your-domain.com;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
location / {
proxy_pass http://oauth2-proxy:4180;
}
}
확인
docker-compose up -d
도커가 실행되고 나면 https://prom.your-domain.com에 접속하면 로그인 화면이 나온다.

signin을 누르면 auth0에서 로그인을 하고 다시 prometheus로 돌아온다.
이제 prometheus화면이 보인다.

error
만약 다음 화면을 보게 된다면 oauth0-proxy와 prometheus가 서로 통신이 안되는것이다.

설정을 확인해서 수정하자.
Last updated
Was this helpful?