refactor ingresses

This commit is contained in:
Roger Oriol
2026-06-23 00:26:29 +02:00
parent ce178d06c0
commit 153cf16194
32 changed files with 367 additions and 386 deletions

View File

@@ -25,18 +25,20 @@ Aquest clúster K3s gestiona els següents serveis:
``` ```
. .
├── README.md # Aquest fitxer ├── README.md # Aquest fitxer
├── ingress.yaml # Configuració d'Ingress principal (Traefik)
├── nas.yaml # Servei extern per al NAS
├── <aplicació>/ # Cada aplicació té el seu directori ├── <aplicació>/ # Cada aplicació té el seu directori
│ ├── deployment.yaml # Definició del Deployment │ ├── deployment.yaml # Definició del Deployment
│ ├── service.yaml # Definició del Service │ ├── service.yaml # Definició del Service
│ ├── ingress.yaml # Configuració d'Ingress (opcional) │ ├── ingress.yaml # Configuració d'Ingress de l'aplicació
│ ├── namespace.yaml # Namespace dedicat (opcional) │ ├── namespace.yaml # Namespace dedicat (opcional)
│ ├── configmap.yaml # ConfigMaps (opcional) │ ├── configmap.yaml # ConfigMaps (opcional)
│ └── pvc.yaml # PersistentVolumeClaims (opcional) │ └── pvc.yaml # PersistentVolumeClaims (opcional)
└── monitoring/ # Stack de monitorització complet └── nas/ # Servei extern per al NAS
├── nas.yaml # Service i Endpoints externs
└── ingress.yaml # Ingress del NAS
``` ```
> **Nota**: Cada aplicació té el seu propi `ingress.yaml` dins del seu directori. Ja no hi ha cap `ingress.yaml` centralitzat a l'arrel.
## 🚀 Desplegament ## 🚀 Desplegament
### Prerequisits ### Prerequisits
@@ -66,9 +68,8 @@ for dir in */; do
kubectl apply -f "$dir" kubectl apply -f "$dir"
done done
# O aplicar recursos globals primer # O aplicar recursos globals primer (opcional)
kubectl apply -f ingress.yaml kubectl apply -f nas/
kubectl apply -f nas.yaml
``` ```
### Eliminar una Aplicació ### Eliminar una Aplicació
@@ -83,18 +84,43 @@ kubectl delete -f <aplicació>/<fitxer>.yaml
## 🌐 Ingress i Networking ## 🌐 Ingress i Networking
### Configuració d'Ingress Principal ### Configuració d'Ingress per Aplicació
El fitxer [ingress.yaml](ingress.yaml) conté la configuració centralitzada d'Ingress utilitzant **Traefik** (controlador per defecte de K3s). Característiques: Cada aplicació té el seu propi fitxer `ingress.yaml` dins del seu directori, seguint el model de [pihole/ingress.yaml](pihole/ingress.yaml). Característiques:
- **TLS/SSL**: Certificats wildcard `*.rogi.casa` gestionats per cert-manager - **Traefik**: Controlador per defecte de K3s (`ingressClassName: traefik`)
- **Cloudflare Origin Issuer**: Utilitzat per generar certificats - **TLS/SSL**: Certificats per host gestionats per cert-manager amb el cluster-issuer `letsencrypt-prod`
- **Redirect HTTPS**: Redireccions automàtiques de HTTP a HTTPS - **Secret per aplicació**: Cada ingress té el seu propi `<aplicació>-tls`
- **Compressió**: Habilitada per defecte - **Namespace dedicat**: Cada ingress pertany al namespace de la seva aplicació
### Aplicacions amb Ingress Dedicat Exemple (`pihole/ingress.yaml`):
Algunes aplicacions tenen el seu propi fitxer `ingress.yaml` dins del seu directori per a configuracions específiques. ```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: pihole
namespace: pihole
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: traefik
tls:
- hosts:
- pihole.rogi.casa
secretName: pihole-tls
rules:
- host: pihole.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: pihole-web
port:
number: 80
```
## 💾 Persistència de Dades ## 💾 Persistència de Dades
@@ -218,7 +244,7 @@ kubectl get pv
## 📝 Bones Pràctiques ## 📝 Bones Pràctiques
1. **Namespaces**: Les aplicacions complexes utilitzen namespaces dedicats (n8n, monitoring, phoenix) 1. **Namespaces**: Totes les aplicacions tenen un namespace dedicat; cap queda al namespace `default`
2. **Labels**: Tots els recursos utilitzen labels consistents per facilitar la gestió 2. **Labels**: Tots els recursos utilitzen labels consistents per facilitar la gestió
3. **Resources Limits**: Configura limits de CPU/memòria per evitar overconsumption 3. **Resources Limits**: Configura limits de CPU/memòria per evitar overconsumption
4. **Health Checks**: Implementa liveness i readiness probes quan sigui possible 4. **Health Checks**: Implementa liveness i readiness probes quan sigui possible
@@ -245,7 +271,7 @@ kubectl rollout undo deployment/<nom> -n <namespace>
## 🌟 Serveis Externs ## 🌟 Serveis Externs
### NAS ### NAS
El fitxer [nas.yaml](nas.yaml) configura un servei extern que apunta al NAS local (10.88.88.238:5000) sense desplegar pods dins del clúster. El fitxer [nas/nas.yaml](nas/nas.yaml) configura un servei extern que apunta al NAS local (10.88.88.238:5000) sense desplegar pods dins del clúster. L'Ingress corresponent és a [nas/ingress.yaml](nas/ingress.yaml).
## 📚 Recursos Addicionals ## 📚 Recursos Addicionals

