Moving everything over to a load-balancer config

This commit is contained in:
Astra Logical 2026-04-03 16:32:53 -04:00
parent 1a6a2531f5
commit fa55ef73b0
22 changed files with 2301 additions and 1 deletions

1816
metallb/metallb-native.yaml Normal file

File diff suppressed because it is too large Load diff

26
metallb/metallb.yaml Normal file
View file

@ -0,0 +1,26 @@
apiVersion: v1
kind: Namespace
metadata:
name: metallb-system
labels:
pod-security.kubernetes.io/enforce: privileged
pod-security.kubernetes.io/audit: privileged
pod-security.kubernetes.io/warn: privileged
---
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: nest-lb-pool
namespace: metallb-system
spec:
addresses:
- 192.168.1.150-192.168.1.200
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: nest-l2-ad
namespace: metallb-system
spec:
ipAddressPools:
- nest-lb-pool

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: bazarr-anime-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: bazarr-anime.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: bazarr-anime
port:
number: 30768

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: bazarr-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: bazarr.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: bazarr
port:
number: 30767

View file

@ -32,7 +32,7 @@ spec:
value: "1000" value: "1000"
- name: TZ - name: TZ
value: America/New_York value: America/New_York
image: lscr.io/linuxserver/deluge:2.2.0-r1-ls364 image: lscr.io/linuxserver/deluge:latest
name: deluge name: deluge
ports: ports:
- containerPort: 8112 - containerPort: 8112

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: deluge-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: deluge.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: deluge
port:
number: 30112

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: flaresolverr-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: flaresolverr.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: flaresolverr
port:
number: 30191

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: jellyseerr-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: jellyseerr.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: jellyseerr
port:
number: 30505

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: lidarr-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: lidarr.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: lidarr
port:
number: 30686

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: prowlarr-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: prowlarr.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: prowlarr
port:
number: 30696

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: radarr-anime-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: radarr-anime.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: radarr-anime
port:
number: 30879

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: radarr-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: radarr.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: radarr
port:
number: 30878

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sabnzbd-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: sabnzbd.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sabnzbd
port:
number: 30080

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: slskd-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: slskd.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: slskd
port:
number: 30030

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sonarr-anime-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: sonarr-anime.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sonarr-anime
port:
number: 30990

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sonarr-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: sonarr.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sonarr
port:
number: 30989

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: syncthing-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: sync.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: syncthing
port:
number: 30384

View file

@ -0,0 +1,30 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: vault-config
namespace: vault
data:
extraconfig-from-values.hcl: |-
disable_mlock = true
ui = true
listener "tcp" {
tls_disable = 1
address = "[::]:8200"
cluster_address = "[::]:8201"
}
storage "raft" {
path = "/vault/data"
retry_join {
leader_api_addr = "http://vault-0.vault-internal:8200"
}
retry_join {
leader_api_addr = "http://vault-1.vault-internal:8200"
}
retry_join {
leader_api_addr = "http://vault-2.vault-internal:8200"
}
}
service_registration "kubernetes" {}

View file

@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: vault-ingress
namespace: vault
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: vault.k3s.home.nest
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: vault
port:
number: 8200

View file

@ -0,0 +1,23 @@
apiVersion: v1
kind: Namespace
metadata:
name: vault
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: vault
namespace: vault
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: vault-server-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:auth-delegator
subjects:
- kind: ServiceAccount
name: vault
namespace: vault

View file

@ -0,0 +1,33 @@
# Headless service for Raft cluster discovery
apiVersion: v1
kind: Service
metadata:
name: vault-internal
namespace: vault
labels:
app.kubernetes.io/name: vault
spec:
clusterIP: None
publishNotReadyAddresses: true
ports:
- name: http
port: 8200
- name: https-internal
port: 8201
selector:
app.kubernetes.io/name: vault
---
# Standard service for UI/API
apiVersion: v1
kind: Service
metadata:
name: vault
namespace: vault
spec:
type: LoadBalancer
ports:
- name: http
port: 8200
targetPort: 8200
selector:
app.kubernetes.io/name: vault

View file

@ -0,0 +1,87 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: vault
namespace: vault
spec:
serviceName: vault-internal
replicas: 3
selector:
matchLabels:
app.kubernetes.io/name: vault
template:
metadata:
labels:
app.kubernetes.io/name: vault
spec:
serviceAccountName: vault
terminationGracePeriodSeconds: 10
# Force pods onto different physical server nodes
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values: ["vault"]
topologyKey: "kubernetes.io/hostname"
securityContext:
runAsUser: 100
runAsGroup: 1000
fsGroup: 1000
initContainers:
- name: fix-raft-permissions
image: busybox:latest
command: ["sh", "-c", "chown -R 100:1000 /vault/data && chmod -R 700 /vault/data"]
volumeMounts:
- name: data
mountPath: /vault/data
securityContext:
runAsUser: 0
privileged: true
containers:
- name: vault
image: hashicorp/vault:latest
args: ["server", "-config=/etc/vault/extraconfig-from-values.hcl"]
securityContext:
allowPrivilegeEscalation: false
env:
- name: VAULT_API_ADDR
value: "http://$(HOSTNAME).vault-internal:8200"
- name: SKIP_SETCAP
value: "true"
- name: VAULT_ADDR
value: "http://127.0.0.1:8200"
- name: VAULT_CLUSTER_ADDR
value: "http://$(HOSTNAME).vault-internal:8201"
- name: VAULT_K8S_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: VAULT_K8S_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
ports:
- containerPort: 8200
name: http
- containerPort: 8201
name: https-internal
volumeMounts:
- name: config
mountPath: /etc/vault
- name: data
mountPath: /vault/data
volumes:
- name: config
configMap:
name: vault-config
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi