cluster

Infrastructure files for Nordgedanken and Midnightthoughts.
git clone git://archive.git.mtrnord.blog/MTRNord/cluster.git
Log | Files | Refs | README

commit b7e536f4cfa318b854d050280f06b777d6338c8e
parent e228cfd2118fd6139f42a752340904a9748b88af
Author: MTRNord <mtrnord1@gmail.com>
Date:   Wed,  6 Mar 2024 12:40:50 +0100

Add element-call synapse

Diffstat:
Aapps/base/matrix/element-call-synapse/kustomization.yaml | 6++++++
Aapps/base/matrix/element-call-synapse/podmonitor.yaml | 24++++++++++++++++++++++++
Aapps/base/matrix/element-call-synapse/release.yaml | 185+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mapps/base/matrix/kustomization.yaml | 2++
Mapps/base/matrix/matrix-helm/repository.yaml | 9+++++++++
Mapps/production/kustomization.yaml | 2+-
Mapps/production/secrets/draupnir-midnightthoughts-secret.yaml | 20++++++++++----------
Aapps/production/secrets/element-call-synapse-secret.yaml | 28++++++++++++++++++++++++++++
Mapps/production/secrets/kustomization.yaml | 1+
Aapps/production/synapse-element-call.yaml | 41+++++++++++++++++++++++++++++++++++++++++
10 files changed, 307 insertions(+), 11 deletions(-)