View File

@@ -1,4 +1,3 @@
# gitea-ingress.yaml
apiVersion: networking.k8s.io/v1 apiVersion: networking.k8s.io/v1
kind: Ingress kind: Ingress
metadata: metadata:
@@ -10,10 +9,10 @@ spec:
ingressClassName: traefik ingressClassName: traefik
tls: tls:
- hosts: - hosts:
- git.rogi.casa - gitea.rogi.casa
secretName: gitea-tls secretName: gitea-tls
rules: rules:
- host: git.rogi.casa - host: gitea.rogi.casa
http: http:
paths: paths:
- path: / - path: /

View File

@@ -2,6 +2,7 @@ apiVersion: v1
kind: ConfigMap kind: ConfigMap
metadata: metadata:
name: glance-config name: glance-config
namespace: glance
data: data:
glance.yml: | glance.yml: |
pages: pages:

View File

@@ -1,7 +1,13 @@
apiVersion: v1
kind: Namespace
metadata:
name: glance
---
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: glance name: glance
namespace: glance
spec: spec:
replicas: 1 replicas: 1
selector: selector:
@@ -29,7 +35,7 @@ apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: glance-service name: glance-service
namespace: default namespace: glance
spec: spec:
type: ClusterIP type: ClusterIP
selector: selector:

24
glance/ingress.yaml Normal file
View File

@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: glance
namespace: glance
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: traefik
tls:
- hosts:
- glance.rogi.casa
secretName: glance-tls
rules:
- host: glance.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: glance-service
port:
number: 80

View File

@@ -1,7 +1,13 @@
apiVersion: v1
kind: Namespace
metadata:
name: gym-tracker
---
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: gym-tracker name: gym-tracker
namespace: gym-tracker
labels: labels:
app: gym-tracker app: gym-tracker
spec: spec:
@@ -67,6 +73,7 @@ apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: gym-tracker name: gym-tracker
namespace: gym-tracker
labels: labels:
app: gym-tracker app: gym-tracker
spec: spec:
@@ -87,6 +94,7 @@ apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: gym-tracker-data name: gym-tracker-data
namespace: gym-tracker
labels: labels:
app: gym-tracker app: gym-tracker
spec: spec:

24
gym-tracker/ingress.yaml Normal file
View File

@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: gym-tracker
namespace: gym-tracker
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: traefik
tls:
- hosts:
- gym.rogi.casa
secretName: gym-tracker-tls
rules:
- host: gym.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: gym-tracker
port:
number: 80

