Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1b94b159ce |
@@ -1,7 +1,5 @@
|
|||||||
# GitOps repository
|
# GitOps repository
|
||||||
|
|
||||||
## Hypervisor
|
|
||||||
|
|
||||||
### 1) Harvester Hyperconverged Infrastructure
|
### 1) Harvester Hyperconverged Infrastructure
|
||||||
[...]
|
[...]
|
||||||
|
|
||||||
@@ -9,180 +7,6 @@ Configure Harvester HCI nodes through cloud-init (requires node reboot):
|
|||||||
```shell
|
```shell
|
||||||
kubectl apply -f system/Harvester/cloudinit-disable-nic-offloading.yaml
|
kubectl apply -f system/Harvester/cloudinit-disable-nic-offloading.yaml
|
||||||
```
|
```
|
||||||
## Downstream cluster(s)
|
|
||||||
|
|
||||||
Cluster configuration for RKE2 cluster using kube-vip with Traefik ingress controller:
|
|
||||||
```yaml
|
|
||||||
apiVersion: provisioning.cattle.io/v1
|
|
||||||
kind: Cluster
|
|
||||||
spec:
|
|
||||||
[...]
|
|
||||||
rkeConfig:
|
|
||||||
chartValues:
|
|
||||||
harvester-cloud-provider:
|
|
||||||
[...]
|
|
||||||
kube-vip:
|
|
||||||
env:
|
|
||||||
svc_election: 'true'
|
|
||||||
[...]
|
|
||||||
rke2-traefik:
|
|
||||||
service:
|
|
||||||
[...]
|
|
||||||
spec:
|
|
||||||
externalTrafficPolicy: Local
|
|
||||||
```
|
|
||||||
|
|
||||||
Traefik advanced configuration:
|
|
||||||
```yaml
|
|
||||||
additionalArguments:
|
|
||||||
- --providers.file.directory=/etc/traefik/dynamic
|
|
||||||
- --providers.file.watch=true
|
|
||||||
- --entryPoints.websecure.transport.respondingTimeouts.readTimeout=300s
|
|
||||||
certificatesResolvers:
|
|
||||||
default:
|
|
||||||
acme:
|
|
||||||
dnsChallenge:
|
|
||||||
propagation:
|
|
||||||
delayBeforeChecks: 5m0s
|
|
||||||
provider: cloudflare
|
|
||||||
resolvers:
|
|
||||||
- 1.1.1.1:53
|
|
||||||
- 1.0.0.1:53
|
|
||||||
email: <omitted>
|
|
||||||
storage: /data/acme.json
|
|
||||||
deployment:
|
|
||||||
initContainers:
|
|
||||||
- command:
|
|
||||||
- sh
|
|
||||||
- -c
|
|
||||||
- touch /data/acme.json; chown 65532 /data/acme.json; chmod -v 600 /data/acme.json
|
|
||||||
image: busybox:latest
|
|
||||||
name: volume-permissions
|
|
||||||
securityContext:
|
|
||||||
runAsGroup: 0
|
|
||||||
runAsNonRoot: false
|
|
||||||
runAsUser: 0
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /data
|
|
||||||
name: traefik-data
|
|
||||||
kind: Deployment
|
|
||||||
env:
|
|
||||||
- name: CF_API_EMAIL
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: CF_API_EMAIL
|
|
||||||
name: traefik-cloudflare
|
|
||||||
- name: CF_API_KEY
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
key: CF_API_KEY
|
|
||||||
name: traefik-cloudflare
|
|
||||||
extraObjects:
|
|
||||||
- apiVersion: v1
|
|
||||||
data:
|
|
||||||
config.yml: |
|
|
||||||
http:
|
|
||||||
middlewares:
|
|
||||||
2fa-authentication:
|
|
||||||
forwardAuth:
|
|
||||||
address: "https://auth.spamasaurus.com/api/verify?rd=https://auth.spamasaurus.com/"
|
|
||||||
trustForwardHeader: true
|
|
||||||
security-headers:
|
|
||||||
headers:
|
|
||||||
forceSTSHeader: true
|
|
||||||
stsSeconds: 315360000
|
|
||||||
stsIncludeSubdomains: true
|
|
||||||
stsPreload: true
|
|
||||||
tls:
|
|
||||||
options:
|
|
||||||
defaults:
|
|
||||||
minVersion: VersionTLS12
|
|
||||||
sniStrict: false
|
|
||||||
curvePreferences:
|
|
||||||
- secp521r1
|
|
||||||
- secp384r1
|
|
||||||
- secp256r1
|
|
||||||
cipherSuites:
|
|
||||||
- TLS_AES_128_GCM_SHA256
|
|
||||||
- TLS_AES_256_GCM_SHA384
|
|
||||||
- TLS_CHACHA20_POLY1305_SHA256
|
|
||||||
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
|
|
||||||
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
|
|
||||||
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
|
|
||||||
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
|
|
||||||
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
|
|
||||||
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
|
|
||||||
- TLS_FALLBACK_SCSV
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: traefik-file-provider
|
|
||||||
namespace: kube-system
|
|
||||||
ingressRoute:
|
|
||||||
dashboard:
|
|
||||||
enabled: true
|
|
||||||
entryPoints:
|
|
||||||
- websecure
|
|
||||||
matchRule: Host(`ingress.lab.spamasaurus.com`)
|
|
||||||
middlewares:
|
|
||||||
- name: 2fa-authentication@file
|
|
||||||
- name: security-headers@file
|
|
||||||
logs:
|
|
||||||
general:
|
|
||||||
level: INFO
|
|
||||||
persistence:
|
|
||||||
enabled: true
|
|
||||||
name: traefik-data
|
|
||||||
ports:
|
|
||||||
web:
|
|
||||||
http:
|
|
||||||
redirections:
|
|
||||||
entryPoint:
|
|
||||||
permanent: true
|
|
||||||
scheme: https
|
|
||||||
to: websecure
|
|
||||||
websecure:
|
|
||||||
forwardedHeaders:
|
|
||||||
insecure: true
|
|
||||||
http:
|
|
||||||
tls:
|
|
||||||
certResolver: default
|
|
||||||
domains:
|
|
||||||
- main: '*.pvr.spamasaurus.com'
|
|
||||||
- main: '*.lab.spamasaurus.com'
|
|
||||||
- main: '*.spamasaurus.com'
|
|
||||||
sans:
|
|
||||||
- spamasaurus.com
|
|
||||||
- main: '*.bessems.com'
|
|
||||||
sans:
|
|
||||||
- bessems.com
|
|
||||||
- main: '*.bessems.eu'
|
|
||||||
sans:
|
|
||||||
- bessems.eu
|
|
||||||
- main: '*.gabaldon.eu'
|
|
||||||
sans:
|
|
||||||
- gabaldon.eu
|
|
||||||
- main: '*.gabaldon.nl'
|
|
||||||
sans:
|
|
||||||
- gabaldon.nl
|
|
||||||
- main: '*.itch.fyi'
|
|
||||||
sans:
|
|
||||||
- itch.fyi
|
|
||||||
options: defaults@file
|
|
||||||
providers:
|
|
||||||
kubernetesCRD:
|
|
||||||
ingressClass: ""
|
|
||||||
service:
|
|
||||||
annotations:
|
|
||||||
cloudprovider.harvesterhci.io/ip-pool: <ippoolname>
|
|
||||||
cloudprovider.harvesterhci.io/ipam: pool
|
|
||||||
spec:
|
|
||||||
externalTrafficPolicy: Local
|
|
||||||
type: LoadBalancer
|
|
||||||
volumes:
|
|
||||||
- mountPath: /etc/traefik/dynamic
|
|
||||||
name: traefik-file-provider
|
|
||||||
type: configMap
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2) Persistent storage
|
### 2) Persistent storage
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: kutt
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
apiVersion: argoproj.io/v1alpha1
|
|
||||||
kind: Application
|
|
||||||
metadata:
|
|
||||||
name: kutt
|
|
||||||
namespace: argo-cd
|
|
||||||
spec:
|
|
||||||
destination:
|
|
||||||
namespace: kutt
|
|
||||||
server: https://kubernetes.default.svc
|
|
||||||
project: default
|
|
||||||
syncPolicy:
|
|
||||||
automated: {}
|
|
||||||
syncOptions:
|
|
||||||
- CreateNamespace=true
|
|
||||||
sources:
|
|
||||||
- repoURL: https://code.spamasaurus.com/djpbessems/Kubernetes.K3s.installLog
|
|
||||||
path: services/Kutt
|
|
||||||
targetRevision: HEAD
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: kutt
|
|
||||||
namespace: kutt
|
|
||||||
labels:
|
|
||||||
app: kutt
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: kutt
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: kutt
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: kutt
|
|
||||||
image: kutt/kutt:v3.2.6
|
|
||||||
ports:
|
|
||||||
- containerPort: 3000
|
|
||||||
name: http
|
|
||||||
env:
|
|
||||||
- name: JWT_SECRET
|
|
||||||
value: Gfn2rJaiAPqRQyauxdIVKj6kWcyt2MSj
|
|
||||||
- name: DEFAULT_DOMAIN
|
|
||||||
value: renewal.bessems.com
|
|
||||||
- name: DB_FILENAME
|
|
||||||
value: /var/lib/kutt/data.sqlite
|
|
||||||
volumeMounts:
|
|
||||||
- mountPath: /var/lib/kutt
|
|
||||||
name: csismb-kutt-db
|
|
||||||
volumes:
|
|
||||||
- name: csismb-kutt-db
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: csismb-kutt-db
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
apiVersion: traefik.io/v1alpha1
|
|
||||||
kind: IngressRoute
|
|
||||||
metadata:
|
|
||||||
name: kutt
|
|
||||||
namespace: kutt
|
|
||||||
spec:
|
|
||||||
entryPoints:
|
|
||||||
- websecure
|
|
||||||
routes:
|
|
||||||
- match: Host(`renewal.bessems.com`) || Host(`p.itch.fyi`)
|
|
||||||
kind: Rule
|
|
||||||
services:
|
|
||||||
- name: kutt
|
|
||||||
port: 3000
|
|
||||||
middlewares:
|
|
||||||
- name: security-headers@file
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolume
|
|
||||||
metadata:
|
|
||||||
annotations:
|
|
||||||
pv.kubernetes.io/provisioned-by: smb.csi.k8s.io
|
|
||||||
name: csismb-kutt-db
|
|
||||||
spec:
|
|
||||||
capacity:
|
|
||||||
storage: 1Gi
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
persistentVolumeReclaimPolicy: Retain
|
|
||||||
storageClassName: csismb-kutt-db
|
|
||||||
mountOptions:
|
|
||||||
- dir_mode=0777
|
|
||||||
- file_mode=0777
|
|
||||||
- nobrl
|
|
||||||
- cache=strict
|
|
||||||
- mfsymlinks
|
|
||||||
- noserverino # required to prevent data corruption
|
|
||||||
csi:
|
|
||||||
driver: smb.csi.k8s.io
|
|
||||||
# volumeHandle format: {smb-server-address}#{sub-dir-name}#{share-name}
|
|
||||||
# make sure this value is unique for every share in the cluster
|
|
||||||
volumeHandle: 192.168.154.195#kutt#db
|
|
||||||
volumeAttributes:
|
|
||||||
source: //192.168.154.195/K3s.Volumes
|
|
||||||
subDir: kutt/db
|
|
||||||
nodeStageSecretRef:
|
|
||||||
name: smb-credentials
|
|
||||||
namespace: kutt
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: csismb-kutt-db
|
|
||||||
namespace: kutt
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteMany
|
|
||||||
storageClassName: csismb-kutt-db
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 1Gi
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
apiVersion: bitnami.com/v1alpha1
|
|
||||||
kind: SealedSecret
|
|
||||||
metadata:
|
|
||||||
name: smb-credentials
|
|
||||||
namespace: kutt
|
|
||||||
spec:
|
|
||||||
encryptedData:
|
|
||||||
password: AgCRyItWRmD4KN9z0PupawuTVVhwvUovcgOC7HThLDiP56uI7WLo45ZmZYDdMZ0PeLv9KH5eWhimSch8+M9gH3dZXwarbXJ5VrSmNUF5fodP3LrL3Tgoq3rijppfLRpYL00mHclldCkCjsBfJpO5YKzPHo5ovmWx/i7p7BzegeokKyOe8l/2Rsn6qeU2UDFarqaUAjYvOWAGmjxwlZwtE3VGy52qujsSEKOcH0whk+GTcqWb8/tdIrT8yiW6OWQaUjI9LS3uBt3ZPKc65AQld4Jk0bS+Kxb3JDletbbo1qBuDTw1IGGziGDHZ1cCYamaywYmgqFs/NvGZ94tiXV66vZaPDRJH7w+2aaGTHAZPU1pCS08Nmd6kgECXm31TbyO4asFZ2bY+wR3Hpo369rjmh0btH829FzKC8xLoqkb9r9HnYX7AGb5hBkKGzboKBsx/RuzNBwdGJKFTGaYX7pVgqFDdtdyjlbppkBNN1WfGwS/Zuyam1ZryjMfgRdg97ihVCQBOoLXgqIKxgqettc1bOzFIGp1qsDyzG530EhCP3c6NE3AQabXTJ6LNTwM9DZROwCcHhekdnlarHif7sjng/jdVlmgxX0VY6L+4hUhDeX8IJ2QBqIwk9voO7QFz4c2CMLupho+EIz9TxF+CHrdsnRa5xKP2gjaggRLtYrD/3O7A3I1uefN7P6sn2Im2KWgXiV4PXQvW50iZmcooQMYTbT1
|
|
||||||
username: AgAF7+KE/BWxojaQNtIkAGiz4++Eb/Dlu6631vzrYX8T9oFwcnL3X0dUJ3ImmRX11Kn0Xba7U99kinv16RrcYkdBqWSrjSY0V4RvvHZ9Y4B5F5rSHXUavdr9CqHQRa7wvTVBRw2eH44kypnxH+WMR5derLINCKojXPbwWndY+iGQ+I/RhIsCOoY9E0L2YCGLWYJmQFnWLTv1q08w1UJwdo/uOmtrtrneNzkHhtHcg/DNsAZ6oNYpWqspLR0hfwiO2FxHOq0J3Hmf1DIsH/m9BIaIcRX3k0ZlIlIQaxnkHPUT++vSCy1Nrsa0le9K5lsoS53A7F68gRqv/Yj0qawYhcI4CfHndW5IpE7COld4Ko4J6PqBilOtPN1Lzv67grUbi9yOaYCjknZOoUdXJGAaWY8+7n4ajEM5DqOltbarQtZNjYW7U12DNwqDZeJl4gWzKUqHSLyPxLwwXP/MQJCupU4aLBL6U3pheUNfYWe8EHzFRmDB40Gin1YxRshuC+PHndzFuXSi8jvlvwPWpSDDC9/J23NWJENi68iDL6xKnGpgHXwucUZ+WyJj9ItrLSA3AQfbhZCXYQ0fA3TlRRcbtC09L8XVo4O6CO+p7Efu5XWWey24BGx+HphtuDUZDcdiRBTtAKmJZm3v9nyuthrH4xQZoEPh7zZfBsY6b0bubhj7xdoy7tA4l01NJ/eQ9PZyz4Zi2fyVmu8=
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
name: smb-credentials
|
|
||||||
namespace: kutt
|
|
||||||
type: Opaque
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: kutt
|
|
||||||
namespace: kutt
|
|
||||||
spec:
|
|
||||||
type: ClusterIP
|
|
||||||
selector:
|
|
||||||
app: kutt
|
|
||||||
ports:
|
|
||||||
- port: 3000
|
|
||||||
targetPort: 3000
|
|
||||||
name: http
|
|
||||||
@@ -17,7 +17,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: app
|
- name: app
|
||||||
image: neosmemo/memos:0.26
|
image: neosmemo/memos:0.31
|
||||||
imagePullPolicy: Always
|
imagePullPolicy: Always
|
||||||
env:
|
env:
|
||||||
- name: MEMOS_PORT
|
- name: MEMOS_PORT
|
||||||
|
|||||||
Reference in New Issue
Block a user