08a3493097
## Why The logviewer UI gives browser access to the ClickHouse log store (`logreader` user). It must only be reachable by authorized users, so it sits behind an Authentik-gated oauth2-proxy front at https://logviewer.unkin.net, mirroring the arrstack front-door and mediamover/pdbmux gateway patterns. ## Changes - Adds the logviewer Deployment (1 replica, `docker-internal/logviewer:v0.1.0`) reading ClickHouse at `clickhouse-logs` via the existing `clickhouse-logreader` Secret, `/healthz` probes, nonroot securityContext - Adds an oauth2-proxy (quay.io/oauth2-proxy/oauth2-proxy:v7.15.3) front with issuer `https://identity.unkin.net/application/o/logviewer/`, `ak_groups` claim, allowed group `akP-logviewer-admin`, internal-CA trust via the combine-certs initContainer - Syncs kv `kubernetes/namespace/logging/default/oauth-credentials` into the `logviewer-oauth-credentials` Secret via the existing `default` VaultAuth (kv path already seeded; no terraform-vault change needed) - Adds ClusterIP Services for the app and the oauth2-proxy front door - Adds internal Gateway + HTTPRoutes for `logviewer.unkin.net` (vault-issuer cert, external-dns -> 198.18.200.4, http->https redirect) - Registers `logviewer/` in the logging base kustomization ## Dependency Login requires the Authentik `logviewer` provider/application from terraform-authentik PR #21. This PR is safe to merge first: the VSO secret sync and the deployment come up regardless; OIDC login only works once #21 is applied. Validated with `kustomize build` (base + au-syd1 overlay) and kubeconform (49/49 valid). Reviewed-on: #404 Co-authored-by: unkin-agent <unkin-agent@unkin.net> Co-committed-by: unkin-agent <unkin-agent@unkin.net>
51 lines
1.7 KiB
YAML
51 lines
1.7 KiB
YAML
---
|
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
kind: Kustomization
|
|
|
|
resources:
|
|
- namespace.yaml
|
|
- vaultauth.yaml
|
|
- vaultstaticsecret.yaml
|
|
- clickhouseinstallation.yaml
|
|
- job_clickhouse-schema.yaml
|
|
- nats-bootstrap-job.yaml
|
|
- cephrgw.yaml
|
|
- gateway.yaml
|
|
- httproute.yaml
|
|
- serviceaccount_logarchiver.yaml
|
|
- configmap_logarchiver.yaml
|
|
- deployment_logarchiver.yaml
|
|
- logviewer
|
|
|
|
# Vector pipelines are the single source of truth (also validated by
|
|
# `vector test` in CI). Mounted into each tier via `existingConfigMaps`.
|
|
configMapGenerator:
|
|
# Tunable JetStream stream limits (the nats-bootstrap Job reads these and does
|
|
# create-or-update). Hash suffix is INTENTIONALLY left on: editing a value
|
|
# renames the ConfigMap, which rewrites the Job's env reference, which changes
|
|
# the PostSync hook Job's spec and forces Argo to re-run it -> new limits apply.
|
|
# Sizing assumes ~1500 events/s avg @ ~1 KiB/event with S2 compression (~4x):
|
|
# ~33 GiB/day compressed -> ~100 GiB/3d per replica. max_bytes 130 GiB sits
|
|
# under the 180Gi/node PVC (see values-nats.yaml). Raising retention beyond the
|
|
# PVC requires bumping BOTH max_bytes here and fileStore PVC size in values.
|
|
- name: nats-stream-limits
|
|
literals:
|
|
- max_age=72h
|
|
- max_bytes=139586437120
|
|
- dupe_window=2m
|
|
- name: vector-agent-config
|
|
files:
|
|
- agent.yaml=vector/agent.yaml
|
|
options:
|
|
disableNameSuffixHash: true
|
|
- name: vector-aggregator-config
|
|
files:
|
|
- aggregator.yaml=vector/aggregator.yaml
|
|
options:
|
|
disableNameSuffixHash: true
|
|
- name: vector-vm-ingest-config
|
|
files:
|
|
- vm-ingest.yaml=vector/vm-ingest.yaml
|
|
options:
|
|
disableNameSuffixHash: true
|