Skip to content

Commit 845c723

Browse files
committed
Secure TLS for Prometheus metrics endpoint
Remove insecureSkipVerify from ServiceMonitor and implement proper TLS certificate verification using OpenShift service-ca. Changes: - Add service-ca annotation to metrics Service for automatic cert generation - Mount certificate Secret in operator Pod - Configure metrics server to use service-ca certificates - Update ServiceMonitor with CA bundle and server name verification - Create CA bundle ConfigMap for Prometheus - Regenerate bundle manifests Fixes: OSPR-30557 On branch feat/OSPR-30557_tls-metrics-endpoint modified: bundle/manifests/openstack-lightspeed-operator-metrics_v1_service.yaml modified: bundle/manifests/openstack-lightspeed-operator.clusterserviceversion.yaml modified: cmd/main.go modified: config/default/metrics_service.yaml modified: config/manager/manager.yaml new file: config/prometheus/ca-bundle-configmap.yaml modified: config/prometheus/kustomization.yaml modified: config/prometheus/monitor.yaml
1 parent d598c3f commit 845c723

8 files changed

Lines changed: 37 additions & 18 deletions

bundle/manifests/openstack-lightspeed-operator-metrics_v1_service.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
apiVersion: v1
22
kind: Service
33
metadata:
4+
annotations:
5+
service.beta.openshift.io/serving-cert-secret-name: operator-metrics-tls
46
creationTimestamp: null
57
labels:
68
app.kubernetes.io/managed-by: kustomize

bundle/manifests/openstack-lightspeed-operator.clusterserviceversion.yaml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ metadata:
2525
]
2626
capabilities: Basic Install
2727
categories: AI/Machine Learning
28-
createdAt: "2026-04-15T07:57:01Z"
28+
createdAt: "2026-06-24T11:27:18Z"
2929
description: AI-powered virtual assistant for Red Hat OpenStack Services on OpenShift
3030
features.operators.openshift.io/cnf: "false"
3131
features.operators.openshift.io/cni: "false"
@@ -242,10 +242,18 @@ spec:
242242
capabilities:
243243
drop:
244244
- ALL
245+
volumeMounts:
246+
- mountPath: /tmp/k8s-metrics-server/serving-certs
247+
name: cert
248+
readOnly: true
245249
securityContext:
246250
runAsNonRoot: true
247251
serviceAccountName: openstack-lightspeed-operator-controller-manager
248252
terminationGracePeriodSeconds: 10
253+
volumes:
254+
- name: cert
255+
secret:
256+
secretName: operator-metrics-tls
249257
permissions:
250258
- rules:
251259
- apiGroups:

cmd/main.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,11 @@ func main() {
110110
metricsServerOptions := metricsserver.Options{
111111
BindAddress: metricsAddr,
112112
SecureServing: secureMetrics,
113-
// TODO(user): TLSOpts is used to allow configuring the TLS config used for the server. If certificates are
114-
// not provided, self-signed certificates will be generated by default. This option is not recommended for
115-
// production environments as self-signed certificates do not offer the same level of trust and security
116-
// as certificates issued by a trusted Certificate Authority (CA). The primary risk is potentially allowing
117-
// unauthorized access to sensitive metrics data. Consider replacing with CertDir, CertName, and KeyName
118-
// to provide certificates, ensuring the server communicates using trusted and secure certificates.
119-
TLSOpts: tlsOpts,
113+
// Use certificates from service-ca mounted at /tmp/k8s-metrics-server/serving-certs
114+
TLSOpts: tlsOpts,
115+
CertDir: "/tmp/k8s-metrics-server/serving-certs",
116+
CertName: "tls.crt",
117+
KeyName: "tls.key",
120118
}
121119

122120
if secureMetrics {

config/default/metrics_service.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ metadata:
55
control-plane: controller-manager
66
app.kubernetes.io/name: openstack-lightspeed-operator
77
app.kubernetes.io/managed-by: kustomize
8+
annotations:
9+
service.beta.openshift.io/serving-cert-secret-name: operator-metrics-tls
810
name: metrics
911
namespace: system
1012
spec:

config/manager/manager.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,5 +100,13 @@ spec:
100100
requests:
101101
cpu: 10m
102102
memory: 64Mi
103+
volumeMounts:
104+
- name: cert
105+
mountPath: /tmp/k8s-metrics-server/serving-certs
106+
readOnly: true
103107
serviceAccountName: controller-manager
108+
volumes:
109+
- name: cert
110+
secret:
111+
secretName: operator-metrics-tls
104112
terminationGracePeriodSeconds: 10
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: serving-certs-ca-bundle
5+
namespace: system
6+
annotations:
7+
service.beta.openshift.io/inject-cabundle: "true"
8+
data: {}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
resources:
22
- monitor.yaml
3+
- ca-bundle-configmap.yaml

config/prometheus/monitor.yaml

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,8 @@ spec:
1515
scheme: https
1616
bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
1717
tlsConfig:
18-
# TODO(user): The option insecureSkipVerify: true is not recommended for production since it disables
19-
# certificate verification. This poses a significant security risk by making the system vulnerable to
20-
# man-in-the-middle attacks, where an attacker could intercept and manipulate the communication between
21-
# Prometheus and the monitored services. This could lead to unauthorized access to sensitive metrics data,
22-
# compromising the integrity and confidentiality of the information.
23-
# Please use the following options for secure configurations:
24-
# caFile: /etc/metrics-certs/ca.crt
25-
# certFile: /etc/metrics-certs/tls.crt
26-
# keyFile: /etc/metrics-certs/tls.key
27-
insecureSkipVerify: true
18+
caFile: /etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crt
19+
serverName: metrics.system.svc
2820
selector:
2921
matchLabels:
3022
control-plane: controller-manager

0 commit comments

Comments
 (0)