2026-07-11 19:17:54 -07:00
|
|
|
# k8s/ingress/ingress.yaml
|
|
|
|
|
# Ingress rules for all homelab services.
|
2026-07-19 09:29:17 -07:00
|
|
|
# TLS is handled centrally: nginx serves the wildcard-tls cert (*.riotpiao.com)
|
2026-07-11 19:17:54 -07:00
|
|
|
# as its default-ssl-certificate. No per-rule tls: blocks or cert-manager annotations
|
|
|
|
|
# are needed — cert-manager manages one cert, nginx uses it for all hosts.
|
|
|
|
|
#
|
2026-07-19 09:29:17 -07:00
|
|
|
# DNS: *.riotpiao.com must resolve to 10.6.0.1 (WireGuard) or 192.168.1.160 (LAN).
|
2026-07-11 19:17:54 -07:00
|
|
|
|
|
|
|
|
# ── Grafana ───────────────────────────────────────────────────────────────────
|
|
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
|
|
kind: Ingress
|
|
|
|
|
metadata:
|
|
|
|
|
name: grafana
|
|
|
|
|
namespace: logging
|
|
|
|
|
annotations:
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
|
|
|
|
|
spec:
|
|
|
|
|
ingressClassName: nginx
|
|
|
|
|
rules:
|
2026-07-19 09:29:17 -07:00
|
|
|
- host: grafana.riotpiao.com
|
2026-07-11 19:17:54 -07:00
|
|
|
http:
|
|
|
|
|
paths:
|
|
|
|
|
- path: /
|
|
|
|
|
pathType: Prefix
|
|
|
|
|
backend:
|
|
|
|
|
service:
|
|
|
|
|
name: grafana
|
|
|
|
|
port:
|
|
|
|
|
number: 80
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
# ── Loki (API access for external tools) ─────────────────────────────────────
|
|
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
|
|
kind: Ingress
|
|
|
|
|
metadata:
|
|
|
|
|
name: loki
|
|
|
|
|
namespace: logging
|
|
|
|
|
spec:
|
|
|
|
|
ingressClassName: nginx
|
|
|
|
|
rules:
|
2026-07-19 09:29:17 -07:00
|
|
|
- host: loki.riotpiao.com
|
2026-07-11 19:17:54 -07:00
|
|
|
http:
|
|
|
|
|
paths:
|
|
|
|
|
- path: /
|
|
|
|
|
pathType: Prefix
|
|
|
|
|
backend:
|
|
|
|
|
service:
|
|
|
|
|
name: loki
|
|
|
|
|
port:
|
|
|
|
|
number: 3100
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
# ── Authentik ─────────────────────────────────────────────────────────────────
|
|
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
|
|
kind: Ingress
|
|
|
|
|
metadata:
|
|
|
|
|
name: authentik
|
|
|
|
|
namespace: iam
|
|
|
|
|
annotations:
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-buffer-size: "16k"
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
|
|
|
|
|
spec:
|
|
|
|
|
ingressClassName: nginx
|
|
|
|
|
rules:
|
2026-07-19 09:29:17 -07:00
|
|
|
- host: authentik.riotpiao.com
|
2026-07-11 19:17:54 -07:00
|
|
|
http:
|
|
|
|
|
paths:
|
|
|
|
|
- path: /
|
|
|
|
|
pathType: Prefix
|
|
|
|
|
backend:
|
|
|
|
|
service:
|
|
|
|
|
name: authentik-server
|
|
|
|
|
port:
|
|
|
|
|
number: 80
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
# ── Vault ─────────────────────────────────────────────────────────────────────
|
|
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
|
|
kind: Ingress
|
|
|
|
|
metadata:
|
|
|
|
|
name: vault
|
2026-07-14 13:14:46 -07:00
|
|
|
namespace: iam
|
2026-07-11 19:17:54 -07:00
|
|
|
annotations:
|
|
|
|
|
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
|
|
|
|
|
spec:
|
|
|
|
|
ingressClassName: nginx
|
|
|
|
|
rules:
|
2026-07-19 09:29:17 -07:00
|
|
|
- host: vault.riotpiao.com
|
2026-07-11 19:17:54 -07:00
|
|
|
http:
|
|
|
|
|
paths:
|
|
|
|
|
- path: /
|
|
|
|
|
pathType: Prefix
|
|
|
|
|
backend:
|
|
|
|
|
service:
|
|
|
|
|
name: vault
|
|
|
|
|
port:
|
|
|
|
|
number: 8200
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
# ── MinIO console (storage namespace) ────────────────────────────────────────
|
|
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
|
|
kind: Ingress
|
|
|
|
|
metadata:
|
|
|
|
|
name: minio
|
|
|
|
|
namespace: storage
|
|
|
|
|
annotations:
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-body-size: "0"
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
|
|
|
|
|
nginx.ingress.kubernetes.io/affinity: "cookie"
|
|
|
|
|
nginx.ingress.kubernetes.io/session-cookie-name: "minio-console-affinity"
|
|
|
|
|
nginx.ingress.kubernetes.io/session-cookie-max-age: "3600"
|
|
|
|
|
spec:
|
|
|
|
|
ingressClassName: nginx
|
|
|
|
|
rules:
|
2026-07-19 09:29:17 -07:00
|
|
|
- host: minio.riotpiao.com
|
2026-07-11 19:17:54 -07:00
|
|
|
http:
|
|
|
|
|
paths:
|
|
|
|
|
- path: /
|
|
|
|
|
pathType: Prefix
|
|
|
|
|
backend:
|
|
|
|
|
service:
|
2026-07-21 16:00:24 -07:00
|
|
|
name: minio-cluster-console
|
2026-07-11 19:17:54 -07:00
|
|
|
port:
|
2026-07-21 16:00:24 -07:00
|
|
|
number: 9090
|
2026-07-11 19:17:54 -07:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
# ── MinIO S3 API ──────────────────────────────────────────────────────────────
|
|
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
|
|
kind: Ingress
|
|
|
|
|
metadata:
|
|
|
|
|
name: minio-api
|
|
|
|
|
namespace: storage
|
|
|
|
|
annotations:
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-body-size: "0"
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
|
|
|
|
|
spec:
|
|
|
|
|
ingressClassName: nginx
|
|
|
|
|
rules:
|
2026-07-19 09:29:17 -07:00
|
|
|
- host: minio-api.riotpiao.com
|
2026-07-11 19:17:54 -07:00
|
|
|
http:
|
|
|
|
|
paths:
|
|
|
|
|
- path: /
|
|
|
|
|
pathType: Prefix
|
|
|
|
|
backend:
|
|
|
|
|
service:
|
|
|
|
|
name: minio
|
|
|
|
|
port:
|
|
|
|
|
number: 9000
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
# ── Prometheus ────────────────────────────────────────────────────────────────
|
|
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
|
|
kind: Ingress
|
|
|
|
|
metadata:
|
|
|
|
|
name: prometheus
|
|
|
|
|
namespace: monitoring
|
|
|
|
|
spec:
|
|
|
|
|
ingressClassName: nginx
|
|
|
|
|
rules:
|
2026-07-19 09:29:17 -07:00
|
|
|
- host: prometheus.riotpiao.com
|
2026-07-11 19:17:54 -07:00
|
|
|
http:
|
|
|
|
|
paths:
|
|
|
|
|
- path: /
|
|
|
|
|
pathType: Prefix
|
|
|
|
|
backend:
|
|
|
|
|
service:
|
|
|
|
|
name: prometheus-kube-prometheus-prometheus
|
|
|
|
|
port:
|
|
|
|
|
number: 9090
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
# ── Portainer ─────────────────────────────────────────────────────────────────
|
|
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
|
|
kind: Ingress
|
|
|
|
|
metadata:
|
|
|
|
|
name: portainer
|
|
|
|
|
namespace: dashboard
|
|
|
|
|
annotations:
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
|
|
|
|
|
spec:
|
|
|
|
|
ingressClassName: nginx
|
|
|
|
|
rules:
|
2026-07-19 09:29:17 -07:00
|
|
|
- host: portainer.riotpiao.com
|
2026-07-11 19:17:54 -07:00
|
|
|
http:
|
|
|
|
|
paths:
|
|
|
|
|
- path: /
|
|
|
|
|
pathType: Prefix
|
|
|
|
|
backend:
|
|
|
|
|
service:
|
|
|
|
|
name: portainer
|
|
|
|
|
port:
|
|
|
|
|
number: 9000
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
# ── Forgejo (git forge + OCI registry UI) ────────────────────────────────────
|
|
|
|
|
# nginx terminates TLS using the wildcard cert, then proxies plain HTTP to
|
|
|
|
|
# Forgejo on port 3000. ROOT_URL stays https:// so Forgejo generates correct URLs.
|
|
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
|
|
kind: Ingress
|
|
|
|
|
metadata:
|
|
|
|
|
name: forgejo
|
|
|
|
|
namespace: cicd
|
|
|
|
|
annotations:
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-body-size: "0"
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
|
|
|
|
|
spec:
|
|
|
|
|
ingressClassName: nginx
|
2026-07-23 07:20:51 -07:00
|
|
|
tls:
|
|
|
|
|
- hosts:
|
|
|
|
|
- forgejo.riotpiao.com
|
|
|
|
|
secretName: riotpiao-com-tls
|
2026-07-11 19:17:54 -07:00
|
|
|
rules:
|
2026-07-19 09:29:17 -07:00
|
|
|
- host: forgejo.riotpiao.com
|
2026-07-11 19:17:54 -07:00
|
|
|
http:
|
|
|
|
|
paths:
|
|
|
|
|
- path: /
|
|
|
|
|
pathType: Prefix
|
|
|
|
|
backend:
|
|
|
|
|
service:
|
|
|
|
|
name: forgejo-gitea-http
|
|
|
|
|
port:
|
2026-07-23 00:14:12 -07:00
|
|
|
number: 3000
|
2026-07-11 19:17:54 -07:00
|
|
|
|
|
|
|
|
---
|
|
|
|
|
# ── Argo CD (cicd namespace) ──────────────────────────────────────────────────
|
|
|
|
|
# argocd-server runs HTTPS internally — nginx proxies via backend-protocol: HTTPS.
|
|
|
|
|
# proxy-ssl-verify: off because argocd-server's pod cert is self-signed (not homelab-ca).
|
|
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
|
|
kind: Ingress
|
|
|
|
|
metadata:
|
|
|
|
|
name: argocd
|
2026-07-21 16:00:24 -07:00
|
|
|
namespace: argocd
|
2026-07-11 19:17:54 -07:00
|
|
|
annotations:
|
|
|
|
|
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-ssl-verify: "off"
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
|
|
|
|
|
spec:
|
|
|
|
|
ingressClassName: nginx
|
|
|
|
|
rules:
|
2026-07-19 09:29:17 -07:00
|
|
|
- host: argocd.riotpiao.com
|
2026-07-11 19:17:54 -07:00
|
|
|
http:
|
|
|
|
|
paths:
|
|
|
|
|
- path: /
|
|
|
|
|
pathType: Prefix
|
|
|
|
|
backend:
|
|
|
|
|
service:
|
|
|
|
|
name: argocd-server
|
|
|
|
|
port:
|
|
|
|
|
number: 443
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
# ── Longhorn UI ───────────────────────────────────────────────────────────────
|
|
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
|
|
kind: Ingress
|
|
|
|
|
metadata:
|
|
|
|
|
name: longhorn
|
|
|
|
|
namespace: longhorn-system
|
|
|
|
|
spec:
|
|
|
|
|
ingressClassName: nginx
|
|
|
|
|
rules:
|
2026-07-19 09:29:17 -07:00
|
|
|
- host: longhorn.riotpiao.com
|
2026-07-11 19:17:54 -07:00
|
|
|
http:
|
|
|
|
|
paths:
|
|
|
|
|
- path: /
|
|
|
|
|
pathType: Prefix
|
|
|
|
|
backend:
|
|
|
|
|
service:
|
|
|
|
|
name: longhorn-frontend
|
|
|
|
|
port:
|
|
|
|
|
number: 80
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
# ── Temporal Web UI ────────────────────────────────────────────────────────────
|
2026-07-11 19:36:31 -07:00
|
|
|
# Temporal workflow orchestration Web UI
|
2026-07-11 19:17:54 -07:00
|
|
|
# TLS: wildcard cert managed by cert-manager, served by nginx default-ssl-certificate
|
|
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
|
|
kind: Ingress
|
|
|
|
|
metadata:
|
|
|
|
|
name: temporal
|
|
|
|
|
namespace: temporal
|
|
|
|
|
annotations:
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
|
|
|
|
|
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
|
|
|
|
|
spec:
|
|
|
|
|
ingressClassName: nginx
|
|
|
|
|
rules:
|
2026-07-19 09:29:17 -07:00
|
|
|
- host: temporal.riotpiao.com
|
2026-07-11 19:17:54 -07:00
|
|
|
http:
|
|
|
|
|
paths:
|
|
|
|
|
- path: /
|
|
|
|
|
pathType: Prefix
|
|
|
|
|
backend:
|
|
|
|
|
service:
|
|
|
|
|
name: temporal-web
|
|
|
|
|
port:
|
|
|
|
|
number: 8080
|
2026-07-22 09:04:27 -07:00
|
|
|
---
|
|
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
|
|
kind: Ingress
|
|
|
|
|
metadata:
|
|
|
|
|
name: homarr
|
|
|
|
|
namespace: dashboard
|
|
|
|
|
spec:
|
|
|
|
|
ingressClassName: nginx
|
|
|
|
|
rules:
|
|
|
|
|
- host: homarr.riotpiao.com
|
|
|
|
|
http:
|
|
|
|
|
paths:
|
|
|
|
|
- path: /
|
|
|
|
|
pathType: Prefix
|
|
|
|
|
backend:
|
|
|
|
|
service:
|
|
|
|
|
name: homarr
|
|
|
|
|
port:
|
2026-07-22 11:16:17 -07:00
|
|
|
number: 7575
|