From 35ff50081208bb294fa471ac236ad65477b587e8 Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Tue, 20 Feb 2024 09:17:57 -0600 Subject: [PATCH] grafana: Configure Loki datastore Usually, Grafana datastores are configured using its web GUI. When setting up a datastore that requires TLS client authentication, the client certificate and private key have to be pasted into the form. For certificates that renew frequently, this method would require a frequent manual effort. Fortunately, Grafana supports defining datastores via its "provisioning" mechanism, reading the configuration from YAML files on the filesystem. --- grafana/datasources/loki.yml | 14 ++++++++++++++ grafana/grafana.yaml | 7 +++++++ grafana/kustomization.yaml | 32 ++++++++++++++++++++++++++++++++ grafana/loki-cert.yaml | 12 ++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 grafana/datasources/loki.yml create mode 100644 grafana/loki-cert.yaml diff --git a/grafana/datasources/loki.yml b/grafana/datasources/loki.yml new file mode 100644 index 0000000..1f04483 --- /dev/null +++ b/grafana/datasources/loki.yml @@ -0,0 +1,14 @@ +apiVersion: 1 + +datasources: +- name: Loki + type: loki + access: proxy + url: https://loki.pyrocufflink.blue + jsonData: + tlsAuth: true + tlsAuthWithCACert: true + secureJsonData: + tlsCACert: $__file{/run/dch-ca/dch-root-ca.crt} + tlsClientCert: $__file{/run/secrets/du5t1n.me/loki/tls.crt} + tlsClientKey: $__file{/run/secrets/du5t1n.me/loki/tls.key} diff --git a/grafana/grafana.yaml b/grafana/grafana.yaml index 9eebb37..412282f 100644 --- a/grafana/grafana.yaml +++ b/grafana/grafana.yaml @@ -73,6 +73,9 @@ spec: - mountPath: /etc/grafana name: config readOnly: true + - mountPath: /etc/grafana/provisioning/datasources + name: datasources + readOnly: true - mountPath: /run/secrets/grafana name: secrets readOnly: true @@ -86,6 +89,10 @@ spec: - name: config configMap: name: grafana + - name: datasources + configMap: + name: datasources + optional: true - name: grafana persistentVolumeClaim: claimName: grafana diff --git a/grafana/kustomization.yaml b/grafana/kustomization.yaml index 4a6e310..4c50de3 100644 --- a/grafana/kustomization.yaml +++ b/grafana/kustomization.yaml @@ -16,9 +16,41 @@ resources: - grafana.yaml - ingress.yaml - secrets.yaml +- loki-cert.yaml +- ../dch-root-ca configMapGenerator: - name: grafana files: - grafana.ini - ldap.toml + +- name: datasources + files: + - datasources/loki.yml + +patches: +- patch: |- + apiVersion: apps/v1 + kind: StatefulSet + metadata: + name: grafana + spec: + template: + spec: + containers: + - name: grafana + volumeMounts: + - mountPath: /run/dch-ca + name: dch-ca + readOnly: true + - mountPath: /run/secrets/du5t1n.me/loki + name: loki-client-cert + readOnly: true + volumes: + - name: dch-ca + configMap: + name: dch-root-ca + - name: loki-client-cert + secret: + secretName: loki-client-cert diff --git a/grafana/loki-cert.yaml b/grafana/loki-cert.yaml new file mode 100644 index 0000000..ef668bd --- /dev/null +++ b/grafana/loki-cert.yaml @@ -0,0 +1,12 @@ +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: loki-client-cert +spec: + commonName: grafana + privateKey: + algorithm: Ed25519 + secretName: loki-client-cert + issuerRef: + name: loki-ca + kind: ClusterIssuer