View File

@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: homeassistant
namespace: home-assistant
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: traefik
tls:
- hosts:
- homeassistant.rogi.casa
secretName: homeassistant-tls
rules:
- host: homeassistant.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: home-assistant
port:
number: 80

View File

@@ -1,307 +0,0 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rogicasa-ingress
namespace: default
annotations:
# Use Traefik as the ingress controller (default in k3s)
kubernetes.io/ingress.class: "traefik"
# Enable SSL redirect
traefik.ingress.kubernetes.io/redirect-entry-point: https
# Optional: enable compression
traefik.ingress.kubernetes.io/compress: "true"
cert-manager.io/issuer: prod-issuer
cert-manager.io/issuer-kind: OriginIssuer
cert-manager.io/issuer-group: cert-manager.k8s.cloudflare.com
spec:
tls:
- hosts:
- "*.rogi.casa"
secretName: rogicasa-tls
rules:
- host: glance.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: glance-service
port:
number: 80
- host: pihole.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: pihole-web
port:
number: 80
- host: litellm.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: litellm-service
port:
number: 80
- host: openai.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: open-webui-service
port:
number: 80
- host: gym.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: gym-tracker
port:
number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: gitea-ingress
namespace: gitea
annotations:
# Use Traefik as the ingress controller (default in k3s)
kubernetes.io/ingress.class: "traefik"
# Enable SSL redirect
traefik.ingress.kubernetes.io/redirect-entry-point: https
# Optional: enable compression
traefik.ingress.kubernetes.io/compress: "true"
cert-manager.io/issuer: prod-issuer
cert-manager.io/issuer-kind: OriginIssuer
cert-manager.io/issuer-group: cert-manager.k8s.cloudflare.com
spec:
tls:
- hosts:
- "*.rogi.casa"
secretName: rogicasa-tls
rules:
- host: gitea.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: gitea
port:
number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: monitoring-ingress
namespace: monitoring
annotations:
# Use Traefik as the ingress controller (default in k3s)
kubernetes.io/ingress.class: "traefik"
# Enable SSL redirect
traefik.ingress.kubernetes.io/redirect-entry-point: https
# Optional: enable compression
traefik.ingress.kubernetes.io/compress: "true"
cert-manager.io/issuer: prod-issuer
cert-manager.io/issuer-kind: OriginIssuer
cert-manager.io/issuer-group: cert-manager.k8s.cloudflare.com
spec:
tls:
- hosts:
- "*.rogi.casa"
secretName: rogicasa-tls
rules:
- host: grafana.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grafana
port:
number: 80
- host: prometheus.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: prometheus-k8s
port:
number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: vaultwarden-ingress
namespace: vaultwarden
annotations:
# Use Traefik as the ingress controller (default in k3s)
kubernetes.io/ingress.class: "traefik"
# Enable SSL redirect
traefik.ingress.kubernetes.io/redirect-entry-point: https
# Optional: enable compression
traefik.ingress.kubernetes.io/compress: "true"
cert-manager.io/issuer: prod-issuer
cert-manager.io/issuer-kind: OriginIssuer
cert-manager.io/issuer-group: cert-manager.k8s.cloudflare.com
spec:
tls:
- hosts:
- "*.rogi.casa"
secretName: rogicasa-tls
rules:
- host: vaultwarden.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: vaultwarden
port:
number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: homeassistant-ingress
namespace: home-assistant
annotations:
# Use Traefik as the ingress controller (default in k3s)
kubernetes.io/ingress.class: "traefik"
# Enable SSL redirect
traefik.ingress.kubernetes.io/redirect-entry-point: https
# Optional: enable compression
traefik.ingress.kubernetes.io/compress: "true"
cert-manager.io/issuer: prod-issuer
cert-manager.io/issuer-kind: OriginIssuer
cert-manager.io/issuer-group: cert-manager.k8s.cloudflare.com
spec:
tls:
- hosts:
- "*.rogi.casa"
secretName: rogicasa-tls
rules:
- host: homeassistant.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: home-assistant
port:
number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minecraft-ingress
namespace: minecraft
annotations:
# Use Traefik as the ingress controller (default in k3s)
kubernetes.io/ingress.class: "traefik"
# Enable SSL redirect
traefik.ingress.kubernetes.io/redirect-entry-point: https
# Optional: enable compression
traefik.ingress.kubernetes.io/compress: "true"
cert-manager.io/issuer: prod-issuer
cert-manager.io/issuer-kind: OriginIssuer
cert-manager.io/issuer-group: cert-manager.k8s.cloudflare.com
spec:
tls:
- hosts:
- "*.rogi.casa"
secretName: rogicasa-tls
rules:
- host: minecraft.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: minecraft-server
port:
number: 25565
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-ingress
namespace: argocd
annotations:
# Use Traefik as the ingress controller (default in k3s)
kubernetes.io/ingress.class: "traefik"
# Enable SSL redirect
traefik.ingress.kubernetes.io/redirect-entry-point: https
# Optional: enable compression
traefik.ingress.kubernetes.io/compress: "true"
cert-manager.io/issuer: prod-issuer
cert-manager.io/issuer-kind: OriginIssuer
cert-manager.io/issuer-group: cert-manager.k8s.cloudflare.com
spec:
tls:
- hosts:
- "*.rogi.casa"
secretName: rogicasa-tls
rules:
- host: argocd.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nas-ingress
namespace: default
annotations:
# Use Traefik as the ingress controller (default in k3s)
kubernetes.io/ingress.class: "traefik"
# Enable SSL redirect
traefik.ingress.kubernetes.io/redirect-entry-point: https
# Optional: enable compression
traefik.ingress.kubernetes.io/compress: "true"
# Allow large file uploads (5GB) for NAS
traefik.ingress.kubernetes.io/max-request-body-bytes: "5368709120"
cert-manager.io/issuer: prod-issuer
cert-manager.io/issuer-kind: OriginIssuer
cert-manager.io/issuer-group: cert-manager.k8s.cloudflare.com
spec:
tls:
- hosts:
- "*.rogi.casa"
secretName: rogicasa-tls
rules:
- host: nas.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: external-ip
port:
number: 80

