Files
k8scd/owntracks/recorder.yaml
T
2025-03-09 23:33:26 +01:00

270 lines
5.4 KiB
YAML

---
# PersistentVolumeClaim for OwnTracks Recorder
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: otrecorder-config-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: otrecorder-store-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
# PersistentVolumeClaim for Mosquitto
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mosquitto-data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mosquitto-logs-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
# ExternalSecret for OwnTracks Recorder password
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: owntracks-mqtt-credentials
spec:
refreshInterval: "15m"
secretStoreRef:
name: vault-backend
kind: ClusterSecretStore
target:
name: owntracks-mqtt-password
creationPolicy: Owner
data:
- secretKey: password
remoteRef:
key: kv/mqtt
property: password
---
# Deployment for OwnTracks Recorder
apiVersion: apps/v1
kind: Deployment
metadata:
name: otrecorder
spec:
replicas: 1
selector:
matchLabels:
app: otrecorder
template:
metadata:
labels:
app: otrecorder
spec:
containers:
- name: otrecorder
image: owntracks/recorder
ports:
- containerPort: 8083
env:
- name: OTR_HOST
value: "mqtt"
- name: OTR_PORT
value: "1883"
- name: OTR_USER
value: "ruben"
- name: OTR_PASS
valueFrom:
secretKeyRef:
name: owntracks-mqtt-password
key: password
volumeMounts:
- name: store
mountPath: /store
volumes:
- name: store
persistentVolumeClaim:
claimName: otrecorder-store-pvc
---
# Service for OwnTracks Recorder
apiVersion: v1
kind: Service
metadata:
name: otrecorder
spec:
selector:
app: otrecorder
ports:
- port: 8083
targetPort: 8083
type: ClusterIP
---
# ExternalSecret to fetch MQTT password file from Vault
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: mqtt-password-file
spec:
refreshInterval: "15m"
secretStoreRef:
name: vault-backend
kind: ClusterSecretStore
target:
name: mqtt-password-secret
creationPolicy: Owner
data:
- secretKey: password_file
remoteRef:
key: kv/mqtt
property: secret
---
# ConfigMap for MQTT configuration
apiVersion: v1
kind: ConfigMap
metadata:
name: mqtt-config
data:
mosquitto.conf: |
listener 1883
allow_anonymous false
password_file /mosquitto/config/password_file
# Add other MQTT configuration options here
---
# MQTT Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: mqtt
labels:
app: mqtt
spec:
replicas: 1
selector:
matchLabels:
app: mqtt
template:
metadata:
labels:
app: mqtt
spec:
containers:
- name: mqtt
image: eclipse-mosquitto:latest
ports:
- containerPort: 1883
name: mqtt
- containerPort: 9001
name: websocket
volumeMounts:
- name: config
mountPath: /mosquitto/config/mosquitto.conf
subPath: mosquitto.conf
- name: password-file
mountPath: /mosquitto/config/password_file
subPath: password_file
volumes:
- name: config
configMap:
name: mqtt-config
- name: password-file
secret:
secretName: mqtt-password-secret
---
# MQTT Service
apiVersion: v1
kind: Service
metadata:
name: mqtt
spec:
selector:
app: mqtt
ports:
- port: 1883
targetPort: 1883
name: mqtt
- port: 9001
targetPort: 9001
name: websocket
---
# External access with Ingress for OwnTracks Recorder
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: otrecorder-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
cert-manager.io/cluster-issuer: prod-cluster-issuer
spec:
ingressClassName: nginx
tls:
- hosts:
- owntracks.hensen.io
secretName: owntracks-tls-secret
rules:
- host: owntracks.hensen.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: otrecorder
port:
number: 8083
---
# Corrected MQTT Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: mqtt-ingress
annotations:
cert-manager.io/cluster-issuer: prod-cluster-issuer
# Add NGINX TCP passthrough annotations
nginx.ingress.kubernetes.io/ssl-passthrough: "false"
nginx.ingress.kubernetes.io/backend-protocol: "TCP"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
ingressClassName: nginx
tls:
- hosts:
- mqtt.hensen.io
secretName: mqtt-tls-secret
rules:
- host: mqtt.hensen.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: mqtt
port:
number: 1883
# Note: For proper MQTT over TLS, consider these alternatives:
# 1. Use a TCP Load Balancer instead of an Ingress
# 2. Configure the MQTT broker to use TLS directly (port 8883)
# 3. Use NGINX TCP ingress controller configuration