diff --git a/apps/base/matrix/element-call-synapse/kustomization.yaml b/apps/base/matrix/element-call-synapse/kustomization.yaml @@ -0,0 +1,6 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: element-call +resources: + - release.yaml + - podmonitor.yaml diff --git a/apps/base/matrix/element-call-synapse/podmonitor.yaml b/apps/base/matrix/element-call-synapse/podmonitor.yaml @@ -0,0 +1,24 @@ +--- +apiVersion: monitoring.coreos.com/v1 +kind: PodMonitor +metadata: + name: element-call-synapse + labels: + instance: element-call +spec: + jobLabel: "app.kubernetes.io/component" + namespaceSelector: + matchNames: + - "matrix" + selector: + matchLabels: + app.kubernetes.io/instance: element-call-synapse + app.kubernetes.io/name: matrix-synapse + podMetricsEndpoints: + - port: metrics + path: "/_synapse/metrics" + interval: 5s + relabelings: + - sourceLabels: + - "__meta_kubernetes_pod_label_app_kubernetes_io_instance" + targetLabel: instance diff --git a/apps/base/matrix/element-call-synapse/release.yaml b/apps/base/matrix/element-call-synapse/release.yaml @@ -0,0 +1,185 @@ +--- +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + name: element-call-synapse + namespace: element-call +spec: + chart: + spec: + chart: matrix-synapse + sourceRef: + kind: HelmRepository + name: ananace-charts + interval: 50m + install: + remediation: + retries: 3 + values: + extraConfig: + stream_writers: + events: event_persister + run_background_tasks_on: background_worker + presence: + enabled: false + federation_sender_instances: + - federation-sender-1 + - federation-sender-2 + event_cache_size: 10K + caches: + global_factor: 10 + expire_caches: true + cache_entry_ttl: 240m + cache_autotuning: + max_cache_memory_usage: 2048M + target_cache_memory_usage: 1024M + min_cache_ttl: 5m + wellknown: + enabled: true + extraData: + support: + admins: + - email_address: "support@nordgedanken.dev" + role: "admin" + image: + pullSecrets: + - name: docker + persistence: + size: 10Gi + accessMode: ReadWriteMany + volumePermissions: + enabled: true + workers: + default: + tolerations: + - key: "arch" + operator: "Equal" + value: "arm64" + effect: "NoSchedule" + extraConfig: + event_cache_size: 30K + caches: + global_factor: 10 + expire_caches: true + cache_entry_ttl: 1080m + sync_response_cache_duration: 2m + cache_autotuning: + max_cache_memory_usage: 4069M + target_cache_memory_usage: 2048M + min_cache_ttl: 5m + generic_frontend: + replicaCount: 2 + enabled: true + generic: true + listeners: [client] + csPaths: + # Client API requests + - "/_matrix/client/(api/v1|r0|v3|unstable)/createRoom$" + - "/_matrix/client/(api/v1|r0|v3|unstable)/publicRooms$" + - "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/state$" + - "/_matrix/client/(r0|v3|unstable)/account/whoami$" + - "/_matrix/client/(r0|v3|unstable)/devices$" + - "/_matrix/client/versions$" + - "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/event/" + - "/_matrix/client/(api/v1|r0|v3|unstable)/joined_rooms$" + + # Encryption requests + - "/_matrix/client/(r0|v3|unstable)/keys/query$" + - "/_matrix/client/(r0|v3|unstable)/keys/changes$" + - "/_matrix/client/(r0|v3|unstable)/keys/claim$" + - "/_matrix/client/(r0|v3|unstable)/room_keys/" + - "/_matrix/client/(r0|v3|unstable)/keys/upload/" + + # Registration/login requests + - "/_matrix/client/(r0|v3|unstable)/register$" + - "/_matrix/client/(r0|v3|unstable)/register/available$" + + # Event sending requests + - "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/redact" + - "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/send" + - "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/state/" + - "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/(join|invite|leave|ban|unban|kick)$" + - "/_matrix/client/(api/v1|r0|v3|unstable)/join/" + - "/_matrix/client/(api/v1|r0|v3|unstable)/profile/" + federation_reader: + replicaCount: 2 + enabled: true + generic: true + listeners: [federation] + paths: + - "/_matrix/federation/v1/send/" + appservice: + enabled: true + name: appservices + generic: true + federation_sender_1: + labels: + synapse-component: federation-sender + app: federation_sender + name: federation-sender-1 + enabled: true + federation_sender_2: + labels: + synapse-component: federation-sender + app: federation_sender + name: federation-sender-2 + enabled: true + background_worker: + name: background_worker + replicaCount: 1 + enabled: true + generic: true + event_persister: + name: event_persister + replicaCount: 1 + enabled: true + generic: true + listeners: [replication] + synapse: + tolerations: + - key: "arch" + operator: "Equal" + value: "arm64" + effect: "NoSchedule" + ## Liveness probe configuration to use + ## + livenessProbe: + timeoutSeconds: 60 + failureThreshold: 5 + httpGet: + path: /health + port: http + + ## Readiness probe configuration to use + ## + readinessProbe: + timeoutSeconds: 60 + failureThreshold: 5 + httpGet: + path: /health + port: http + + extraCommands: [] + annotations: + prometheus.io/scrape: "true" + prometheus.io/path: "/_synapse/metrics" + prometheus.io/port: "9090" + + redis: + architecture: standalone + # master: + # tolerations: + # - key: "arch" + # operator: "Equal" + # value: "arm64" + # effect: "NoSchedule" + postgresql: + enabled: false + externalPostgresql: + #host: postgres.internal.midnightthoughts.space + host: matrix-postgres-cluster.matrix-postgres-cluster.svc.cluster.local + port: 5432 + + ## Password key to be retrieved from existing secret + element-call-postgresql: password + sslmode: require diff --git a/apps/base/matrix/kustomization.yaml b/apps/base/matrix/kustomization.yaml @@ -9,3 +9,5 @@ resources: - ./draupnir-synapse - ./draupnir4all - ./draupnir-fluffy + - ./element-call + - ./element-call-synapse diff --git a/apps/base/matrix/matrix-helm/repository.yaml b/apps/base/matrix/matrix-helm/repository.yaml @@ -8,6 +8,15 @@ spec: interval: 5m url: https://ananace.gitlab.io/charts --- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: ananace-charts + namespace: element-call +spec: + interval: 5m + url: https://ananace.gitlab.io/charts +--- apiVersion: image.toolkit.fluxcd.io/v1beta2 kind: ImageRepository metadata: diff --git a/apps/production/kustomization.yaml b/apps/production/kustomization.yaml @@ -30,7 +30,6 @@ resources: - ../base/authentik - ../base/chaosmesh - ../base/calendar - - ../base/matrix/element-call patchesStrategicMerge: - cosign-values.yaml - vaultwarden-values.yaml @@ -47,3 +46,4 @@ patchesStrategicMerge: - synapse-draupnir.yaml - forgejo.yaml - vector-values.yaml + - synapse-element-call.yaml diff --git a/apps/production/secrets/draupnir-midnightthoughts-secret.yaml b/apps/production/secrets/draupnir-midnightthoughts-secret.yaml @@ -5,7 +5,7 @@ metadata: namespace: matrix type: Opaque stringData: - password: ENC[AES256_GCM,data:AqN1jWaOWjN7m/6n8rWsni61zSqCqa72OMLiT2BT1qHg4cWXQmh8+6C8kHW/f9YKWuHJ+AEIMnOn2K0exLVeUw==,iv:icqT+RXsPj7nRmAWRgCCiuDiE4d6S6VfgLXncVAfyK0=,tag:6yZ7+DXuYQZloWNy2KNW8A==,type:str] + password: ENC[AES256_GCM,data:DPAGSrnwubIhJ9ltRsGedhoO5jkhkMQBb2b1C0PtiqdLLYuCCN/U6cvjl+JPuLrbS9h8w9s4mV9PfuTb7Rb5bA==,iv:w51h3Umx6MX1H2naMcpLi5HT7e+qP2Hc6eu1qQE3qs0=,tag:MbGIFOsO3J4gx4RYuTdnqw==,type:str] sops: kms: [] gcp_kms: [] @@ -15,14 +15,14 @@ sops: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBoVUMzMFR5WEtwZjdxTHdq - Zkw0ekwwd0lJMGdRbU1IMDVnSnhRUGs4d3dvClJkZ0NvSEJJaWk3b0RoNHROVWVB - NXU1OXM5T3lJSTdHdDdJVVovdEp6ZjgKLS0tIDdtTDk3NzhKVUozSDcrNTQreTFB - T3NnSmJkSzA1UGFCM3kvZUNDRys3YkEKJkskjXJQsgEI97zmH+sBVTDt8desWsHw - d9+puyUSW3un1BtVRTFlhrXjtI1XaXNxRbZC0n+czYs57cYMzfEKzA== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDL0FJcjBBS3lTZ2RoRUpa + NkRJb1VSRFpudVFOeU8rVnpkbkVtRFJYb3hFCmsza005WDlUNFUzQ3Ixcm84Slhn + M1AzOGJBYXBEWHkyTVFEajJHWkovTFkKLS0tIHBsaVhiRndNR3F6c1FxTDhTMW1k + UjJQZmhxVStrZWhReFl6R3IyUWpiVjQKJLcTOqIacHo6Xg6chc7vELwdfnmCsLHa + eHO+eHVSafUXfM4GL+Gobp9wFK03t+GlgcGTKryiDEoJdkK1zS9u6A== -----END AGE ENCRYPTED FILE----- - lastmodified: "2023-06-25T10:44:11Z" - mac: ENC[AES256_GCM,data:5ahjfZCIfyIohJ/Z9SYnBuUdXlW0CN2EG7lIp0UA99sg9yA1EqT8NPJK8d4zVOM51aHUVnrWBHpIuzhpQ3xiYZRFXlAzPZPWUPRch95QHSm0+W+r4aSl+Fa4ZjNf8oXyB/Vvrlnkl4StNs/EXYKcENVV68TeBjsph6IVnpE/Qy0=,iv:pVF225ILjzFcolxpQQWNpuZN9069Y2fIEaJU5JD9OBs=,tag:c+3Efj0ehfHAzxHXwiFk1w==,type:str] + lastmodified: "2024-03-06T11:33:38Z" + mac: ENC[AES256_GCM,data:0cPRXB1ySWeq6v15m/8DnouRuSuelDaVs863rZQ2cJDzm637xLjzsKVrxeKecReU0WjFwNRVlwuNExz509d+StDP++haELZYZMp2BapmYAldoCi+TJklvqU408sSdAWNZwE20Ens3RzPS3n+ToCjUhfz0RJ6JxQLZPAPpydwnkE=,iv:Ow9/ndKQ3Z2abOCkpl9kNMZ4g14eFDGhQ9+PebILess=,tag:cuRtNM53ouiApdidUqkvyg==,type:str] pgp: [] - encrypted_regex: ^(data|stringData|password|postgresPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret)$ - version: 3.7.3 + encrypted_regex: ^(api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|adminPassword|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret)$ + version: 3.8.1 diff --git a/apps/production/secrets/element-call-synapse-secret.yaml b/apps/production/secrets/element-call-synapse-secret.yaml @@ -0,0 +1,28 @@ +apiVersion: v1 +kind: Secret +metadata: + name: element-call-postgresql + namespace: element-call +type: Opaque +stringData: + password: ENC[AES256_GCM,data:moBwWfk8BLo5S+6QxQ+CfQ0nB2/3YZyw2x9HBc6+5d16xh7n7BceS8yBpNBkevvWqEoVaP0ylUwChoqbDT5HDQ==,iv:kWOMDHX+K5Bk8/BmtLBAT6maL9c2S5Rt6X31G1H5c2I=,tag:/pi1b1CRiFVyiy+V1Qyl0A==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyRlhyeEd0azhaaXhwblAw + NGlxeGVrVGV2WFJCZ04wU2NkM3l5RHJ0TUg0Ci9RV3UrNlk3aDN1RVZmMzhUUnYr + UC9sVmVGdFB4ZHVaL3VXS29yNkozSkUKLS0tIC8xMlFkdFpDUlh0ZW1UZks2cS9z + Uk5OZFdzSm9sdVpVUVJlTEdyTTQxTUkKLsAV3C9Xnh0FHLPIX3Hm/7/fbIiraoaT + 1R1RzAE8xT+n1pwwq/Y7uhsLoi5IEc6IanqKo/kKjYBT74ZuQQpRkQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-03-06T11:39:35Z" + mac: ENC[AES256_GCM,data:dwQyHPqscXLZdELXswQfOCdfMTocYi2ofoRSbyIWAgSgLi06t4vhsggkEPoQIw+4x4/LLGqTXX7VjfcaMU59HPw8usIPIdAsyx+DbbEqr8RpdmvZDFHE1zx6Fuj3CeHcUdqTLujfKa2FEsn7z84agHpnIbk6MHjXybfz5un39Mk=,iv:eYgy6G3pVHnerPYtkdOHjWKarKDcK8SKxbteOgo5b80=,tag:zhia8By8ZqfgYCBzUtM/lw==,type:str] + pgp: [] + encrypted_regex: ^(api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|adminPassword|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret)$ + version: 3.8.1 diff --git a/apps/production/secrets/kustomization.yaml b/apps/production/secrets/kustomization.yaml @@ -18,3 +18,4 @@ resources: - zuul-secrets.yaml - draupnir-fluffy-config.yaml - umami.yaml + - element-call-synapse-secret.yaml diff --git a/apps/production/synapse-element-call.yaml b/apps/production/synapse-element-call.yaml @@ -0,0 +1,41 @@ +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + name: element-call-synapse + namespace: element-call +spec: + chart: + spec: + version: 3.7.x + values: + signingkey: + job: + enabled: true + serverName: matrix-call.midnightthoughts.space + publicServerName: matrix-call.midnightthoughts.space + wellknown: + client: + m.homeserver: + base_url: https://matrix-call.midnightthoughts.space + config: + reportStats: true + enableRegistration: false + extraConfig: + use_presence: false + ingress: + traefikPaths: true + hosts: + - matrix-call.midnightthoughts.space + tls: + - hosts: + - matrix-call.midnightthoughts.space + secretName: matrix-call-midnightthoughts-synapse-tls-secret + annotations: + cert-manager.io/cluster-issuer: letsencrypt-http + traefik.ingress.kubernetes.io/router.tls: "true" + traefik.ingress.kubernetes.io/router.middlewares: default-hsts@kubernetescrd,default-compress@kubernetescrd,default-redirect-https@kubernetescrd + externalPostgresql: + username: element_call_synapse + ## The name of an existing secret with postgresql credentials + existingSecret: element-call-postgresql + database: element_call_synapse