24
litellm/ingress.yaml Normal file
View File

@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: litellm
namespace: litellm
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: traefik
tls:
- hosts:
- litellm.rogi.casa
secretName: litellm-tls
rules:
- host: litellm.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: litellm-service
port:
number: 80

View File

@@ -1,7 +1,13 @@
apiVersion: v1 apiVersion: v1
kind: Namespace
metadata:
name: litellm
---
apiVersion: v1
kind: ConfigMap kind: ConfigMap
metadata: metadata:
name: litellm-config-file name: litellm-config-file
namespace: litellm
data: data:
config.yaml: | config.yaml: |
model_list: model_list:
@@ -50,6 +56,7 @@ apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: litellm-deployment name: litellm-deployment
namespace: litellm
labels: labels:
app: litellm app: litellm
spec: spec:
@@ -88,7 +95,7 @@ apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: litellm-service name: litellm-service
namespace: default namespace: litellm
spec: spec:
type: ClusterIP type: ClusterIP
selector: selector:

View File

@@ -18,6 +18,7 @@ apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: postgres-volume-claim name: postgres-volume-claim
namespace: litellm
labels: labels:
app: postgres app: postgres
spec: spec:
@@ -32,6 +33,7 @@ apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: postgres name: postgres
namespace: litellm
spec: spec:
replicas: 1 replicas: 1
selector: selector:
@@ -63,6 +65,7 @@ apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: postgres name: postgres
namespace: litellm
labels: labels:
app: postgres app: postgres
spec: spec:

View File

@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minecraft
namespace: minecraft
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: traefik
tls:
- hosts:
- minecraft.rogi.casa
secretName: minecraft-tls
rules:
- host: minecraft.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: minecraft-server
port:
number: 25565

35
monitoring/ingress.yaml Normal file
View File

