Ablageort im Repository (GitLab): Projekt560-Helm Chart
Diskussionsforum (Discourse): Projekt560-Helm Chart
Readme: Projekt560-Helm Chart
Beschreibung des Projektes: Helm Charts für das Backend-Deployment in einer k8s Infrastruktur
PublicCode.YML: anzeigen
OSS Compliance: anzeigen
<!-- markdownlint-disable -->
<div align="center">
<img
src="https://gitlab.opencode.de/bwi/bundesmessenger/info/-/raw/main/images/logo.png"
alt="BundesMessenger Logo" width="256" height="256">
</div>
<div align="center">
<h2 align="center">BundesMessenger</h2>
</div>
<div align="center">
Der souveräne Messenger für Deutschland
</div>
<!-- markdownlint-enable -->
Das BundesMessenger Backend ist Bestandteil einer Sammlung von Repositories
zum BundesMessenger. Allgemeine Informationen zum Projekt befinden sich im
übergeordneten
BundesMessenger Repository.
Dieses Repository stellt ein Helm Chart zur automatisierten
Bereitstellung eines Backends bzw. Infrastruktur für die Nutzung mit dem
BundesMessenger Client zur Verfügung. Hauptbestandteil ist der
Synapse Server, Dieser ist eine
Matrix homeserver Implementierung in Python auf Basis des
Matrix Protokolls.
Das Matrix Protokoll wird in der
Matrix Specification beschrieben und dokumentiert.
Weitere Komponenten, die durch das Helm Chart bereitgestellt werden:
Nicht Bestandteil sind eine DMZ, PAP-Infrastruktur oder ähnliches.
Das Helm-Chart für den BundesMessenger wurde aus dem Helm Chart von
Alexander Olofsson
entwickelt.
Die größten Änderungen zu dem zugrundeliegenden Chart sind:
Der BundesMessenger nutzt das Open Source Protokoll Matrix.
Das Protokoll basiert auf JSON over Rest und ist in der
Matrix Spezifikation definiert und dokumentiert.
Der Hersteller stellt Einführungen und Tutorials
bereit.
Benutzernamen heißen in Matrix "Matrix ID" bzw. MXID. Diese
sind ähnlich aufgebaut wie E-Mail-Adressen. Sie besitzen einen Anteil des
lokalen Benutzernamens (`localpart`) und eine Domain bzw. Servernamen
(`example.com`), die relevant ist für die Kommunikation zwischen den
Matrix-Instanzen (Föderation).
Somit ergibt sich die Matrix ID: `@localpart:example.com`. `@` und `:` sind
fest definierte Identifier und Trennzeichen. Je nach Implementierung des
Clients reicht für den Benutzer der `localpart` um sich am eigenen Server,
dem sog. "homeserver" anzumelden.
Wichtig: Mit der Inbetriebnahme des Synapse Servers wird die Domain `example.com`, welche der Server verwaltet, festgelegt. Damit auch der Namensraum der Benutzer. Ein nachträgliches Ändern oder eine Migration sind nicht möglich. Hierfür müssen der Server bzw. die Datenbank neu installiert werden. Ein Server kann auch nur eine Domain (hier: `example.com`) verwalten. |
---|
Die Delegation
ist insbesondere im Kontext der Kommunikation in der Föderation wichtig.
Im Normalfall würde man erwarten, dass ein Benutzer `@benutzer:example.com`
auch auf dem Server `example.com` erreichbar ist. Das muss jedoch nicht
zwingend der Fall sein.
Mit Hilfe der Delegation kann man ermöglichen, dass ein Server im Internet
oder Intranet auf einem anderen DNS-Namen (Domain) erreichbar ist
(z.B. `matrix.example.com`) als ein Benutzername darstellt
(z.B. `@benutzer:example.com`).
Es gibt zwei Arten der Delegation:
Die Domain, die einen Matrix-Server delegiert (`example.com`), muss unter
der URL `https://example.com/.well-known/matrix/server` eine JSON-Datei
mit dem folgenden Inhalt ausgeben und auf den Matrix-Server verweisen.
Falls kein Port angegeben wird, wird der Standard-Port `8448` genutzt.
```json
{
"m.server": "matrix.example.com:443"
}
```
Mit Hilfe eines SRV-Eintrages wird auf den Matrix-Server verwiesen.
```console
_matrix._tcp.example.com 10 1 443 matrix.example.com
```
<!-- markdownlint-disable MD036 -->
Die Delegation mit Hilfe eines DNS SRV Eintrages wird aus Gründen der Sicherheit nicht empfohlen, Stichwort DNSSEC |
---|
<!-- markdownlint-enable MD036 -->
Für mehr Informationen nutzen Sie die öffentlich erreichbaren Dokumentationen:
Das Helm Chart sollte derzeit nicht in einer produktiven Umgebung genutzt werden. Es dient dem Einsatz im PoC der DVS, für Teststellungen und hat BETA-Status. |
---|
Alle möglichen Konfigurationswerte bzw. Parameter für das Helm Chart
sind in der `values.yaml` und in der
Dokumentation (/docs/standard_values.md)
beschrieben. Die ausführliche Dokumentation hierfür erfolgt zu einem späteren
Zeitpunkt.
Getestet wird das Helm Chart auf einer Kubernetes-Infrastruktur mit einem
4-Node-Cluster auf Basis von vanilla
Kubernetes.
Im weiteren Verlauf der Anleitung wird die Installation mit dem Befehl
`helm install bundesmessenger bundesmessenger/bundesmessenger` und der direkten
Angabe der Parameter mit dem automatischen Download aus dem Repository
beschrieben. Mit dem Repository kann sich mit dem folgenden Befehl verbunden
werden:
```console
helm repo add bundesmessenger https://gitlab.opencode.de/api/v4/projects/560/packages/helm/beta
```
Alternativ steht das Helm-Chart auch in der OCI-Registry zur Verfügung.
```console
helm show chart oci://registry.opencode.de/bwi/bundesmessenger/backend/helm-chart/bundesmessenger
```
Weiterhin kann die Installation auch durch den manuellen Download des
Helm Charts und das Anpassen der Parameter in der `values.yaml` erfolgen.
Eine Installation würde dann mit folgendem Beispiel-Befehl erfolgen:
```console
helm install bundesmessenger . -f values.yaml
```
optional mit dem Erstellen eines neuen Namespace `bum`:
```console
helm install bundesmessenger . -f values.yaml --create-namespace -n bum
```
Das Helm Chart rollt die im Bild blau dargestellten Komponenten aus.
![Infrastruktur](./docs/images/Infrastruktur_Scope.jpg "Übersicht über die Infrastruktur")
Hinweis: Sollte die `storageClass` `nfs-client` nicht existent
sein, muss diese erstellt oder mit dem folgenden Parameter gesetzt werden:
```console
helm install bundesmessenger bundesmessenger/bundesmessenger --set persistence.storageClass=STORAGECLASS
```
Alternativ können auch dynamisch erstellte
PersistentVolumeClaim (PVC) genutzt werden, wenn eine entsprechende
StorageClass
mit CSI-Volume-Plug-ins
(Container Storage Interface)
konfiguriert wurde.
Matrix benötigt valide TLS-Zertifikate und HTTPS-Verbindungen um voll
funktionsfähig zu sein. Das Helm Chart stellt die Infrastruktur auf Basis
eines `http`-Listeners bereit. Details hierzu sind in der
Dokumentation zu den TLS-Zertifikaten
beschrieben.
Für eine möglichst einfache Matrix-Installation, können Sie Ihre
Synapse-Installation auf der gewünschten Domain für Ihre MXIDs ausführen. Eine
Delegation ist nicht notwendig.
Die Server-Adresse `example.com` entspricht den Benutzernamen
`@localpart:example.com`.
```console
helm install bundesmessenger bundesmessenger/bundesmessenger \
--set serverName=example.com \
--set wellknown.enabled=true
```
Es wird bereitgestellt:
Es ist auch möglich, Synapse auf einer Subdomain (`matrix.example.com`) laufen
zu lassen, wobei diese dann Teil Ihrer MXIDs wird:
(`@localpart:matrix.example.com` in folgenden Beispiel)
```console
helm install bundesmessenger bundesmessenger/bundesmessenger \
--set serverName=matrix.example.com \
--set wellknown.enabled=true
```
Für den Fall, Sie besitzen die Domain `example.com` und Sie wollen
Benutzernamen in der Form `@localpart:example.com`, aber dennoch den Server
unter der Domain `matrix.example.com` laufen lassen, kann dies durch
Delegation erreicht werden. Hierfür gibt es zwei Möglichkeiten:
DNS ( nicht empfohlen) oder well-known.
Die Server-Adresse `matrix.example.com` ist unabhängig von den Benutzernamen
`@localpart:example.com`.
Für die well-known-Variante erfolgt die Installation wie folgt:
```console
helm install bundesmessenger bundesmessenger/bundesmessenger \
--set serverName=example.com \
--set publicServerName=matrix.example.com \
--set wellknown.enabled=true
```
Es wird bereitgestellt:
Sie benötigen zusätzlich zum Zertifikat für `matrix.example.com`
ein weiteres für `example.com`.
Falls die Domain `example.com` nicht in diesem K8s Cluster gehostet
wird, kann der well-known Eintrag auch manuell auf dem Server `example.com`
erstellt und gehostet werden.
Die Funktionsweise der Delegation mit well-known wird weiter
oben beschrieben.
Für die DNS-Variante installieren Sie den Messenger-Service wie folgt:
```console
helm install bundesmessenger bundesmessenger/bundesmessenger \
--set serverName=example.com \
--set publicServerName=matrix.example.com
```
Es wird bereitgestellt:
Zusätzlich wird für die Föderation der DNS SRV-Record benötigt, siehe dem
Kapitel zur Delegation.
Weitere Setups, Erweiterungen und Services wie Loadbalancer und TLS-Listener werden noch folgen. |
---|
Nachdem die Anwendung installiert wurde, ist diese über
folgende URL mit Hilfe des Browsers erreichbar:
`http://matrix.example.com/_matrix/client/versions`
Der Hostname `matrix.example.com` entspricht dem angegebenen `serverName`
bzw. dem `publicServerName`.
Beispielausgabe
```json
{
"versions":[
"r0.0.1",
"r0.1.0",
"r0.2.0",
"r0.3.0",
"r0.4.0",
"r0.5.0",
"r0.6.0",
"r0.6.1",
"v1.1",
"v1.2",
"v1.3",
"v1.4"
]
}
```
Die Ausgabe der Abfrage wird im
Matrix Spec
beschrieben.
Nach der Installation sind in der Umgebung keine Benutzer vorhanden.
Ein Upgrade oder Anpassen von Konfigurationswerten erfolgt mit Hilfe von
`helm upgrade`.
Upgrade mit Angabe der Parameter in der Konsole:
```console
helm upgrade bundesmessenger bundesmessenger/bundesmessenger \
--set serverName=example.com \
--set publicServerName=matrix.example.com
```
Upgrade mit Angabe der Parameter in der `values.yaml`:
```console
helm upgrade bundesmessenger . -f values.yaml
```
Eine Anweisung für die Installation einer PoC-Umgebung finden Sie hier, so wie
auch Hinweise zu den einzelnen zusätzlichen Diensten:
Für Fragen zur Anwendung des Helm-Charts, Konfiguration, Deployment und BundesMessenger
haben wir einen Matrix Raum erstellt.
<!-- markdownlint-disable -->
<div align="center">
<img src="https://gitlab.opencode.de/bwi/bundesmessenger/info/-/raw/main/images/qr_matrix_room.png" alt="QR Code Matrix">
</div>
<!-- markdownlint-enable -->
Kein Matrix Client zur Hand, dann auch gerne über unser Email Postfach.
Wir freuen uns auf den Austausch.