Compare commits

...
11 Commits
Author SHA1 Message Date
willemjan a01ec4b1e8 feat: add route to external firefly service 2026-11-15 14:33:33 +01:00
willemjan e1018464da feat: add route to external beszel service 2026-11-15 14:27:22 +01:00
willemjan 050d030cea feat: route to autotune service on proxmox 2026-11-15 14:06:39 +01:00
willemjan 02f43e8f54 fix(ddns): create records with proxied:false (DNS-only)
Cloudflare's edge 308-redirects git smart-http info/refs requests when the
record is proxied, breaking git/ArgoCD. DNS-only sends traffic straight to
the router -> node -> Traefik, which terminates TLS with a valid LE cert.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <[email protected]>
2026-11-14 22:44:47 +01:00
willemjan e48e67fe7c chore: repoURL gitea.zb-kw.duckdns.org -> gitea.labzand.com in all ArgoCD apps + root-app
Gitea is now served via Traefik on gitea.labzand.com (external-gitea);
the old duckdns host has no route once the router points at the node.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <[email protected]>
2026-11-14 22:33:00 +01:00
willemjan 530af4620c feat: add gitea route 2026-11-14 22:20:12 +01:00
willemjan 8b8784d0f2 feat: add homeassistant to treafik including dns record to reach from outside 2026-11-14 21:43:45 +01:00
willemjan 9bbdf7d5d6 fix: required tls 2026-11-14 21:34:01 +01:00
willemjan e8af901b7b feat: add omada external 2026-11-14 21:29:34 +01:00
willemjan a0be22c67c feat: add sonarqube route 2026-11-14 21:21:22 +01:00
willemjan f261cdde66 fix(external-proxmox): valid ingressroute with https backend + working endpoints
- ingress.yaml had invalid 'https:' rules key (dropped by apiserver -> OutOfSync);
  replaced by IngressRoute on websecure with scheme:https + ServersTransport
  (insecureSkipVerify) since Proxmox :8006 is https with self-signed cert