@@ -0,0 +1,35 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: monitoring
namespace: monitoring
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: traefik
tls:
- hosts:
- grafana.rogi.casa
- prometheus.rogi.casa
secretName: monitoring-tls
rules:
- host: grafana.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grafana
port:
number: 80
- host: prometheus.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: prometheus-k8s
port:
number: 80

View File

@@ -2,7 +2,7 @@ apiVersion: v1
kind: ConfigMap kind: ConfigMap
metadata: metadata:
name: myorg-assistant-config name: myorg-assistant-config
namespace: default namespace: myorg-assistant
data: data:
# LiteLLM Configuration # LiteLLM Configuration
LITELLM_ENDPOINT: "http://litellm-service.default.svc.cluster.local:4000" LITELLM_ENDPOINT: "http://litellm-service.default.svc.cluster.local:4000"

View File

@@ -2,7 +2,7 @@ apiVersion: batch/v1
kind: CronJob kind: CronJob
metadata: metadata:
name: myorg-deadline-checker name: myorg-deadline-checker
namespace: default namespace: myorg-assistant
labels: labels:
app: myorg-assistant app: myorg-assistant
job: deadline-checker job: deadline-checker

View File

@@ -2,7 +2,7 @@ apiVersion: batch/v1
kind: CronJob kind: CronJob
metadata: metadata:
name: myorg-evening-summary name: myorg-evening-summary
namespace: default namespace: myorg-assistant
labels: labels:
app: myorg-assistant app: myorg-assistant
job: evening-summary job: evening-summary

View File

@@ -2,7 +2,7 @@ apiVersion: batch/v1
kind: CronJob kind: CronJob
metadata: metadata:
name: myorg-git-sync name: myorg-git-sync
namespace: default namespace: myorg-assistant
labels: labels:
app: myorg-assistant app: myorg-assistant
job: git-sync job: git-sync

View File

@@ -2,7 +2,7 @@ apiVersion: batch/v1
kind: CronJob kind: CronJob
metadata: metadata:
name: myorg-morning-briefing name: myorg-morning-briefing
namespace: default namespace: myorg-assistant
labels: labels:
app: myorg-assistant app: myorg-assistant
job: morning-briefing job: morning-briefing

View File

@@ -2,7 +2,7 @@ apiVersion: batch/v1
kind: CronJob kind: CronJob
metadata: metadata:
name: myorg-waiting-followup name: myorg-waiting-followup
namespace: default namespace: myorg-assistant
labels: labels:
app: myorg-assistant app: myorg-assistant
job: waiting-followup job: waiting-followup

View File

@@ -1,8 +1,13 @@
apiVersion: v1
kind: Namespace
metadata:
name: myorg-assistant
---
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: myorg-assistant name: myorg-assistant
namespace: default namespace: myorg-assistant
labels: labels:
app: myorg-assistant app: myorg-assistant
spec: spec:

View File

@@ -2,7 +2,7 @@ apiVersion: networking.k8s.io/v1
kind: Ingress kind: Ingress
metadata: metadata:
name: myorg-ingress name: myorg-ingress
namespace: default namespace: myorg-assistant
annotations: annotations:
# Use Traefik as the ingress controller (default in k3s) # Use Traefik as the ingress controller (default in k3s)
kubernetes.io/ingress.class: "traefik" kubernetes.io/ingress.class: "traefik"

View File

@@ -2,7 +2,7 @@ apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: myorg-assistant-pvc name: myorg-assistant-pvc
namespace: default namespace: myorg-assistant
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce

View File

@@ -2,7 +2,7 @@ apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: myorg-assistant-service name: myorg-assistant-service
namespace: default namespace: myorg-assistant
labels: labels:
app: myorg-assistant app: myorg-assistant
spec: spec:

View File

