Giter VIP home page Giter VIP logo

openshift-prometheus-proxy's Introduction

openshift-prometheus-proxy

openshift-prometheus-proxy is a filtering proxy for Prometheus on OpenShift. It is designed for use on shared OpenShift clusters to give customers access to kube-state-metrics and kubelet metrics of their projects only.

openshift-prometheus-proxy acts a proxy for the federation endpoint of an Prometheus installation, usually the Prometheus installation that comes with the OpenShift Container Platform. It requires authentication with a valid OpenShift bearer token. This token also determines which metrics will be filtered by the proxy. Only metrics with a namespace label whose value is a namespace the given bearer token has access to will be returned. That is users can only access metrics concerning their namespaces.

Requirements

  • OpenShift Container Platform 3.11 or later
  • OpenShift OAuth Proxy

OpenShift OAuth Proxy is used to restrict access to openshift-prometheus-proxy to select OpenShift users.

Installation

Installation of openshift-prometheus-proxy is based on OpenShift templates and parameter files. Clone the repository and copy the openshift-prometheus-proxy example parameter file:

git clone https://github.com/appuio/openshift-prometheus-proxy
cd openshift-prometheus-proxy
cp env/openshift-prometheus-proxy.env.sample env/openshift-prometheus-proxy.env

Adapt env/openshift-promtheus-proxy.env to your setup:

  • NAMESPACE: OpenShift Namespace to deploy openshift-prometheus-proxy to.
  • OPENSHIFT_PROMETHEUS_PROXY_HOSTNAME: External hostname of openshift-prometheus-proxy.
  • OPENSHIFT_PROMETHEUS_PROXY_UPSTREAM: URL of the upstream Prometheus server.
  • OPENSHIFT_PROMETHEUS_PROXY_TLS_VERIFY: How to verify the upstream SSL/TLS certificate. Can either be 'true' to verify against the root certificate bundle, 'service' to verify against the OpenShift service CA, or 'false' to don't verify at all (not recommended in production).

openshift-prometheus-proxy

openshift-prometheus-proxy can be installed with the following commands:

. env/openshift-prometheus-proxy.env
oc new-project ${NAMESPACE}
oc adm policy add-cluster-role-to-user -n ${NAMESPACE} --rolebinding-name=system:auth-delegator system:auth-delegator -z openshift-prometheus-proxy
oc adm policy add-cluster-role-to-user -n ${NAMESPACE} --rolebinding-name=cluster-monitoring-view cluster-monitoring-view -z openshift-prometheus-proxy
oc process -f template/openshift-prometheus-proxy.yaml --param-file=env/openshift-prometheus-proxy.env --ignore-unknown-parameters | oc apply -n ${NAMESPACE} -f -

The system:auto-delegator cluster role is needed by the OpenShift OAuth Proxy for bearer token authentication and the cluster-monitoring-view role is needed for read access to the OpenShift Prometheus instance.

By default customers aren't allowed to use openshift-prometheus-proxy. To give customers access the access-openshift-prometheus-proxy role needs to be added to their Prometheus service account, e.g.:

. env/openshift-prometheus-proxy.env
PROMETHEUS_NAMESPACE=<customer prometheus namespace>
PROMETHEUS_SA=<customer prometheus service account, e.g. prometheus-apps>
oc policy add-role-to-user -n ${NAMESPACE} --role-namespace=${NAMESPACE} access-openshift-prometheus-proxy system:serviceaccount:${PROMETHEUS_NAMESPACE}:${PROMETHEUS_SA} 

Usage

openshift-prometheus-proxy supports URLs of the same form as the Prometheus federation endpoint, i.e. https://<openshift-prometheus-proxy hostname>/federate?match[]=<selector>. Where <selector is any Prometheus instant vector selector, e.g. {job="kubelet"}. Additionally you can use match[]={} to select all metrics concerning your namespaces.

You can use curl to retrieve a list of available jobs: curl -kH "Authorization: Bearer $(oc sa get-token -n $PROMETHEUS_NAMESPACE $PROMETHEUS_SA)" https://${OPENSHIFT_PROMETHEUS_PROXY_HOSTNAME}/jobs. Note that some metrics have an empty job label, i.e. job="", e.g. metrics created by recording rules.

This repository contains a template with an example ServiceMonitor to scrape kubelet and kube-state-metrics through openshift-prometheus-proxy. The template can be instantiated in the customers namespaces as follows.

Copy the sample parameter file for the templates:

cp env/monitor-openshift.env.sample env/monitor-openshift.env

Adapt env/monitor-openshift.env to your setup:

  • NAMESPACE: Namespace of customer Prometheus instance.
  • PROMETHEUS_ID: Value of the prometheus label of the ServiceMonitor. Must correspond to the serviceMonitorSelector in the customers Prometheus object. Defaults to 'app'.
  • OPENSHIFT_PROMETHEUS_PROXY_SCRAPE_ENDPOINT: Endpoint of the OpenShift Prometheus Proxy to scrape, either the service or the route of the proxy.
  • OPENSHIFT_PROMETHEUS_PROXY_SCRAPE_SKIP_TLS_VERIFY: Whether to skip TLS certificate verification when scraping OpenShift Prometheus Proxy. Not recommended on production. Defaults to 'false'.

Instantiate the openshift-prometheus-proxy scrape config template in the customer Prometheus namespace:

. env/monitor-openshift.env
oc process -f template/monitor-openshift-prometheus-proxy.yaml --param-file=env/monitor-openshift.env --ignore-unknown-parameters | oc apply -n ${NAMESPACE} -f -

openshift-prometheus-proxy's People

Contributors

dtschan avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.