- EndpointSlice apply fails with kubectl 1.31 vs server 1.36 ('unknown field
  spec'), so keep v1 Endpoints (auto-mirrored to EndpointSlice); fixed spec
- shared namespace+middleware moved to services/external (app 'external')

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <[email protected]>
2026-11-14 21:08:52 +01:00
48 changed files with 719 additions and 38 deletions
+1 -1
View File
@@ -6,7 +6,7 @@ metadata:
spec:
project: default
source:
repoURL: https://gitea.zb-kw.duckdns.org/willemjan/cluster.git
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/adguard
destination:
+1 -1
View File
@@ -6,7 +6,7 @@ metadata:
spec:
project: default
source:
repoURL: https://gitea.zb-kw.duckdns.org/willemjan/cluster.git
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/argocd
destination:
+1 -1
View File
@@ -6,7 +6,7 @@ metadata:
spec:
project: default
source:
repoURL: https://gitea.zb-kw.duckdns.org/willemjan/cluster.git
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/authentik
destination:
+1 -1
View File
@@ -6,7 +6,7 @@ metadata:
spec:
project: default
source:
repoURL: https://gitea.zb-kw.duckdns.org/willemjan/cluster.git
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/cloudfare-ddns
destination:
+1 -1
View File
@@ -6,7 +6,7 @@ metadata:
spec:
project: default
source:
repoURL: https://gitea.zb-kw.duckdns.org/willemjan/cluster.git
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/external-adguard
destination:
+18
View File
@@ -0,0 +1,18 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: external-autotune
namespace: argocd
spec:
project: default
source:
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/external/external-autotune
destination:
server: https://kubernetes.default.svc
namespace: external
syncPolicy:
automated: {prune: true, selfHeal: true}
syncOptions:
- CreateNamespace=false
+18
View File
@@ -0,0 +1,18 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: external-beszel
namespace: argocd
spec:
project: default
source:
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/external/external-beszel
destination:
server: https://kubernetes.default.svc
namespace: external
syncPolicy:
automated: {prune: true, selfHeal: true}
syncOptions:
- CreateNamespace=false
+18
View File
@@ -0,0 +1,18 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: external-firefly
namespace: argocd
spec:
project: default
source:
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/external/external-firefly
destination:
server: https://kubernetes.default.svc
namespace: external
syncPolicy:
automated: {prune: true, selfHeal: true}
syncOptions:
- CreateNamespace=false
+18
View File
@@ -0,0 +1,18 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: external-gitea
namespace: argocd
spec:
project: default
source:
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/external-gitea
destination:
server: https://kubernetes.default.svc
namespace: external
syncPolicy:
automated: {prune: true, selfHeal: true}
syncOptions:
- CreateNamespace=false
+18
View File
@@ -0,0 +1,18 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: external-homeassistant
namespace: argocd
spec:
project: default
source:
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/external-homeassistant
destination:
server: https://kubernetes.default.svc
namespace: external
syncPolicy:
automated: {prune: true, selfHeal: true}
syncOptions:
- CreateNamespace=false
+1 -1
View File
@@ -6,7 +6,7 @@ metadata:
spec:
project: default
source:
repoURL: https://gitea.zb-kw.duckdns.org/willemjan/cluster.git
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/external-nightscout
destination:
+18
View File
@@ -0,0 +1,18 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: external-omada
namespace: argocd
spec:
project: default
source:
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/external-omada
destination:
server: https://kubernetes.default.svc
namespace: external
syncPolicy:
automated: {prune: true, selfHeal: true}
syncOptions:
- CreateNamespace=false
+1 -1
View File
@@ -6,7 +6,7 @@ metadata:
spec:
project: default
source:
repoURL: https://gitea.zb-kw.duckdns.org/willemjan/cluster.git
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/external-proxmox
destination:
+18
View File
@@ -0,0 +1,18 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: external-sonarqube
namespace: argocd
spec:
project: default
source:
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/external-sonarqube
destination:
server: https://kubernetes.default.svc
namespace: external
syncPolicy:
automated: {prune: true, selfHeal: true}
syncOptions:
- CreateNamespace=false
+1 -1
View File
@@ -6,7 +6,7 @@ metadata:
spec:
project: default
source:
repoURL: https://gitea.zb-kw.duckdns.org/willemjan/cluster.git
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: services/external
destination:
+1 -1
View File
@@ -7,7 +7,7 @@ metadata:
spec:
project: default
source:
repoURL: https://gitea.zb-kw.duckdns.org/willemjan/cluster.git
repoURL: https://gitea.labzand.com/willemjan/cluster.git
targetRevision: main
path: apps # elke yaml hierin = één Application
directory:
+1 -1
View File
@@ -9,5 +9,5 @@ data:
# Alleen namen die écht publiek bereikbaar moeten zijn (via router -> cluster).
# Interne-only namen (argocd/auth/adguard.labzand.com) bewust NIET hier:
# die krijgen geen publiek A-record en resolven alleen intern via AdGuard.
DOMAINS: "ns.labzand.com"
DOMAINS: "ns.labzand.com, ha.labzand.com, gitea.labzand.com"
ZONE_ID: "6093605ad5a8db13e9c9d9faad240ca6"
@@ -84,7 +84,7 @@ data:
CREATE_RESPONSE=$(curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"$DOMAIN\",\"content\":\"$PUBLIC_IP\",\"ttl\":120,\"proxied\":true}")
--data "{\"type\":\"A\",\"name\":\"$DOMAIN\",\"content\":\"$PUBLIC_IP\",\"ttl\":120,\"proxied\":false}")
CREATE_SUCCESS=$(echo "$CREATE_RESPONSE" | grep -o '"success":[^,]*' | cut -d':' -f2)
+11
View File
@@ -0,0 +1,11 @@
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: gitea-labzand
namespace: external
spec:
secretName: gitea-labzand-tls
dnsNames: ["gitea.labzand.com"]
issuerRef:
name: cloudflare-dns
kind: ClusterIssuer
@@ -1,7 +1,7 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: external-proxmox
name: gitea
namespace: external
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
@@ -9,17 +9,17 @@ metadata:
spec:
ingressClassName: traefik
rules:
- host: proxmox.labzand.com
https:
- host: gitea.labzand.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: proxmox-external
name: gitea-external
port:
number: 8006
number: 3000
tls:
- hosts:
- proxmox.labzand.com
secretName: external-proxmox-labzand-tls
- gitea.labzand.com
secretName: gitea-labzand-tls
@@ -0,0 +1,16 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: gitea-redirect
namespace: external
spec:
entryPoints:
- web
routes:
- match: Host(`gitea.labzand.com`)
kind: Rule
middlewares:
- name: redirect-https
services:
- name: api@internal
kind: TraefikService
+25
View File
@@ -0,0 +1,25 @@
apiVersion: v1
kind: Service
metadata:
name: gitea-external
namespace: external
spec:
type: ClusterIP
ports:
- name: http
port: 3000
targetPort: 3000
protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
name: gitea-external
namespace: external
subsets:
- addresses:
- ip: 192.168.2.52
ports:
- name: http
port: 3000
protocol: TCP
+14
View File
@@ -0,0 +1,14 @@
# Certificaat voor ns.labzand.com via Cloudflare DNS-01.
# Vereist: ClusterIssuer 'cloudflare-dns' (infrastructure/cert-manager/cloudflare-issuer.yaml)
# en een secret 'cloudflare-api-token' in namespace cert-manager.
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: ha-labzand
namespace: external
spec:
secretName: ha-labzand-tls
dnsNames: ["ha.labzand.com"]
issuerRef:
name: cloudflare-dns
kind: ClusterIssuer
@@ -0,0 +1,25 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: homeassistant
namespace: external
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
ingressClassName: traefik
rules:
- host: ha.labzand.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ha-external
port:
number: 8123
tls:
- hosts:
- ha.labzand.com
secretName: ha-labzand-tls
@@ -0,0 +1,21 @@
# HTTP (entrypoint web) -> HTTPS redirect voor ns.labzand.com.
# De Ingress zelf heeft een tls-sectie, waardoor Traefik die router alleen
# op websecure matcht; daarom hier een aparte router op web.
# services: api@internal is een dummy - de redirect middleware stuurt
# nooit door naar een backend.
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: ha-redirect
namespace: external
spec:
entryPoints:
- web
routes:
- match: Host(`ha.labzand.com`)
kind: Rule
middlewares:
- name: redirect-https
services:
- name: api@internal
kind: TraefikService
@@ -0,0 +1,27 @@
# Service zonder selector: Kubernetes maakt zelf geen Endpoints aan.
# Het Endpoints-object hieronder levert het externe adres (buiten het cluster).
apiVersion: v1
kind: Service
metadata:
name: ha-external
namespace: external
spec:
type: ClusterIP
ports:
- name: http
port: 8123
targetPort: 8123
protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
name: ha-external
namespace: external
subsets:
- addresses:
- ip: 192.168.2.146
ports:
- name: http
port: 8123
protocol: TCP
+11
View File
@@ -0,0 +1,11 @@
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: external-omada-labzand
namespace: external
spec:
secretName: external-omada-labzand-tls
dnsNames: ["omada.labzand.com"]
issuerRef:
name: cloudflare-dns
kind: ClusterIssuer
@@ -0,0 +1,16 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: external-omada-redirect
namespace: external
spec:
entryPoints:
- web
routes:
- match: Host(`omada.labzand.com`)
kind: Rule
middlewares:
- name: redirect-https
services:
- name: api@internal
kind: TraefikService
+29
View File
@@ -0,0 +1,29 @@
# omada (:8043) spricht HTTPS met een self-signed cert — daarom een
# IngressRoute (i.p.v. een plain Ingress, die altijd HTTP naar de backend praat)
# met scheme: https en een ServersTransport die het cert niet checkt.
apiVersion: traefik.io/v1alpha1
kind: ServersTransport
metadata:
name: omada-insecure
namespace: external
spec:
insecureSkipVerify: true
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: external-omada
namespace: external
spec:
entryPoints:
- websecure
tls:
secretName: external-omada-labzand-tls
routes:
- match: Host(`omada.labzand.com`)
kind: Rule
services:
- name: omada-external
port: 8043
scheme: https
serversTransport: omada-insecure
+27
View File
@@ -0,0 +1,27 @@
# Service zonder selector: Kubernetes maakt zelf geen Endpoints aan.
# Het Endpoints-object hieronder levert het externe adres (buiten het cluster).
apiVersion: v1
kind: Service
metadata:
name: omada-external
namespace: external
spec:
type: ClusterIP
ports:
- name: http
port: 8043
targetPort: 8043
protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
name: omada-external
namespace: external
subsets:
- addresses:
- ip: 192.168.2.62
ports:
- name: http
port: 8043
protocol: TCP
@@ -0,0 +1,29 @@
# Proxmox (:8006) spricht HTTPS met een self-signed cert — daarom een
# IngressRoute (i.p.v. een plain Ingress, die altijd HTTP naar de backend praat)
# met scheme: https en een ServersTransport die het cert niet checkt.
apiVersion: traefik.io/v1alpha1
kind: ServersTransport
metadata:
name: proxmox-insecure
namespace: external
spec:
insecureSkipVerify: true
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: external-proxmox
namespace: external
spec:
entryPoints:
- websecure
tls:
secretName: external-proxmox-labzand-tls
routes:
- match: Host(`proxmox.labzand.com`)
kind: Rule
services:
- name: proxmox-external
port: 8006
scheme: https
serversTransport: proxmox-insecure
+8 -20
View File
@@ -1,5 +1,11 @@
# Service zonder selector: Kubernetes maakt zelf geen Endpoints aan.
# Het Endpoints-object hieronder levert het externe adres (buiten het cluster).
# Service zonder selector: Kubernetes maakt zelf geen endpoints aan.
# Het Endpoints-object hieronder levert het externe adres (Proxmox, buiten het cluster).
# De endpoints-controller mirrored dit automatisch naar een EndpointSlice.
# (Een handmatige discovery.k8s.io/v1 EndpointSlice faalt op deze cluster met
# kubectl 1.31 tegen server 1.36: "unknown field spec" — daher v1 Endpoints.)
# Let op: ArgoCD trackt Endpoints/EndpointSlice niet — apply deze file handmatig
# als het endpoint ontbreekt:
# kubectl apply -f services/external-proxmox/service.yaml
apiVersion: v1
kind: Service
metadata:
@@ -25,21 +31,3 @@ subsets:
- name: https
port: 8006
protocol: TCP
---
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
name: proxmox-external
labels:
kubernetes.io/service-name: proxmox-external
namespace: external
addressType: IPv4
ports:
- name: https
protocol: TCP
port: 8006
endpoints:
- addresses:
- 192.168.2.64
conditions:
ready: true
+11
View File
@@ -0,0 +1,11 @@
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: external-sonarqube-labzand
namespace: external
spec:
secretName: external-sonarqube-labzand-tls
dnsNames: ["sonarqube.labzand.com"]
issuerRef:
name: cloudflare-dns
kind: ClusterIssuer
+25
View File
@@ -0,0 +1,25 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: external-sonarqube
namespace: external
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
ingressClassName: traefik
rules:
- host: sonarqube.labzand.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sonarqube-external
port:
number: 9000
tls:
- hosts:
- sonarqube.labzand.com
secretName: external-sonarqube-labzand-tls
@@ -0,0 +1,16 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: external-sonarqube-redirect
namespace: external
spec:
entryPoints:
- web
routes:
- match: Host(`sonarqube.labzand.com`)
kind: Rule
middlewares:
- name: redirect-https
services:
- name: api@internal
kind: TraefikService
+27
View File
@@ -0,0 +1,27 @@
# Service zonder selector: Kubernetes maakt zelf geen Endpoints aan.
# Het Endpoints-object hieronder levert het externe adres (buiten het cluster).
apiVersion: v1
kind: Service
metadata:
name: sonarqube-external
namespace: external
spec:
type: ClusterIP
ports:
- name: http
port: 9000
targetPort: 9000
protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
name: sonarqube-external
namespace: external
subsets:
- addresses:
- ip: 192.168.2.49
ports:
- name: http
port: 9000
protocol: TCP
+11
View File
@@ -0,0 +1,11 @@
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: external-autotune-labzand
namespace: external
spec:
secretName: external-autotune-labzand-tls
dnsNames: ["autotune.labzand.com"]
issuerRef:
name: cloudflare-dns
kind: ClusterIssuer
@@ -0,0 +1,16 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: external-autotune-redirect
namespace: external
spec:
entryPoints:
- web
routes:
- match: Host(`autotune.labzand.com`)
kind: Rule
middlewares:
- name: redirect-https
services:
- name: api@internal
kind: TraefikService
+25
View File
@@ -0,0 +1,25 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: external-autotune
namespace: external
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
ingressClassName: traefik
rules:
- host: autotune.labzand.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: autotune-external
port:
number: 8502
tls:
- hosts:
- autotune.labzand.com
secretName: external-autotune-labzand-tls
+27
View File
@@ -0,0 +1,27 @@
# Service zonder selector: Kubernetes maakt zelf geen Endpoints aan.
# Het Endpoints-object hieronder levert het externe adres (buiten het cluster).
apiVersion: v1
kind: Service
metadata:
name: autotune-external
namespace: external
spec:
type: ClusterIP
ports:
- name: http
port: 8502
targetPort: 8502
protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
name: autotune-external
namespace: external
subsets:
- addresses:
- ip: 192.168.2.51
ports:
- name: http
port: 8502
protocol: TCP
+11
View File
@@ -0,0 +1,11 @@
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: external-beszel-labzand
namespace: external
spec:
secretName: external-beszel-labzand-tls
dnsNames: ["beszel.labzand.com"]
issuerRef:
name: cloudflare-dns
kind: ClusterIssuer
@@ -0,0 +1,16 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: external-beszel-redirect
namespace: external
spec:
entryPoints:
- web
routes:
- match: Host(`beszel.labzand.com`)
kind: Rule
middlewares:
- name: redirect-https
services:
- name: api@internal
kind: TraefikService
+25
View File
@@ -0,0 +1,25 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: external-beszel
namespace: external
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
ingressClassName: traefik
rules:
- host: beszel.labzand.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: beszel-external
port:
number: 8090
tls:
- hosts:
- beszel.labzand.com
secretName: external-beszel-labzand-tls
+27
View File
@@ -0,0 +1,27 @@
# Service zonder selector: Kubernetes maakt zelf geen Endpoints aan.
# Het Endpoints-object hieronder levert het externe adres (buiten het cluster).
apiVersion: v1
kind: Service
metadata:
name: beszel-external
namespace: external
spec:
type: ClusterIP
ports:
- name: http
port: 8090
targetPort: 8090
protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
name: beszel-external
namespace: external
subsets:
- addresses:
- ip: 192.168.2.61
ports:
- name: http
port: 8090
protocol: TCP
+11
View File
@@ -0,0 +1,11 @@
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: external-firefly-labzand
namespace: external
spec:
secretName: external-firefly-labzand-tls
dnsNames: ["firefly.labzand.com"]
issuerRef:
name: cloudflare-dns
kind: ClusterIssuer
@@ -0,0 +1,16 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: external-firefly-redirect
namespace: external
spec:
entryPoints:
- web
routes:
- match: Host(`firefly.labzand.com`)
kind: Rule
middlewares:
- name: redirect-https
services:
- name: api@internal
kind: TraefikService
+25
View File
@@ -0,0 +1,25 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: external-firefly
namespace: external
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
ingressClassName: traefik
rules:
- host: firefly.labzand.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: firefly-external
port:
number: 80
tls:
- hosts:
- firefly.labzand.com
secretName: external-firefly-labzand-tls
+27
View File
@@ -0,0 +1,27 @@
# Service zonder selector: Kubernetes maakt zelf geen Endpoints aan.
# Het Endpoints-object hieronder levert het externe adres (buiten het cluster).
apiVersion: v1
kind: Service
metadata:
name: firefly-external
namespace: external
spec:
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
name: firefly-external
namespace: external
subsets:
- addresses:
- ip: 192.168.2.59
ports:
- name: http
port: 80
protocol: TCP