Skip to content
This repository was archived by the owner on Apr 19, 2023. It is now read-only.

Commit eb7dacd

Browse files
authored
Merge pull request #30 from davidkirwan/oauth-proxy
Adding oauth-proxy sidecar to prometheus
2 parents aa749df + ebfdbff commit eb7dacd

File tree

8 files changed

+90
-7
lines changed

8 files changed

+90
-7
lines changed

deploy/roles/prometheus-clusterrole.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,18 @@ kind: ClusterRole
33
metadata:
44
name: prometheus-application-monitoring
55
rules:
6+
- apiGroups:
7+
- authentication.k8s.io
8+
resources:
9+
- tokenreviews
10+
verbs:
11+
- create
12+
- apiGroups:
13+
- authorization.k8s.io
14+
resources:
15+
- subjectaccessreviews
16+
verbs:
17+
- create
618
- apiGroups: [""]
719
resources:
820
- nodes

pkg/controller/applicationmonitoring/applicationmonitoring_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func (r *ReconcileApplicationMonitoring) Reconcile(request reconcile.Request) (r
142142
func (r *ReconcileApplicationMonitoring) InstallPrometheusOperator(cr *applicationmonitoringv1alpha1.ApplicationMonitoring) (reconcile.Result, error) {
143143
log.Info("Phase: Install PrometheusOperator")
144144

145-
for _, resourceName := range []string{PrometheusOperatorServiceAccountName, PrometheusOperatorName} {
145+
for _, resourceName := range []string{PrometheusOperatorServiceAccountName, PrometheusOperatorName, PrometheusProxySecretsName} {
146146
if _, err := r.CreateResource(cr, resourceName); err != nil {
147147
log.Info(fmt.Sprintf("Error in InstallPrometheusOperator, resourceName=%s : err=%s", resourceName, err))
148148
// Requeue so it can be attempted again
@@ -168,7 +168,7 @@ func (r *ReconcileApplicationMonitoring) CreatePrometheusCRs(cr *applicationmoni
168168
return reconcile.Result{Requeue: true}, err
169169
}
170170

171-
for _, resourceName := range []string{PrometheusServiceAccountName, PrometheusServiceName, PrometheusRouteName, PrometheusCrName} {
171+
for _, resourceName := range []string{PrometheusServiceAccountName, PrometheusServiceName, PrometheusCrName} {
172172
if _, err := r.CreateResource(cr, resourceName); err != nil {
173173
log.Info(fmt.Sprintf("Error in CreatePrometheusCRs, resourceName=%s : err=%s", resourceName, err))
174174
// Requeue so it can be attempted again

pkg/controller/applicationmonitoring/templateHelper.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package applicationmonitoring
22

33
import (
44
"bytes"
5+
"crypto/rand"
6+
"encoding/base64"
57
"fmt"
68
"io/ioutil"
79
"os"
@@ -21,6 +23,7 @@ const (
2123
PrometheusOperatorServiceAccountName = "prometheus-operator-service-account"
2224
PrometheusCrName = "prometheus"
2325
PrometheusRouteName = "prometheus-route"
26+
PrometheusProxySecretsName = "prometheus-proxy-secret"
2427
PrometheusServiceAccountName = "prometheus-service-account"
2528
PrometheusServiceName = "prometheus-service"
2629
AlertManagerServiceAccountName = "alertmanager-service-account"
@@ -45,6 +48,7 @@ type Parameters struct {
4548
PrometheusCrName string
4649
PrometheusRouteName string
4750
PrometheusServiceName string
51+
PrometheusSessionSecret string
4852
AlertManagerServiceAccountName string
4953
AlertManagerCrName string
5054
AlertManagerServiceName string
@@ -76,6 +80,7 @@ func newTemplateHelper(cr *applicationmonitoring.ApplicationMonitoring, extraPar
7680
PrometheusCrName: PrometheusCrName,
7781
PrometheusRouteName: PrometheusRouteName,
7882
PrometheusServiceName: PrometheusServiceName,
83+
PrometheusSessionSecret: PopulatePrometheusProxySecret(),
7984
AlertManagerServiceAccountName: AlertManagerServiceAccountName,
8085
AlertManagerCrName: AlertManagerCrName,
8186
AlertManagerServiceName: AlertManagerServiceName,
@@ -102,6 +107,15 @@ func newTemplateHelper(cr *applicationmonitoring.ApplicationMonitoring, extraPar
102107
}
103108
}
104109

110+
// Populate the PrometheusServiceName values
111+
func PopulatePrometheusProxySecret() string {
112+
p, err := GeneratePassword(43)
113+
if err != nil {
114+
log.Info("Error creating PopulatePrometheusProxySecret")
115+
}
116+
return p
117+
}
118+
105119
// load a templates from a given resource name. The templates must be located
106120
// under ./templates and the filename must be <resource-name>.yaml
107121
func (h *TemplateHelper) loadTemplate(name string) ([]byte, error) {
@@ -124,3 +138,14 @@ func (h *TemplateHelper) loadTemplate(name string) ([]byte, error) {
124138

125139
return buffer.Bytes(), nil
126140
}
141+
142+
// GeneratePassword returns a base64 encoded securely random bytes.
143+
func GeneratePassword(n int) (string, error) {
144+
b := make([]byte, n)
145+
_, err := rand.Read(b)
146+
if err != nil {
147+
return "", err
148+
}
149+
150+
return base64.StdEncoding.EncodeToString(b), err
151+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: v1
2+
data:
3+
session_secret: >-
4+
{{.PrometheusSessionSecret}}
5+
kind: Secret
6+
metadata:
7+
labels:
8+
k8s-app: prometheus-k8s
9+
name: prometheus-k8s-proxy
10+
namespace: {{.Namespace }}
11+
type: Opaque

templates/prometheus-route.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ spec:
77
port:
88
targetPort: web
99
tls:
10-
termination: edge
10+
termination: Reencrypt
1111
to:
1212
kind: Service
1313
name: {{ .PrometheusServiceName }}

templates/prometheus-service-account.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@ apiVersion: v1
22
kind: ServiceAccount
33
metadata:
44
name: prometheus-application-monitoring
5-
namespace: {{ .Namespace }}
5+
namespace: {{ .Namespace }}
6+
annotations:
7+
serviceaccounts.openshift.io/oauth-redirectreference.primary: '{"kind":"OAuthRedirectReference","apiVersion":"v1","reference":{"kind":"Route","name":"{{ .PrometheusRouteName }}"}}'

templates/prometheus-service.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,17 @@ kind: Service
33
metadata:
44
name: {{ .PrometheusServiceName }}
55
namespace: {{ .Namespace }}
6+
annotations:
7+
service.alpha.openshift.io/serving-cert-secret-name: prometheus-k8s-tls
68
labels:
79
application-monitoring: "true"
810
spec:
911
type: ClusterIP
1012
ports:
1113
- name: web
12-
port: 9090
14+
port: 9091
1315
protocol: TCP
14-
targetPort: web
16+
targetPort: oproxy
1517
selector:
1618
app: prometheus
1719
sessionAffinity: None

templates/prometheus.yaml

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,34 @@ metadata:
66
labels:
77
prometheus: {{ .ApplicationMonitoringName }}
88
spec:
9+
containers:
10+
- args:
11+
- '-provider=openshift'
12+
- '-https-address=:9091'
13+
- '-http-address='
14+
- '-email-domain=*'
15+
- '-upstream=http://localhost:9090'
16+
- '-openshift-service-account=prometheus-application-monitoring'
17+
- '-openshift-sar={"resource": "namespaces", "verb": "get"}'
18+
- '-openshift-delegate-urls={"/": {"resource": "namespaces", "verb":"get"}}'
19+
- '-tls-cert=/etc/tls/private/tls.crt'
20+
- '-tls-key=/etc/tls/private/tls.key'
21+
- '-client-secret-file=/var/run/secrets/kubernetes.io/serviceaccount/token'
22+
- '-cookie-secret-file=/etc/proxy/secrets/session_secret'
23+
- '-openshift-ca=/etc/pki/tls/cert.pem'
24+
- '-openshift-ca=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt'
25+
- '-skip-auth-regex=^/metrics'
26+
image: 'registry.redhat.io/openshift3/oauth-proxy:v3.11.43'
27+
name: prometheus-proxy
28+
ports:
29+
- containerPort: 9091
30+
name: oproxy
31+
resources: {}
32+
volumeMounts:
33+
- mountPath: /etc/tls/private
34+
name: secret-prometheus-k8s-tls
35+
- mountPath: /etc/proxy/secrets
36+
name: secret-prometheus-k8s-proxy
937
externalUrl: https://{{ index .ExtraParams "prometheusHost" }}
1038
alerting:
1139
alertmanagers:
@@ -15,6 +43,9 @@ spec:
1543
resources:
1644
requests:
1745
memory: 400Mi
46+
secrets:
47+
- prometheus-k8s-tls
48+
- prometheus-k8s-proxy
1849
serviceAccountName: prometheus-application-monitoring
1950
serviceMonitorNamespaceSelector:
2051
matchLabels:
@@ -27,4 +58,4 @@ spec:
2758
monitoring-key: {{ .MonitoringKey }}
2859
ruleNamespaceSelector:
2960
matchLabels:
30-
monitoring-key: {{ .MonitoringKey }}
61+
monitoring-key: {{ .MonitoringKey }}

0 commit comments

Comments
 (0)