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/

dd if=/dev/urandom bs=32 count=1 2>/dev/null | base64 | tr -d -- '\n' | tr -- '+/' '-_'; echo

이걸 아래 파일에 넣는다.

docker-compose

https://github.com/teamsmiley/devops-public/blob/main/monitoring/6.prometheus-oauth/docker-compose.yaml

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?