From 52780edbb50cc79673f76130d6e180ab8cde75c9 Mon Sep 17 00:00:00 2001 From: Ultradesu Date: Sun, 18 Oct 2026 00:35:03 +0100 Subject: [PATCH] Expose authenticated Loki push endpoint for tsunagi logs --- k8s-ng/core/keycloak/auth-proxy.yaml | 2 +- k8s-ng/core/prom-stack/kustomization.yaml | 1 + k8s-ng/core/prom-stack/loki-ingress.yaml | 48 +++++++++++++++++++++++ k8s-ng/core/prom-stack/loki-values.yaml | 4 +- 4 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 k8s-ng/core/prom-stack/loki-ingress.yaml diff --git a/k8s-ng/core/keycloak/auth-proxy.yaml b/k8s-ng/core/keycloak/auth-proxy.yaml index 8bcf71d..d731e7a 100644 --- a/k8s-ng/core/keycloak/auth-proxy.yaml +++ b/k8s-ng/core/keycloak/auth-proxy.yaml @@ -25,7 +25,7 @@ spec: homelab.hexor.cy/exposure: external containers: - name: auth-proxy - image: ultradesu/rsauth2-proxy:latest + image: ultradesu/rsauth2-proxy:v0.1.3 ports: - containerPort: 8080 name: http diff --git a/k8s-ng/core/prom-stack/kustomization.yaml b/k8s-ng/core/prom-stack/kustomization.yaml index 26f56ad..7510659 100644 --- a/k8s-ng/core/prom-stack/kustomization.yaml +++ b/k8s-ng/core/prom-stack/kustomization.yaml @@ -6,6 +6,7 @@ resources: - external-secrets.yaml - alertmanager-config.yaml - ingress.yaml + - loki-ingress.yaml - service-monitors.yaml - dashboards/auth-proxy-dashboard-cm.yaml - dashboards/furumi-dashboard-cm.yaml diff --git a/k8s-ng/core/prom-stack/loki-ingress.yaml b/k8s-ng/core/prom-stack/loki-ingress.yaml new file mode 100644 index 0000000..dbebda5 --- /dev/null +++ b/k8s-ng/core/prom-stack/loki-ingress.yaml @@ -0,0 +1,48 @@ +apiVersion: traefik.io/v1alpha1 +kind: Middleware +metadata: + name: loki-machine-auth +spec: + forwardAuth: + address: http://auth-proxy.keycloak.svc:80/auth + trustForwardHeader: false +--- +# Do not pass the Keycloak client secret through to Loki after ForwardAuth. +apiVersion: traefik.io/v1alpha1 +kind: Middleware +metadata: + name: loki-strip-authorization +spec: + headers: + customRequestHeaders: + Authorization: "" +--- +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: loki-push +spec: + entryPoints: [websecure] + routes: + - match: Host(`loki.hexor.cy`) && Path(`/loki/api/v1/push`) && Method(`POST`) + kind: Rule + middlewares: + - name: loki-machine-auth + - name: loki-strip-authorization + services: + - name: loki-gateway + port: 80 + tls: + secretName: loki-push-tls +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: loki-push-tls +spec: + secretName: loki-push-tls + issuerRef: + name: letsencrypt + kind: ClusterIssuer + dnsNames: + - loki.hexor.cy diff --git a/k8s-ng/core/prom-stack/loki-values.yaml b/k8s-ng/core/prom-stack/loki-values.yaml index c5f9c74..b7547ad 100644 --- a/k8s-ng/core/prom-stack/loki-values.yaml +++ b/k8s-ng/core/prom-stack/loki-values.yaml @@ -81,7 +81,7 @@ sidecar: gateway: enabled: true # Gateway replicas can run on either external core node; Loki storage stays on music. - replicas: 1 + replicas: 2 nodeSelector: homelab.hexor.cy/pool: core homelab.hexor.cy/exposure: external @@ -97,7 +97,7 @@ gateway: cpu: 500m memory: 256Mi podDisruptionBudget: - enabled: false + enabled: true test: enabled: false