@@ -1,45 +0,0 @@
#apiVersion: networking.k8s.io/v1
#kind: Ingress
#metadata:
# name: nas-redirect
# annotations:
# nginx.ingress.kubernetes.io/permanent-redirect: "http://10.88.88.238:5000"
#spec:
# rules:
# - host: nas.rogi.casa
# http:
# paths:
# - path: /
# pathType: Prefix
# backend:
# service:
# name: dummy-service
# port:
# number: 80
apiVersion: v1
kind: Service
metadata:
name: external-ip
spec:
ports:
- name: app
port: 80
protocol: TCP
targetPort: 5000
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: external-ip
subsets:
- addresses:
- ip: 10.88.88.238
ports:
- name: app
port: 5000
protocol: TCP

26
nas/ingress.yaml Normal file
View File

@@ -0,0 +1,26 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nas
namespace: nas
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
# Allow large file uploads (5GB) for NAS
traefik.ingress.kubernetes.io/max-request-body-bytes: "5368709120"
spec:
ingressClassName: traefik
tls:
- hosts:
- nas.rogi.casa
secretName: nas-tls
rules:
- host: nas.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: external-ip
port:
number: 80

31
nas/nas.yaml Normal file
View File

@@ -0,0 +1,31 @@
apiVersion: v1
kind: Namespace
metadata:
name: nas
---
apiVersion: v1
kind: Service
metadata:
name: external-ip
namespace: nas
spec:
ports:
- name: app
port: 80
protocol: TCP
targetPort: 5000
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: external-ip
namespace: nas
subsets:
- addresses:
- ip: 10.88.88.238
ports:
- name: app
port: 5000
protocol: TCP

24
openwebui/ingress.yaml Normal file
View File

@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: openwebui
namespace: openwebui
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: traefik
tls:
- hosts:
- openai.rogi.casa
secretName: openwebui-tls
rules:
- host: openai.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: open-webui-service
port:
number: 80

View File

@@ -1,7 +1,13 @@
apiVersion: v1 apiVersion: v1
kind: Namespace
metadata:
name: openwebui
---
apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: openwebui-pvc name: openwebui-pvc
namespace: openwebui
spec: spec:
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce
@@ -15,6 +21,7 @@ metadata:
labels: labels:
app: open-webui app: open-webui
name: open-webui name: open-webui
namespace: openwebui
spec: spec:
replicas: 1 replicas: 1
selector: selector:
@@ -84,6 +91,7 @@ metadata:
labels: labels:
app: open-webui app: open-webui
name: open-webui-service name: open-webui-service
namespace: openwebui
spec: spec:
ports: ports:
- name: http - name: http

View File

@@ -2,6 +2,7 @@ apiVersion: networking.k8s.io/v1
kind: Ingress kind: Ingress
metadata: metadata:
name: qbittorrent-ingress name: qbittorrent-ingress
namespace: qbittorrent
annotations: annotations:
kubernetes.io/ingress.class: "traefik" kubernetes.io/ingress.class: "traefik"
traefik.ingress.kubernetes.io/redirect-entry-point: https traefik.ingress.kubernetes.io/redirect-entry-point: https

View File

@@ -1,7 +1,13 @@
apiVersion: v1
kind: Namespace
metadata:
name: qbittorrent
---
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: qbittorrent name: qbittorrent
namespace: qbittorrent
labels: labels:
app: qbittorrent app: qbittorrent
spec: spec:
@@ -48,6 +54,7 @@ apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: qbittorrent-config name: qbittorrent-config
namespace: qbittorrent
labels: labels:
app: qbittorrent app: qbittorrent
spec: spec:
@@ -76,6 +83,7 @@ apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: qbittorrent-downloads name: qbittorrent-downloads
namespace: qbittorrent
labels: labels:
app: qbittorrent app: qbittorrent
spec: spec:
@@ -91,6 +99,7 @@ apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: qbittorrent name: qbittorrent
namespace: qbittorrent
labels: labels:
app: qbittorrent app: qbittorrent
spec: spec:

24
vaultwarden/ingress.yaml Normal file
View File

@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: vaultwarden
namespace: vaultwarden
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: traefik
tls:
- hosts:
- vaultwarden.rogi.casa
secretName: vaultwarden-tls
rules:
- host: vaultwarden.rogi.casa
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: vaultwarden
port:
number: 80