Compare commits

..

1 commit

Author SHA1 Message Date
Renovate Bot
7ba264986c Update Helm release gitlab-runner to v0.84.2 2026-01-10 07:03:41 +00:00
248 changed files with 10870 additions and 1146 deletions

4
.gitignore vendored
View file

@ -1,3 +1,3 @@
*/.terraform
*/.terraform.lock.hcl
.idea .idea
infra/terraform/.terraform
infra/terraform/.terraform.lock.hcl

34
.gitlab/.gitlab-ci.yml Normal file
View file

@ -0,0 +1,34 @@
stages:
- triggers
build_dmz:
stage: triggers
trigger:
include: infra/.gitlab/.gitlab-ci.yml
rules:
- changes:
- "dmz/terraform/*.tf"
build_infra:
stage: triggers
trigger:
include: infra/.gitlab/.gitlab-ci.yml
rules:
- changes:
- "infra/terraform/*.tf"
build_dev:
stage: triggers
trigger:
include: dev/.gitlab/.gitlab-ci.yml
rules:
- changes:
- "dev/terraform/*.tf"
build_prd:
stage: triggers
trigger:
include: prd/.gitlab/.gitlab-ci.yml
rules:
- changes:
- "prd/terraform/*.tf"

5
ansible/base.yaml Normal file
View file

@ -0,0 +1,5 @@
- hosts: all
gather_facts: yes
become: yes
roles:
- base

2
ansible/newcluster.yaml Normal file
View file

@ -0,0 +1,2 @@
argocd login --insecure
argocd cluster add default --name prd --yes --kubeconfig ~/Documents/config-prd

View file

@ -0,0 +1 @@
Acquire::http::Proxy "http://192.168.21.200:3142";

View file

@ -0,0 +1,4 @@
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

View file

@ -0,0 +1,2 @@
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIGilcndatMrXg06VxtNKuIo3scoyyXbYX8Z7cOjeA102AAAABHNzaDo= desktop-arch-09-08-2025-yubikey
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAINsbNSZ5Wr+50Ahz+IeZxt6F7gZ6wm1J8uKXQLbdbKFaAAAABHNzaDo= desktop-arch-09-08-2025-yubikeyNano

View file

@ -0,0 +1,4 @@
Use of this system is restricted to authorized users only, and all use is subjected to an acceptable use policy.
IF YOU ARE NOT AUTHORIZED TO USE THIS SYSTEM, DISCONNECT NOW.

View file

@ -0,0 +1,4 @@
THIS SYSTEM IS FOR AUTHORIZED USE ONLY
All activities are logged and monitored.

View file

@ -0,0 +1,95 @@
# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 1024
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
X11Forwarding no
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes
ClientAliveInterval 300
#enable remote powershell
#Subsystem powershell /usr/bin/pwsh -sshs -NoLogo

View file

@ -0,0 +1,155 @@
- name: Copy apt proxy
copy:
src: files/01proxy
dest: /etc/apt/apt.conf.d/01proxy
owner: root
group: root
mode: "0644"
force: yes
when:
- ansible_os_family == "Debian"
- inventory_hostname not in hosts_deny
- name: Update packages
apt:
name: '*'
state: latest
update_cache: yes
only_upgrade: yes
retries: 300
delay: 10
- name: Remove packages not needed anymore
apt:
autoremove: yes
retries: 300
delay: 10
- name: Install required packages Debian
apt:
state: latest
pkg: "{{ item }}"
with_items: "{{ required_packages }}"
retries: 300
delay: 10
- name: Create user account
user:
name: "user"
shell: /bin/bash
state: present
createhome: yes
- name: ensure ssh folder exists for user
file:
path: /home/user/.ssh
owner: user
group: user
mode: "0700"
state: directory
- name: Deploy SSH Key (user)
copy:
dest: /home/user/.ssh/authorized_keys
src: files/authorized_keys_user
owner: user
group: user
force: true
- name: Remove Root SSH Configuration
file:
path: /root/.ssh
state: absent
- name: Copy Secured SSHD Configuration
copy:
src: files/sshd_config_secured
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: "0644"
when: ansible_os_family == "Debian"
- name: Copy Secured SSHD Configuration
copy:
src: files/sshd_config_secured_redhat
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: "0644"
when: ansible_os_family == "RedHat"
- name: Restart SSHD
systemd:
name: sshd
daemon_reload: yes
state: restarted
enabled: yes
ignore_errors: yes
- name: Copy unattended-upgrades file
copy:
src: files/10periodic
dest: /etc/apt/apt.conf.d/10periodic
owner: root
group: root
mode: "0644"
force: yes
when: ansible_os_family == "Debian"
- name: Remove undesirable packages
package:
name: "{{ unnecessary_software }}"
state: absent
when: ansible_os_family == "Debian"
- name: Stop and disable unnecessary services
service:
name: "{{ item }}"
state: stopped
enabled: no
with_items: "{{ unnecessary_services }}"
ignore_errors: yes
- name: Set a message of the day
copy:
dest: /etc/motd
src: files/motd
owner: root
group: root
mode: 0644
- name: Set a login banner
copy:
dest: "{{ item }}"
src: files/issue
owner: root
group: root
mode: 0644
with_items:
- /etc/issue
- /etc/issue.net
- name: set timezone
shell: timedatectl set-timezone America/Chicago
- name: Enable cockpit
systemd:
name: cockpit
daemon_reload: yes
state: restarted
enabled: yes
- name: change password
ansible.builtin.user:
name: "user"
state: present
password: "{{ lookup('ansible.builtin.env', 'USER_PASSWORD') | password_hash('sha512') }}"
- name: add user to sudoers
community.general.sudoers:
name: user
state: present
user: user
commands: ALL

View file

@ -0,0 +1,17 @@
required_packages:
- ufw
- qemu-guest-agent
- fail2ban
- unattended-upgrades
- cockpit
- nfs-common
- open-iscsi
unnecessary_services:
- postfix
- telnet
unnecessary_software:
- tcpdump
- nmap-ncat
- wpa_supplicant

115
dev/terraform/k3s.tf Normal file
View file

@ -0,0 +1,115 @@
resource "proxmox_vm_qemu" "k3smaster" {
count = local.k3smaster.count
ciuser = "administrator"
vmid = "${local.vlan}${local.k3smaster.ip[count.index]}"
name = local.k3smaster.name[count.index]
target_node = local.k3smaster.node[count.index]
clone = local.template
tags = local.k3smaster.tags
qemu_os = "l26"
full_clone = true
os_type = "cloud-init"
agent = 1
cores = local.k3smaster.cores
sockets = 1
cpu_type = "host"
memory = local.k3smaster.memory
scsihw = "virtio-scsi-pci"
#bootdisk = "scsi0"
boot = "order=virtio0"
onboot = true
sshkeys = local.sshkeys
vga {
type = "serial0"
}
serial {
id = 0
type = "socket"
}
disks {
ide {
ide2 {
cloudinit {
storage = local.k3smaster.storage
}
}
}
virtio {
virtio0 {
disk {
size = local.k3smaster.drive
format = local.format
storage = local.k3smaster.storage
}
}
}
}
network {
id = 0
model = "virtio"
bridge = "vmbr0"
tag = local.vlan
}
#Cloud Init Settings
ipconfig0 = "ip=192.168.${local.vlan}.${local.k3smaster.ip[count.index]}/24,gw=192.168.${local.vlan}.1"
searchdomain = "durp.loc"
nameserver = local.dnsserver
}
resource "proxmox_vm_qemu" "k3sserver" {
count = local.k3sserver.count
ciuser = "administrator"
vmid = "${local.vlan}${local.k3sserver.ip[count.index]}"
name = local.k3sserver.name[count.index]
target_node = local.k3sserver.node[count.index]
clone = local.template
tags = local.k3sserver.tags
qemu_os = "l26"
full_clone = true
os_type = "cloud-init"
agent = 1
cores = local.k3sserver.cores
sockets = 1
cpu_type = "host"
memory = local.k3sserver.memory
scsihw = "virtio-scsi-pci"
#bootdisk = "scsi0"
boot = "order=virtio0"
onboot = true
sshkeys = local.sshkeys
vga {
type = "serial0"
}
serial {
id = 0
type = "socket"
}
disks {
ide {
ide2 {
cloudinit {
storage = local.k3sserver.storage
}
}
}
virtio {
virtio0 {
disk {
size = local.k3sserver.drive
format = local.format
storage = local.k3sserver.storage
}
}
}
}
network {
id = 0
model = "virtio"
bridge = "vmbr0"
tag = local.vlan
}
#Cloud Init Settings
ipconfig0 = "ip=192.168.${local.vlan}.${local.k3sserver.ip[count.index]}/24,gw=192.168.${local.vlan}.1"
searchdomain = "durp.loc"
nameserver = local.dnsserver
}

48
dev/terraform/main.tf Normal file
View file

@ -0,0 +1,48 @@
terraform {
backend "http" {}
required_providers {
proxmox = {
source = "Telmate/proxmox"
version = "3.0.1-rc9"
}
}
}
provider "proxmox" {
pm_parallel = 1
pm_tls_insecure = true
pm_api_url = var.pm_api_url
pm_user = var.pm_user
pm_password = var.pm_password
pm_debug = false
}
locals {
sshkeys = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDEphzWgwUZnvL6E5luKLt3WO0HK7Kh63arSMoNl5gmjzXyhG1DDW0OKfoIl0T+JZw/ZjQ7iii6tmSLFRk6nuYCldqe5GVcFxvTzX4/xGEioAyG0IiUGKy6s+9xzO8QXF0EtSNPH0nfHNKcCjgwWAzM+Lt6gW0Vqs+aU5ICuDiEchmvYPz+rBaVldJVTG7m3ogKJ2aIF7HU/pCPp5l0E9gMOw7s0ABijuc3KXLEWCYgL39jIST6pFH9ceRLmu8Xy5zXHAkkEEauY/e6ld0hlzLadiUD7zYJMdDcm0oRvenYcUlaUl9gS0569IpfsJsjCejuqOxCKzTHPJDOT0f9TbIqPXkGq3s9oEJGpQW+Z8g41BqRpjBCdBk+yv39bzKxlwlumDwqgx1WP8xxKavAWYNqNRG7sBhoWwtxYEOhKXoLNjBaeDRnO5OY5AQJvONWpuByyz0R/gTh4bOFVD+Y8WWlKbT4zfhnN70XvapRsbZiaGhJBPwByAMGg6XxSbC6xtbyligVGCEjCXbTLkeKq1w0DuItY+FBGO3J2k90OiciTVSeyiVz9J/Y03UB0gHdsMCoVNrj+9QWfrTLDhM7D5YrXUt5nj2LQTcbtf49zoQXWxUhozlg42E/FJU/Yla7y55qWizAEVyP2/Ks/PHrF679k59HNd2IJ/aicA9QnmWtLQ== ansible"
template = "Debian12-Template"
format = "raw"
dnsserver = "192.168.10.1"
vlan = 10
k3smaster = {
tags = "k3s_dev"
count = 3
name = ["master01-dev", "master02-dev", "master03-dev"]
cores = 2
memory = "4096"
drive = 20
storage = "cache-domains"
node = ["mothership", "overlord", "vanguard"]
ip = ["11", "12", "13"]
}
k3sserver = {
tags = "k3s_dev"
count = 3
name = ["node01-dev", "node02-dev", "node03-dev"]
cores = 4
memory = "8192"
drive = 120
storage = "cache-domains"
node = ["mothership", "overlord", "vanguard"]
ip = ["21", "22", "23"]
}
}

View file

@ -0,0 +1,14 @@
variable "pm_api_url" {
description = "API URL to Proxmox provider"
type = string
}
variable "pm_password" {
description = "Passowrd to Proxmox provider"
type = string
}
variable "pm_user" {
description = "Username to Proxmox provider"
type = string
}

View file

@ -0,0 +1,62 @@
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: authentik-tls
spec:
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
secretName: authentik-tls
commonName: "authentik.durp.info"
dnsNames:
- "authentik.durp.info"
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: authentik-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`authentik.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: infra-cluster
port: 443
tls:
secretName: authentik-tls
---
kind: Service
apiVersion: v1
metadata:
name: authentik-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: authentik.durp.info
spec:
type: ExternalName
externalName: durp.info
---
apiVersion: v1
kind: Endpoints
metadata:
name: infra-cluster
subsets:
- addresses:
- ip: 192.168.12.130
ports:
- port: 443
---
apiVersion: v1
kind: Service
metadata:
name: infra-cluster
spec:
ports:
- protocol: TCP
port: 443
targetPort: 443

View file

@ -8,5 +8,8 @@ appVersion: 0.0.1
dependencies: dependencies:
- name: gitlab-runner - name: gitlab-runner
repository: https://charts.gitlab.io/ repository: https://charts.gitlab.io/
version: 0.77.2 version: 0.84.2
- name: gitlab-runner
repository: https://charts.gitlab.io/
version: 0.84.2
alias: personal alias: personal

View file

@ -1,11 +1,11 @@
personal: gitlab-runner:
image: image:
registry: registry.durp.info registry: registry.durp.info
image: gitlab-org/gitlab-runner image: gitlab-org/gitlab-runner
imagePullPolicy: Always imagePullPolicy: Always
gitlabUrl: https://gitlab.durp.info/ gitlabUrl: https://gitlab.com/
unregisterRunner: false unregisterRunner: false
terminationGracePeriodSeconds: 3600 terminationGracePeriodSeconds: 3600
concurrent: 10 concurrent: 10
@ -18,15 +18,87 @@ personal:
podSecurityPolicy: podSecurityPolicy:
enabled: false enabled: false
resourceNames: resourceNames:
- gitlab-runner - gitlab-runner
metrics: metrics:
enabled: true enabled: true
serviceMonitor: serviceMonitor:
enabled: true enabled: true
service: service:
enabled: true enabled: true
annotations: {} annotations: {}
runners:
config: |
[[runners]]
[runners.kubernetes]
namespace = "{{.Release.Namespace}}"
image = "ubuntu:22.04"
privileged = true
executor: kubernetes
name: "k3s"
runUntagged: true
privileged: true
secret: gitlab-secret
#builds:
#cpuLimit: 200m
#cpuLimitOverwriteMaxAllowed: 400m
#memoryLimit: 256Mi
#memoryLimitOverwriteMaxAllowed: 512Mi
#cpuRequests: 100m
#cpuRequestsOverwriteMaxAllowed: 200m
#memoryRequests: 128Mi
#memoryRequestsOverwriteMaxAllowed: 256Mi
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: false
runAsNonRoot: true
privileged: false
capabilities:
drop: ["ALL"]
podSecurityContext:
runAsUser: 100
fsGroup: 65533
resources:
limits:
memory: 2Gi
requests:
memory: 128Mi
cpu: 500m
personal:
image:
registry: registry.durp.info
image: gitlab-org/gitlab-runner
imagePullPolicy: Always
gitlabUrl: https://gitlab.com/
unregisterRunner: false
terminationGracePeriodSeconds: 3600
concurrent: 10
checkInterval: 30
rbac:
create: true
rules: []
clusterWideAccess: false
podSecurityPolicy:
enabled: false
resourceNames:
- gitlab-runner
metrics:
enabled: true
serviceMonitor:
enabled: true
service:
enabled: true
annotations: {}
runners: runners:
config: | config: |
@ -41,15 +113,15 @@ personal:
runUntagged: true runUntagged: true
privileged: true privileged: true
secret: gitlab-secret-personal secret: gitlab-secret-personal
builds: #builds:
cpuLimit: 200m #cpuLimit: 200m
cpuLimitOverwriteMaxAllowed: 400m #cpuLimitOverwriteMaxAllowed: 400m
memoryLimit: 256Mi #memoryLimit: 256Mi
memoryLimitOverwriteMaxAllowed: 512Mi #memoryLimitOverwriteMaxAllowed: 512Mi
cpuRequests: 100m #cpuRequests: 100m
cpuRequestsOverwriteMaxAllowed: 200m #cpuRequestsOverwriteMaxAllowed: 200m
memoryRequests: 128Mi #memoryRequests: 128Mi
memoryRequestsOverwriteMaxAllowed: 256Mi #memoryRequestsOverwriteMaxAllowed: 256Mi
securityContext: securityContext:
allowPrivilegeEscalation: false allowPrivilegeEscalation: false
@ -63,9 +135,9 @@ personal:
runAsUser: 100 runAsUser: 100
fsGroup: 65533 fsGroup: 65533
resources: resources:
limits: limits:
memory: 2Gi memory: 2Gi
requests: requests:
memory: 128Mi memory: 128Mi
cpu: 50m cpu: 500m

View file

@ -1,34 +0,0 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: argocd-infra-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`argocd.infra.durp.info`)
middlewares:
- name: whitelist
namespace: traefik
kind: Rule
services:
- name: infra-cluster
port: 443
scheme: https
tls:
secretName: argocd-infra-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: argocd-infra-tls
spec:
secretName: argocd-infra-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
commonName: "argocd.infra.durp.info"
dnsNames:
- "argocd.infra.durp.info"

View file

@ -1,40 +1,40 @@
apiVersion: cert-manager.io/v1 #apiVersion: traefik.io/v1alpha1
kind: Certificate #kind: IngressRoute
metadata: #metadata:
name: authentik-tls # name: authentik-ingress
spec: #spec:
issuerRef: # entryPoints:
name: letsencrypt-production # - websecure
kind: ClusterIssuer # routes:
secretName: authentik-tls # - match: Host(`authentik.durp.info`) && PathPrefix(`/`)
commonName: "authentik.durp.info" # kind: Rule
dnsNames: # services:
- "authentik.durp.info" # - name: infra-cluster
# port: 443
--- # tls:
apiVersion: traefik.io/v1alpha1 # secretName: authentik-tls
kind: IngressRoute #
metadata: #---
name: authentik-ingress #apiVersion: cert-manager.io/v1
spec: #kind: Certificate
entryPoints: #metadata:
- websecure # name: authentik-tls
routes: #spec:
- match: Host(`authentik.durp.info`) && PathPrefix(`/`) # issuerRef:
kind: Rule # name: letsencrypt-production
services: # kind: ClusterIssuer
- name: infra-cluster # secretName: authentik-tls
port: 443 # commonName: "authentik.durp.info"
tls: # dnsNames:
secretName: authentik-tls # - "authentik.durp.info"
#
--- #---
kind: Service #kind: Service
apiVersion: v1 #apiVersion: v1
metadata: #metadata:
name: authentik-external-dns # name: authentik-external-dns
annotations: # annotations:
external-dns.alpha.kubernetes.io/hostname: authentik.durp.info # external-dns.alpha.kubernetes.io/hostname: authentik.durp.info
spec: #spec:
type: ExternalName # type: ExternalName
externalName: durp.info # externalName: durp.info

View file

@ -1,3 +1,32 @@
apiVersion: v1
kind: Service
metadata:
name: duplicati
spec:
ports:
- name: app
port: 8200
protocol: TCP
targetPort: 8200
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: duplicati
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 8200
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
@ -14,7 +43,7 @@ spec:
namespace: traefik namespace: traefik
kind: Rule kind: Rule
services: services:
- name: unraid - name: duplicati
port: 8200 port: 8200
tls: tls:
secretName: duplicati-tls secretName: duplicati-tls

View file

@ -9,6 +9,7 @@ subsets:
- port: 443 - port: 443
--- ---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
@ -20,6 +21,7 @@ spec:
targetPort: 443 targetPort: 443
--- ---
apiVersion: v1 apiVersion: v1
kind: Endpoints kind: Endpoints
metadata: metadata:
@ -31,6 +33,7 @@ subsets:
- port: 443 - port: 443
--- ---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
@ -40,191 +43,3 @@ spec:
- protocol: TCP - protocol: TCP
port: 443 port: 443
targetPort: 443 targetPort: 443
---
apiVersion: v1
kind: Service
metadata:
name: unraid
spec:
ports:
- name: https
protocol: TCP
port: 443
targetPort: 443
- name: tdarr
port: 8267
protocol: TCP
targetPort: 8267
- name: duplicati
port: 8200
protocol: TCP
targetPort: 8200
- name: forgejo
port: 3000
protocol: TCP
- name: kuma
port: 3001
protocol: TCP
targetPort: 3000
- name: freshrss
port: 8085
protocol: TCP
targetPort: 8085
- name: gitlab-ssh
port: 9022
protocol: TCP
targetPort: 9022
- name: gitlab
port: 9443
protocol: TCP
targetPort: 9443
- name: minio
port: 9769
protocol: TCP
targetPort: 9769
- name: nextcloud
port: 11000
protocol: TCP
targetPort: 11000
- name: nexus
port: 8081
protocol: TCP
targetPort: 8081
- name: openweb-ui
port: 8089
protocol: TCP
targetPort: 8089
- name: plex
port: 32400
protocol: TCP
targetPort: 32400
- name: registry
port: 5000
protocol: TCP
targetPort: 5000
- name: gitlab-registry
port: 5002
protocol: TCP
targetPort: 5002
- name: root-vault
port: 8201
protocol: TCP
targetPort: 8201
- name: s3
port: 9768
protocol: TCP
targetPort: 9768
- name: smokeping
port: 81
protocol: TCP
targetPort: 81
- name: gotify
port: 8070
protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
name: unraid
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: https
port: 443
protocol: TCP
- name: tdarr
port: 8267
protocol: TCP
- name: duplicati
port: 8200
protocol: TCP
- name: forgejo
port: 3000
protocol: TCP
- name: kuma
port: 3001
protocol: TCP
- name: freshrss
port: 8085
protocol: TCP
- name: gitlab-ssh
port: 9022
protocol: TCP
- name: gitlab
port: 9443
protocol: TCP
- name: minio
port: 9769
protocol: TCP
- name: nextcloud
port: 11000
protocol: TCP
- name: nexus
port: 8081
protocol: TCP
- name: openweb-ui
port: 8089
protocol: TCP
- name: plex
port: 32400
protocol: TCP
- name: registry
port: 5000
protocol: TCP
- name: gitlab-registry
port: 5002
protocol: TCP
- name: root-vault
port: 8201
protocol: TCP
- name: s3
port: 9768
protocol: TCP
- name: smokeping
port: 81
protocol: TCP
- name: gotify
port: 8070
protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
name: ubuntu
subsets:
- addresses:
- ip: 192.168.20.104
ports:
- name: https
port: 443
protocol: TCP
- name: litellm
port: 4000
protocol: TCP
- name: ollama
port: 11435
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: ubuntu
spec:
ports:
- name: https
port: 443
protocol: TCP
targetPort: 443
- name: litellm
port: 4000
protocol: TCP
targetPort: 4000
- name: ollama
port: 11435
protocol: TCP
targetPort: 11435

View file

@ -1,43 +0,0 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: forgejo-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`forgejo.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: unraid
port: 3000
scheme: http
tls:
secretName: forgejo-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: forgejo-tls
spec:
secretName: forgejo-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "forgejo.durp.info"
dnsNames:
- "forgejo.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: forgejo-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: forgejo.durp.info
spec:
type: ExternalName
externalName: durp.info

View file

@ -1,30 +0,0 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: freshrss-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`freshrss.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: unraid
port: 8085
tls:
secretName: freshrss-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: freshrss-tls
spec:
secretName: freshrss-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
commonName: "freshrss.durp.info"
dnsNames:
- "freshrss.durp.info"

View file

@ -0,0 +1,72 @@
apiVersion: v1
kind: Service
metadata:
name: gitea
spec:
ports:
- name: app
port: 3000
protocol: TCP
targetPort: 3000
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: gitea
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 3000
protocol: TCP
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: gitea-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`gitea.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: gitea
port: 3000
scheme: http
tls:
secretName: gitea-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: gitea-tls
spec:
secretName: gitea-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "gitea.durp.info"
dnsNames:
- "gitea.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: gitea-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: gitea.durp.info
spec:
type: ExternalName
externalName: durp.info

View file

@ -1,30 +1,30 @@
#apiVersion: v1 apiVersion: v1
#kind: Service kind: Service
#metadata: metadata:
# name: gitlab-ssh name: gitlab-ssh
#spec: spec:
# ports: ports:
# - name: app - name: app
# port: 9022 port: 9022
# protocol: TCP protocol: TCP
# targetPort: 9022 targetPort: 9022
# clusterIP: None clusterIP: None
# type: ClusterIP type: ClusterIP
#
#--- ---
#apiVersion: v1 apiVersion: v1
#kind: Endpoints kind: Endpoints
#metadata: metadata:
# name: gitlab-ssh name: gitlab-ssh
#subsets: subsets:
# - addresses: - addresses:
# - ip: 192.168.21.200 - ip: 192.168.21.200
# ports: ports:
# - name: app - name: app
# port: 9022 port: 9022
# protocol: TCP protocol: TCP
#
#--- ---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP kind: IngressRouteTCP
metadata: metadata:
@ -35,9 +35,36 @@ spec:
routes: routes:
- match: HostSNI(`*`) - match: HostSNI(`*`)
services: services:
- name: unraid - name: gitlab-ssh
port: 9022 port: 9022
---
apiVersion: v1
kind: Service
metadata:
name: gitlab
spec:
ports:
- name: app
port: 9443
protocol: TCP
targetPort: 9443
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: gitlab
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 9443
protocol: TCP
--- ---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
@ -50,7 +77,7 @@ spec:
- match: Host(`gitlab.durp.info`) && PathPrefix(`/`) - match: Host(`gitlab.durp.info`) && PathPrefix(`/`)
kind: Rule kind: Rule
services: services:
- name: unraid - name: gitlab
port: 9443 port: 9443
scheme: https scheme: https
tls: tls:
@ -80,46 +107,3 @@ metadata:
spec: spec:
type: ExternalName type: ExternalName
externalName: durp.info externalName: durp.info
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: gitlab-registry
spec:
entryPoints:
- websecure
routes:
- match: Host(`images.durp.info`)
kind: Rule
services:
- name: unraid
port: 5002
scheme: http
tls:
secretName: gitlab-images-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: gitlab-images-tls
spec:
secretName: gitlab-images-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "images.durp.info"
dnsNames:
- "images.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: gitlab-images-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: images.durp.info
spec:
type: ExternalName
externalName: durp.info

View file

@ -1,41 +0,0 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: gotify-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`gotify.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: unraid
port: 8070
scheme: http
tls:
secretName: gotify-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: gotify-tls
spec:
secretName: gotify-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "gotify.durp.info"
dnsNames:
- "gotify.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: gotify-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: gotify.durp.info
spec:
type: ExternalName
externalName: durp.info

View file

@ -1,75 +1,74 @@
#apiVersion: v1 apiVersion: v1
#kind: Service kind: Service
#metadata: metadata:
# name: invidious name: invidious
#spec: spec:
# ports: ports:
# - name: app - name: app
# port: 3000 port: 3000
# protocol: TCP protocol: TCP
# targetPort: 3000 targetPort: 3000
# clusterIP: None clusterIP: None
# type: ClusterIP type: ClusterIP
#
#--- ---
#
#apiVersion: v1 apiVersion: v1
#kind: Endpoints kind: Endpoints
#metadata: metadata:
# name: invidious name: invidious
#subsets: subsets:
#- addresses: - addresses:
# - ip: 192.168.20.104 - ip: 192.168.20.104
# ports: ports:
# - name: app - name: app
# port: 3000 port: 3000
# protocol: TCP protocol: TCP
#
#--- ---
#
#apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
#kind: IngressRoute kind: IngressRoute
#metadata: metadata:
# name: invidious-ingress name: invidious-ingress
#spec: spec:
# entryPoints: entryPoints:
# - websecure - websecure
# routes: routes:
# - match: Host(`invidious.durp.info`) && PathPrefix(`/`) - match: Host(`invidious.durp.info`) && PathPrefix(`/`)
# middlewares: middlewares:
# - name: authentik-proxy-provider - name: authentik-proxy-provider
# namespace: traefik namespace: traefik
# kind: Rule kind: Rule
# services: services:
# - name: invidious - name: invidious
# port: 3000 port: 3000
# tls: tls:
# secretName: invidious-tls secretName: invidious-tls
#
#--- ---
#
#apiVersion: cert-manager.io/v1 apiVersion: cert-manager.io/v1
#kind: Certificate kind: Certificate
#metadata: metadata:
# name: invidious-tls name: invidious-tls
#spec: spec:
# secretName: invidious-tls secretName: invidious-tls
# issuerRef: issuerRef:
# name: letsencrypt-production name: letsencrypt-production
# kind: ClusterIssuer kind: ClusterIssuer
# commonName: "invidious.durp.info" commonName: "invidious.durp.info"
# dnsNames: dnsNames:
# - "invidious.durp.info" - "invidious.durp.info"
#
#--- ---
#
#kind: Service kind: Service
#apiVersion: v1 apiVersion: v1
#metadata: metadata:
# name: invidious-external-dns name: invidious-external-dns
# annotations: annotations:
# external-dns.alpha.kubernetes.io/hostname: invidious.durp.info external-dns.alpha.kubernetes.io/hostname: invidious.durp.info
#spec: spec:
# type: ExternalName type: ExternalName
# externalName: durp.info externalName: durp.info
#

View file

@ -1,3 +1,32 @@
apiVersion: v1
kind: Service
metadata:
name: kasm
spec:
ports:
- name: app
port: 443
protocol: TCP
targetPort: 443
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: kasm
subsets:
- addresses:
- ip: 192.168.20.104
ports:
- name: app
port: 443
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
@ -9,7 +38,7 @@ spec:
- match: Host(`kasm.durp.info`) && PathPrefix(`/`) - match: Host(`kasm.durp.info`) && PathPrefix(`/`)
kind: Rule kind: Rule
services: services:
- name: ubuntu - name: kasm
port: 443 port: 443
scheme: https scheme: https
tls: tls:

View file

@ -6,30 +6,34 @@ spec:
entryPoints: entryPoints:
- websecure - websecure
routes: routes:
- match: Host(`kuma.durp.info`) && PathPrefix(`/`) - match: Host(`kuma.durp.info`) && PathPrefix(`/`)
kind: Rule kind: Rule
services: middlewares:
- name: unraid - name: authentik-proxy-provider
port: 3001 namespace: traefik
scheme: http services:
- name: master-cluster
port: 443
tls: tls:
secretName: kuma-tls secretName: kuma-tls
--- ---
apiVersion: cert-manager.io/v1 apiVersion: cert-manager.io/v1
kind: Certificate kind: Certificate
metadata: metadata:
name: kuma-tls name: kuma-tls
spec: spec:
secretName: kuma-tls
issuerRef: issuerRef:
name: letsencrypt-production name: letsencrypt-production
kind: ClusterIssuer kind: ClusterIssuer
secretName: kuma-tls
commonName: "kuma.durp.info" commonName: "kuma.durp.info"
dnsNames: dnsNames:
- "kuma.durp.info" - "kuma.durp.info"
--- ---
kind: Service kind: Service
apiVersion: v1 apiVersion: v1
metadata: metadata:

View file

@ -1,3 +1,32 @@
apiVersion: v1
kind: Service
metadata:
name: litellm
spec:
ports:
- name: app
port: 4000
protocol: TCP
targetPort: 4000
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: litellm
subsets:
- addresses:
- ip: 192.168.20.104
ports:
- name: app
port: 4000
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
@ -9,7 +38,7 @@ spec:
- match: Host(`litellm.durp.info`) && PathPrefix(`/`) - match: Host(`litellm.durp.info`) && PathPrefix(`/`)
kind: Rule kind: Rule
services: services:
- name: ubuntu - name: litellm
port: 4000 port: 4000
tls: tls:
secretName: litellm-tls secretName: litellm-tls

View file

@ -1,34 +0,0 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: longhorn-infra-ingress
annotations:
cert-manager.io/cluster-issuer: vault-issuer
spec:
entryPoints:
- websecure
routes:
- match: Host(`longhorn.infra.durp.info`) && PathPrefix(`/`)
kind: Rule
middlewares:
- name: authentik-proxy-provider
namespace: traefik
services:
- name: infra-cluster
port: 443
tls:
secretName: longhorn-infra-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: longhorn-infra-tls
spec:
secretName: longhorn-infra-tls
issuerRef:
name: vault-issuer
kind: ClusterIssuer
commonName: "longhorn.infra.durp.info"
dnsNames:
- "longhorn.infra.durp.info"

View file

@ -1,3 +1,32 @@
apiVersion: v1
kind: Service
metadata:
name: minio
spec:
ports:
- name: app
port: 9769
protocol: TCP
targetPort: 9769
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: minio
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 9769
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
@ -12,7 +41,7 @@ spec:
namespace: traefik namespace: traefik
kind: Rule kind: Rule
services: services:
- name: unraid - name: minio
port: 9769 port: 9769
scheme: http scheme: http
tls: tls:

View file

@ -1,68 +1,68 @@
#apiVersion: v1 apiVersion: v1
#kind: Service kind: Service
#metadata: metadata:
# name: n8n name: n8n
#spec: spec:
# ports: ports:
# - name: app - name: app
# port: 5678 port: 5678
# protocol: TCP protocol: TCP
# targetPort: 5678 targetPort: 5678
# clusterIP: None clusterIP: None
# type: ClusterIP type: ClusterIP
#
#--- ---
#apiVersion: v1 apiVersion: v1
#kind: Endpoints kind: Endpoints
#metadata: metadata:
# name: n8n name: n8n
#subsets: subsets:
# - addresses: - addresses:
# - ip: 192.168.21.200 - ip: 192.168.21.200
# ports: ports:
# - name: app - name: app
# port: 5678 port: 5678
# protocol: TCP protocol: TCP
#
#--- ---
#apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
#kind: IngressRoute kind: IngressRoute
#metadata: metadata:
# name: n8n-ingress name: n8n-ingress
#spec: spec:
# entryPoints: entryPoints:
# - websecure - websecure
# routes: routes:
# - match: Host(`n8n.durp.info`) && PathPrefix(`/`) - match: Host(`n8n.durp.info`) && PathPrefix(`/`)
# kind: Rule kind: Rule
# services: services:
# - name: n8n - name: n8n
# port: 5678 port: 5678
# scheme: http scheme: http
# tls: tls:
# secretName: n8n-tls secretName: n8n-tls
#
#--- ---
#apiVersion: cert-manager.io/v1 apiVersion: cert-manager.io/v1
#kind: Certificate kind: Certificate
#metadata: metadata:
# name: n8n-tls name: n8n-tls
#spec: spec:
# secretName: n8n-tls secretName: n8n-tls
# issuerRef: issuerRef:
# name: letsencrypt-production name: letsencrypt-production
# kind: ClusterIssuer kind: ClusterIssuer
# commonName: "n8n.durp.info" commonName: "n8n.durp.info"
# dnsNames: dnsNames:
# - "n8n.durp.info" - "n8n.durp.info"
#
#--- ---
#kind: Service kind: Service
#apiVersion: v1 apiVersion: v1
#metadata: metadata:
# name: n8n-dns name: n8n-dns
# annotations: annotations:
# dns.alpha.kubernetes.io/hostname: n8n.durp.info dns.alpha.kubernetes.io/hostname: n8n.durp.info
#spec: spec:
# type: ExternalName type: ExternalName
# externalName: durp.info externalName: durp.info

View file

@ -1,74 +0,0 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: nextcloud-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`nextcloud.durp.info`) && PathPrefix(`/`)
kind: Rule
middlewares:
- name: nextcloud-chain
services:
- name: unraid
port: 11000
scheme: http
tls:
secretName: nextcloud-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: nextcloud-tls
spec:
secretName: nextcloud-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "nextcloud.durp.info"
dnsNames:
- "nextcloud.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: nextcloud-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: nextcloud.durp.info
spec:
type: ExternalName
externalName: durp.info
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: nextcloud-secure-headers
spec:
headers:
hostsProxyHeaders:
- "X-Forwarded-Host"
referrerPolicy: "same-origin"
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: https-redirect
spec:
redirectScheme:
scheme: https
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: nextcloud-chain
spec:
chain:
middlewares:
- name: https-redirect
- name: nextcloud-secure-headers

View file

@ -1,3 +1,32 @@
apiVersion: v1
kind: Service
metadata:
name: nexus
spec:
ports:
- name: app
port: 8081
protocol: TCP
targetPort: 8081
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: nexus
subsets:
- addresses:
- ip: 192.168.20.200
ports:
- name: app
port: 8081
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
@ -9,7 +38,7 @@ spec:
- match: Host(`nexus.durp.info`) && PathPrefix(`/`) - match: Host(`nexus.durp.info`) && PathPrefix(`/`)
kind: Rule kind: Rule
services: services:
- name: unraid - name: nexus
port: 8081 port: 8081
tls: tls:
secretName: nexus-tls secretName: nexus-tls

View file

@ -15,6 +15,7 @@ spec:
property: users property: users
--- ---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: Middleware kind: Middleware
metadata: metadata:
@ -25,6 +26,36 @@ spec:
secret: ollama-secret secret: ollama-secret
--- ---
apiVersion: v1
kind: Service
metadata:
name: ollama
spec:
ports:
- name: app
port: 11435
protocol: TCP
targetPort: 11435
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: ollama
subsets:
- addresses:
- ip: 192.168.20.104
ports:
- name: app
port: 11435
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
@ -38,12 +69,13 @@ spec:
- name: ollama-basic-auth - name: ollama-basic-auth
kind: Rule kind: Rule
services: services:
- name: ubuntu - name: ollama
port: 11435 port: 11435
tls: tls:
secretName: ollama-tls secretName: ollama-tls
--- ---
apiVersion: cert-manager.io/v1 apiVersion: cert-manager.io/v1
kind: Certificate kind: Certificate
metadata: metadata:
@ -58,6 +90,7 @@ spec:
- "ollama.durp.info" - "ollama.durp.info"
--- ---
kind: Service kind: Service
apiVersion: v1 apiVersion: v1
metadata: metadata:
@ -66,4 +99,4 @@ metadata:
external-dns.alpha.kubernetes.io/hostname: ollama.durp.info external-dns.alpha.kubernetes.io/hostname: ollama.durp.info
spec: spec:
type: ExternalName type: ExternalName
externalName: durp.info externalName: durp.info

View file

@ -1,3 +1,32 @@
apiVersion: v1
kind: Service
metadata:
name: open-webui
spec:
ports:
- name: app
port: 8089
protocol: TCP
targetPort: 8089
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: open-webui
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 8089
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
@ -9,13 +38,14 @@ spec:
- match: Host(`open-webui.durp.info`) && PathPrefix(`/`) - match: Host(`open-webui.durp.info`) && PathPrefix(`/`)
kind: Rule kind: Rule
services: services:
- name: unraid - name: open-webui
port: 8089 port: 8089
scheme: http scheme: http
tls: tls:
secretName: open-webui-tls secretName: open-webui-tls
--- ---
apiVersion: cert-manager.io/v1 apiVersion: cert-manager.io/v1
kind: Certificate kind: Certificate
metadata: metadata:
@ -30,6 +60,7 @@ spec:
- "open-webui.durp.info" - "open-webui.durp.info"
--- ---
kind: Service kind: Service
apiVersion: v1 apiVersion: v1
metadata: metadata:

View file

@ -1,3 +1,32 @@
apiVersion: v1
kind: Service
metadata:
name: plex
spec:
ports:
- name: app
port: 32400
protocol: TCP
targetPort: 32400
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: plex
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 32400
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
@ -9,13 +38,14 @@ spec:
- match: Host(`plex.durp.info`) && PathPrefix(`/`) - match: Host(`plex.durp.info`) && PathPrefix(`/`)
kind: Rule kind: Rule
services: services:
- name: unraid - name: plex
port: 32400 port: 32400
scheme: https scheme: https
tls: tls:
secretName: plex-tls secretName: plex-tls
--- ---
apiVersion: cert-manager.io/v1 apiVersion: cert-manager.io/v1
kind: Certificate kind: Certificate
metadata: metadata:
@ -30,6 +60,7 @@ spec:
- "plex.durp.info" - "plex.durp.info"
--- ---
kind: Service kind: Service
apiVersion: v1 apiVersion: v1
metadata: metadata:

View file

@ -7,9 +7,9 @@ spec:
- websecure - websecure
routes: routes:
- match: Host(`portainer.internal.durp.info`) && PathPrefix(`/`) - match: Host(`portainer.internal.durp.info`) && PathPrefix(`/`)
middlewares: #middlewares:
- name: whitelist #- name: whitelist
namespace: traefik # namespace: traefik
kind: Rule kind: Rule
services: services:
- name: infra-cluster - name: infra-cluster

View file

@ -1,3 +1,30 @@
apiVersion: v1
kind: Service
metadata:
name: registry
spec:
ports:
- name: app
port: 5000
protocol: TCP
targetPort: 5000
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: registry
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 5000
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
@ -12,7 +39,7 @@ spec:
- name: whitelist - name: whitelist
namespace: traefik namespace: traefik
services: services:
- name: unraid - name: registry
port: 5000 port: 5000
tls: tls:
secretName: registry-tls secretName: registry-tls

View file

@ -1,3 +1,32 @@
apiVersion: v1
kind: Service
metadata:
name: root-vault
spec:
ports:
- name: app
port: 8201
protocol: TCP
targetPort: 8201
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: root-vault
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 8201
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
@ -12,13 +41,14 @@ spec:
namespace: traefik namespace: traefik
kind: Rule kind: Rule
services: services:
- name: unraid - name: root-vault
port: 8201 port: 8201
scheme: https scheme: https
tls: tls:
secretName: root-vault-tls secretName: root-vault-tls
--- ---
apiVersion: cert-manager.io/v1 apiVersion: cert-manager.io/v1
kind: Certificate kind: Certificate
metadata: metadata:

View file

@ -1,3 +1,32 @@
apiVersion: v1
kind: Service
metadata:
name: s3
spec:
ports:
- name: app
port: 9768
protocol: TCP
targetPort: 9768
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: s3
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 9768
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
@ -12,7 +41,7 @@ spec:
namespace: traefik namespace: traefik
kind: Rule kind: Rule
services: services:
- name: unraid - name: s3
port: 9768 port: 9768
scheme: http scheme: http
tls: tls:
@ -46,7 +75,7 @@ spec:
- match: Host(`s3.durp.info`) && PathPrefix(`/`) - match: Host(`s3.durp.info`) && PathPrefix(`/`)
kind: Rule kind: Rule
services: services:
- name: unraid - name: s3
port: 9768 port: 9768
scheme: http scheme: http
tls: tls:

View file

@ -1,65 +1,64 @@
#
#apiVersion: v1 apiVersion: v1
#kind: Service kind: Service
#metadata: metadata:
# name: semaphore name: semaphore
#spec: spec:
# ports: ports:
# - name: app - name: app
# port: 3001 port: 3001
# protocol: TCP protocol: TCP
# targetPort: 3001 targetPort: 3001
# clusterIP: None clusterIP: None
# type: ClusterIP type: ClusterIP
#
#--- ---
#
#apiVersion: v1 apiVersion: v1
#kind: Endpoints kind: Endpoints
#metadata: metadata:
# name: semaphore name: semaphore
#subsets: subsets:
# - addresses: - addresses:
# - ip: 192.168.21.200 - ip: 192.168.21.200
# ports: ports:
# - name: app - name: app
# port: 3001 port: 3001
# protocol: TCP protocol: TCP
#
#--- ---
#
#apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
#kind: IngressRoute kind: IngressRoute
#metadata: metadata:
# name: semaphore-ingress name: semaphore-ingress
#spec: spec:
# entryPoints: entryPoints:
# - websecure - websecure
# routes: routes:
# - match: Host(`semaphore.internal.durp.info`) && PathPrefix(`/`) - match: Host(`semaphore.internal.durp.info`) && PathPrefix(`/`)
# middlewares: middlewares:
# - name: whitelist - name: whitelist
# namespace: traefik namespace: traefik
# kind: Rule kind: Rule
# services: services:
# - name: semaphore - name: semaphore
# port: 3001 port: 3001
# scheme: http scheme: http
# tls: tls:
# secretName: semaphore-tls secretName: semaphore-tls
#
#--- ---
#
#apiVersion: cert-manager.io/v1 apiVersion: cert-manager.io/v1
#kind: Certificate kind: Certificate
#metadata: metadata:
# name: semaphore-tls name: semaphore-tls
#spec: spec:
# secretName: semaphore-tls secretName: semaphore-tls
# issuerRef: issuerRef:
# name: vault-issuer name: vault-issuer
# kind: ClusterIssuer kind: ClusterIssuer
# commonName: "semaphore.internal.durp.info" commonName: "semaphore.internal.durp.info"
# dnsNames: dnsNames:
# - "semaphore.internal.durp.info" - "semaphore.internal.durp.info"
#

View file

@ -1,3 +1,32 @@
apiVersion: v1
kind: Service
metadata:
name: smokeping
spec:
ports:
- name: app
port: 81
protocol: TCP
targetPort: 81
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: smokeping
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 81
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
@ -14,12 +43,13 @@ spec:
namespace: traefik namespace: traefik
kind: Rule kind: Rule
services: services:
- name: unraid - name: smokeping
port: 81 port: 81
tls: tls:
secretName: smokeping-tls secretName: smokeping-tls
--- ---
apiVersion: cert-manager.io/v1 apiVersion: cert-manager.io/v1
kind: Certificate kind: Certificate
metadata: metadata:
@ -34,6 +64,7 @@ spec:
- "smokeping.durp.info" - "smokeping.durp.info"
--- ---
kind: Service kind: Service
apiVersion: v1 apiVersion: v1
metadata: metadata:

View file

@ -1,3 +1,32 @@
apiVersion: v1
kind: Service
metadata:
name: tdarr
spec:
ports:
- name: app
port: 8267
protocol: TCP
targetPort: 8267
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: tdarr
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 8267
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
@ -16,7 +45,7 @@ spec:
namespace: traefik namespace: traefik
kind: Rule kind: Rule
services: services:
- name: unraid - name: tdarr
port: 8267 port: 8267
scheme: http scheme: http
tls: tls:

View file

@ -1,3 +1,33 @@
apiVersion: v1
kind: Service
metadata:
name: unraid
spec:
ports:
- name: app
port: 443
protocol: TCP
targetPort: 443
clusterIP: None
type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
name: unraid
subsets:
- addresses:
- ip: 192.168.21.200
ports:
- name: app
port: 443
protocol: TCP
---
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:

View file

@ -8,7 +8,7 @@ appVersion: 0.0.1
dependencies: dependencies:
- name: base - name: base
repository: https://istio-release.storage.googleapis.com/charts repository: https://istio-release.storage.googleapis.com/charts
version: 1.29.0 version: 1.26.2
- name: istiod - name: istiod
repository: https://istio-release.storage.googleapis.com/charts repository: https://istio-release.storage.googleapis.com/charts
version: 1.26.2 version: 1.26.2

View file

@ -1,10 +0,0 @@
apiVersion: v2
appVersion: latest
description: SearXNG is a free internet metasearch engine which aggregates results from various search services and databases.
name: searxng
version: 1.0.1
#dependencies:
# - name: common
# repository: https://library-charts.k8s-at-home.com
# version: 4.4.2
#

View file

@ -1,11 +0,0 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: searxng-config
data:
settings.yml: |-
use_default_settings: true
search:
formats:
- html
- json

View file

@ -1,40 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: searxng
name: searxng
labels:
app: searxng
spec:
selector:
matchLabels:
app: searxng
replicas: 1
template:
metadata:
labels:
app: searxng
spec:
containers:
- name: searxng
image: registry.durp.info/searxng/searxng:latest
imagePullPolicy: Always
ports:
- name: http
containerPort: 8080
env:
- name: SEARXNG_BASE_URL
value: https://searxng.durp.info
- name: SEARXNG_SECRET
valueFrom:
secretKeyRef:
name: searxng-secret
key: SEARXNG_SECRET
volumeMounts:
- name: searxng-config-volume
mountPath: /etc/searxng/settings.yml
subPath: settings.yml
volumes:
- name: searxng-config-volume
configMap:
name: searxng-config

View file

@ -1,76 +0,0 @@
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: searxng-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`searxng.durp.info`) && PathPrefix(`/`)
kind: Rule
middlewares:
- name: authentik-proxy-provider
namespace: traefik
services:
- name: searxng-service
port: 8080
tls:
secretName: searxng-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: searxng-tls
spec:
secretName: searxng-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "searxng.durp.info"
dnsNames:
- "searxng.durp.info"
---
kind: Service
apiVersion: v1
metadata:
name: searxng-external-dns
annotations:
external-dns.alpha.kubernetes.io/hostname: searxng.durp.info
spec:
type: ExternalName
externalName: durp.info
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: searxng-internal-ingress
spec:
entryPoints:
- websecure
routes:
- match: Host(`searxng.internal.durp.info`) && PathPrefix(`/`)
kind: Rule
services:
- name: searxng-service
port: 8080
tls:
secretName: searxng-internal-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: searxng-internal-tls
spec:
secretName: searxng-internal-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "searxng.internal.durp.info"
dnsNames:
- "searxng.internal.durp.info"

View file

@ -1,23 +0,0 @@
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: searxng-secret
spec:
secretStoreRef:
name: vault
kind: ClusterSecretStore
target:
name: searxng-secret
data:
- secretKey: SEARXNG_SECRET
remoteRef:
key: kv/searxng
property: searxng-secret
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: vault

View file

@ -1,12 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: searxng-service
spec:
ports:
- name: http
port: 8080
targetPort: 8080
protocol: TCP
selector:
app: searxng

View file

@ -1,83 +0,0 @@
#
# IMPORTANT NOTE
#
# This chart inherits from our common library chart. You can check the default values/options here:
# https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common/values.yaml
#
image:
# -- image repository
repository: registry.durp.info/searxng/searxng
# -- image tag
tag: latest
# -- image pull policy
pullPolicy: Always
# Explanation about each environment variables here:
# https://docs.searxng.org/admin/installation-docker.html#command-line
env:
INSTANCE_NAME: "durp.info"
BASE_URL: "https://searx.durp.info"
AUTOCOMPLETE: "false"
# MORTY_URL: "http://morty:8080"
# MORTY_KEY: "mysecretkey"
# BIND_ADDRESS: "0.0.0.0:8080"
controller:
strategy: "RollingUpdate"
# -- Configures service settings for the chart.
# @default -- See values.yaml
service:
main:
ports:
http:
port: 8080
# -- Configure persistence settings for the chart under this key.
# @default -- See values.yaml
persistence:
config:
enabled: false
ingress:
# -- Enable and configure ingress settings for the chart under this key.
# @default -- See values.yaml
main:
enabled: false
searxng:
config:
use_default_settings: true
#server:
# secret_key: pleasechangeme
# Uncomment when using the builtin rate limiter
# See https://docs.searxng.org/src/searx.plugins.limiter.html#limiter-plugin
# server.limiter: true
# redis.url: redis://@searxng-redis:6379/0
probes:
readiness:
custom: true
spec:
httpGet:
path: /healthz
port: 8080
liveness:
custom: true
spec:
httpGet:
path: /healthz
port: 8080
startup:
custom: true
spec:
httpGet:
path: /healthz
port: 8080
# Enable when using searxng builtin rate limiter
# Values: https://github.com/pascaliske/helm-charts/tree/master/charts/redis
redis:
enabled: false

115
dmz/terraform/k3s.tf Normal file
View file

@ -0,0 +1,115 @@
resource "proxmox_vm_qemu" "k3smaster" {
count = local.k3smaster.count
ciuser = "administrator"
vmid = "${local.vlan}${local.k3smaster.ip[count.index]}"
name = local.k3smaster.name[count.index]
target_node = local.k3smaster.node[count.index]
clone = local.template
tags = local.k3smaster.tags
qemu_os = "l26"
full_clone = true
os_type = "cloud-init"
agent = 1
cores = local.k3smaster.cores
sockets = 1
cpu_type = "host"
memory = local.k3smaster.memory
scsihw = "virtio-scsi-pci"
#bootdisk = "scsi0"
boot = "order=virtio0"
onboot = true
sshkeys = local.sshkeys
vga {
type = "serial0"
}
serial {
id = 0
type = "socket"
}
disks {
ide {
ide2 {
cloudinit {
storage = local.storage
}
}
}
virtio {
virtio0 {
disk {
size = local.k3smaster.drive
format = local.format
storage = local.storage
}
}
}
}
network {
id = 0
model = "virtio"
bridge = "vmbr0"
tag = local.vlan
}
#Cloud Init Settings
ipconfig0 = "ip=192.168.${local.vlan}.${local.k3smaster.ip[count.index]}/24,gw=192.168.${local.vlan}.1"
searchdomain = "durp.loc"
nameserver = local.dnsserver
}
resource "proxmox_vm_qemu" "k3sserver" {
count = local.k3sserver.count
ciuser = "administrator"
vmid = "${local.vlan}${local.k3sserver.ip[count.index]}"
name = local.k3sserver.name[count.index]
target_node = local.k3sserver.node[count.index]
clone = local.template
tags = local.k3sserver.tags
qemu_os = "l26"
full_clone = true
os_type = "cloud-init"
agent = 1
cores = local.k3sserver.cores
sockets = 1
cpu_type = "host"
memory = local.k3sserver.memory
scsihw = "virtio-scsi-pci"
#bootdisk = "scsi0"
boot = "order=virtio0"
onboot = true
sshkeys = local.sshkeys
vga {
type = "serial0"
}
serial {
id = 0
type = "socket"
}
disks {
ide {
ide2 {
cloudinit {
storage = local.storage
}
}
}
virtio {
virtio0 {
disk {
size = local.k3sserver.drive
format = local.format
storage = local.storage
}
}
}
}
network {
id = 0
model = "virtio"
bridge = "vmbr0"
tag = local.vlan
}
#Cloud Init Settings
ipconfig0 = "ip=192.168.${local.vlan}.${local.k3sserver.ip[count.index]}/24,gw=192.168.${local.vlan}.1"
searchdomain = "durp.loc"
nameserver = local.dnsserver
}

48
dmz/terraform/main.tf Normal file
View file

@ -0,0 +1,48 @@
terraform {
backend "http" {}
required_providers {
proxmox = {
source = "Telmate/proxmox"
version = "3.0.1-rc9"
}
}
}
provider "proxmox" {
pm_parallel = 1
pm_tls_insecure = true
pm_api_url = var.pm_api_url
pm_user = var.pm_user
pm_password = var.pm_password
pm_debug = false
}
locals {
sshkeys = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDEphzWgwUZnvL6E5luKLt3WO0HK7Kh63arSMoNl5gmjzXyhG1DDW0OKfoIl0T+JZw/ZjQ7iii6tmSLFRk6nuYCldqe5GVcFxvTzX4/xGEioAyG0IiUGKy6s+9xzO8QXF0EtSNPH0nfHNKcCjgwWAzM+Lt6gW0Vqs+aU5ICuDiEchmvYPz+rBaVldJVTG7m3ogKJ2aIF7HU/pCPp5l0E9gMOw7s0ABijuc3KXLEWCYgL39jIST6pFH9ceRLmu8Xy5zXHAkkEEauY/e6ld0hlzLadiUD7zYJMdDcm0oRvenYcUlaUl9gS0569IpfsJsjCejuqOxCKzTHPJDOT0f9TbIqPXkGq3s9oEJGpQW+Z8g41BqRpjBCdBk+yv39bzKxlwlumDwqgx1WP8xxKavAWYNqNRG7sBhoWwtxYEOhKXoLNjBaeDRnO5OY5AQJvONWpuByyz0R/gTh4bOFVD+Y8WWlKbT4zfhnN70XvapRsbZiaGhJBPwByAMGg6XxSbC6xtbyligVGCEjCXbTLkeKq1w0DuItY+FBGO3J2k90OiciTVSeyiVz9J/Y03UB0gHdsMCoVNrj+9QWfrTLDhM7D5YrXUt5nj2LQTcbtf49zoQXWxUhozlg42E/FJU/Yla7y55qWizAEVyP2/Ks/PHrF679k59HNd2IJ/aicA9QnmWtLQ== ansible"
template = "Debian12-Template"
storage = "cache-domains"
emulatessd = true
format = "raw"
dnsserver = "192.168.98.1"
vlan = 98
k3smaster = {
tags = "k3s_dmz"
count = 3
name = ["master01-dmz", "master02-dmz", "master03-dmz"]
cores = 2
memory = "4096"
drive = 20
node = ["mothership", "overlord", "vanguard"]
ip = ["11", "12", "13"]
}
k3sserver = {
tags = "k3s_dmz"
count = 3
name = ["node01-dmz", "node02-dmz", "node03-dmz"]
cores = 4
memory = "8192"
drive = 240
node = ["mothership", "overlord", "vanguard"]
ip = ["21", "22", "23"]
}
}

View file

@ -0,0 +1,14 @@
variable "pm_api_url" {
description = "API URL to Proxmox provider"
type = string
}
variable "pm_password" {
description = "Passowrd to Proxmox provider"
type = string
}
variable "pm_user" {
description = "UIsername to Proxmox provider"
type = string
}

View file

@ -9,4 +9,4 @@ appVersion: "1.16.0"
dependencies: dependencies:
- name: argo-cd - name: argo-cd
repository: https://argoproj.github.io/argo-helm repository: https://argoproj.github.io/argo-helm
version: 8.6.4 version: 8.1.3

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/argocd path: infra/argocd
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/authentik path: infra/authentik
destination: destination:
@ -31,7 +31,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/authentik path: dmz/authentik
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/bitwarden path: infra/bitwarden
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/cert-manager path: infra/cert-manager
destination: destination:
@ -29,7 +29,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/cert-manager path: dmz/cert-manager
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/external-dns path: dmz/external-dns
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/external-secrets path: infra/external-secrets
destination: destination:
@ -29,7 +29,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/external-secrets path: dmz/external-secrets
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/gitlab-runner path: dmz/gitlab-runner
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/internalproxy path: dmz/internalproxy
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/istio-system path: infra/istio-system
destination: destination:
@ -36,7 +36,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/istio-system path: dmz/istio-system
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/kube-prometheus-stack path: infra/kube-prometheus-stack
destination: destination:

View file

@ -6,7 +6,7 @@
#spec: #spec:
# project: default # project: default
# source: # source:
# repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git # repoURL: https://gitlab.com/developerdurp/homelab.git
# targetRevision: main # targetRevision: main
# path: infra/litellm # path: infra/litellm
# destination: # destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/littlelink path: dmz/littlelink
directory: directory:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/longhorn path: infra/longhorn
destination: destination:
@ -33,7 +33,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/longhorn path: dmz/longhorn
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/metallb-system path: infra/metallb-system
destination: destination:
@ -29,7 +29,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/metallb-system path: dmz/metallb-system
destination: destination:
@ -52,7 +52,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dev/metallb-system path: dev/metallb-system
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/nebula-sync path: infra/nebula-sync
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/nfs path: infra/nfs
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/openclarity path: infra/openclarity
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/openspeedtest path: dmz/openspeedtest
directory: directory:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/portainer path: infra/portainer
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/redlib path: dmz/redlib
directory: directory:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/renovate path: infra/renovate
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/traefik path: infra/traefik
destination: destination:
@ -32,7 +32,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/traefik path: dmz/traefik
destination: destination:
@ -58,7 +58,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dev/traefik path: dev/traefik
destination: destination:

View file

@ -6,7 +6,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: infra/vault path: infra/vault
destination: destination:
@ -34,7 +34,7 @@ metadata:
spec: spec:
project: default project: default
source: source:
repoURL: https://gitlab.durp.info/durfy/homelab/gitops.git repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main targetRevision: main
path: dmz/vault path: dmz/vault
destination: destination:

View file

@ -34,7 +34,7 @@ authentik:
enabled: true enabled: true
image: image:
registry: registry.durp.info registry: registry.durp.info
repository: bitnamilegacy/postgresql repository: bitnami/postgresql
pullPolicy: Always pullPolicy: Always
postgresqlUsername: "authentik" postgresqlUsername: "authentik"
postgresqlDatabase: "authentik" postgresqlDatabase: "authentik"
@ -52,7 +52,7 @@ authentik:
enabled: false enabled: false
image: image:
registry: registry.durp.info registry: registry.durp.info
repository: bitnamilegacy/redis repository: bitnami/redis
pullPolicy: Always pullPolicy: Always
architecture: standalone architecture: standalone
auth: auth:

View file

@ -17,7 +17,7 @@ spec:
spec: spec:
containers: containers:
- name: bitwarden - name: bitwarden
image: registry.durp.info/vaultwarden/server:1.35.4 image: registry.durp.info/vaultwarden/server:1.34.3
imagePullPolicy: Always imagePullPolicy: Always
volumeMounts: volumeMounts:
- name: bitwarden-pvc - name: bitwarden-pvc

View file

@ -8,7 +8,7 @@ appVersion: 0.0.1
dependencies: dependencies:
- name: base - name: base
repository: https://istio-release.storage.googleapis.com/charts repository: https://istio-release.storage.googleapis.com/charts
version: 1.29.0 version: 1.26.2
- name: istiod - name: istiod
repository: https://istio-release.storage.googleapis.com/charts repository: https://istio-release.storage.googleapis.com/charts
version: 1.26.2 version: 1.26.2

View file

@ -11,8 +11,8 @@ spec:
- match: Host(`longhorn.infra.durp.info`) && PathPrefix(`/`) - match: Host(`longhorn.infra.durp.info`) && PathPrefix(`/`)
kind: Rule kind: Rule
middlewares: middlewares:
#- name: authentik-proxy-provider - name: authentik-proxy-provider
# namespace: traefik namespace: traefik
services: services:
- name: longhorn-frontend - name: longhorn-frontend
port: 80 port: 80

View file

@ -542,7 +542,7 @@ openclarity:
# -- Trivy Server container repository # -- Trivy Server container repository
repository: aquasec/trivy repository: aquasec/trivy
# -- Trivy Server container tag # -- Trivy Server container tag
tag: 0.69.3 tag: 0.64.1
# -- Trivy Server image digest. If set will override the tag. # -- Trivy Server image digest. If set will override the tag.
digest: "" digest: ""
# -- Trivy Server image pull policy # -- Trivy Server image pull policy

View file

@ -9,4 +9,4 @@ appVersion: "1.16.0"
dependencies: dependencies:
- name: portainer - name: portainer
repository: https://portainer.github.io/k8s/ repository: https://portainer.github.io/k8s/
version: 2.33.6 version: 2.33.5

View file

@ -2,7 +2,7 @@ portainer:
replicaCount: 1 replicaCount: 1
image: image:
repository: registry.durp.info/portainer/portainer-ce repository: registry.durp.info/portainer/portainer-ce
tag: 2.39.1 tag: 2.33.5
pullPolicy: Always pullPolicy: Always
imagePullSecrets: [] imagePullSecrets: []

View file

@ -10,4 +10,4 @@ dependencies:
- name: renovate - name: renovate
repository: https://docs.renovatebot.com/helm-charts repository: https://docs.renovatebot.com/helm-charts
version: 39.264.0 version: 39.264.0
alias: "renovate-personal"

View file

@ -39,24 +39,3 @@ spec:
remoteRef: remoteRef:
key: kv/renovate key: kv/renovate
property: RENOVATE_TOKEN property: RENOVATE_TOKEN
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: renovate-personal-config-secret
spec:
secretStoreRef:
name: vault
kind: ClusterSecretStore
target:
name: renovate-personal-config-secret
data:
- secretKey: RENOVATE_TOKEN
remoteRef:
key: kv/renoatePersonal
property: RENOVATE_TOKEN
- secretKey: RENOVATE_GITHUB_COM_TOKEN
remoteRef:
key: kv/renoatePersonal
property: RENOVATE_GITHUB_COM_TOKEN

View file

@ -1,4 +1,4 @@
renovate-personal: renovate:
global: global:
# -- Additional labels to be set on all renovate resources # -- Additional labels to be set on all renovate resources
commonLabels: {} commonLabels: {}
@ -99,12 +99,12 @@ renovate-personal:
config: | config: |
{ {
"platform": "gitlab", "platform": "gitlab",
"endpoint": "https://gitlab.durp.info/api/v4", "endpoint": "https://gitlab.com/api/v4",
"autodiscover": true, "autodiscover": "true",
"dryRun": null, "dryRun": false,
"printConfig": false, "printConfig": false,
"autodiscoverFilter": ["durfy/**"], "autodiscoverFilter": ["developerdurp/*", "durfy/*"],
"assignees": ["durp"] "assignees": ["developerdurp"],
} }
# See https://docs.renovatebot.com/self-hosted-configuration # See https://docs.renovatebot.com/self-hosted-configuration
# config: | # config: |
@ -166,7 +166,7 @@ renovate-personal:
# -- Environment variables that should be referenced from a k8s secret, cannot be used when existingSecret is set # -- Environment variables that should be referenced from a k8s secret, cannot be used when existingSecret is set
secrets: {} secrets: {}
# -- k8s secret to reference environment variables from. Overrides secrets if set # -- k8s secret to reference environment variables from. Overrides secrets if set
existingSecret: "renovate-personal-config-secret" existingSecret: "renovate-config-secret"
# -- Additional configmaps. A generated configMap name is: "renovate.fullname" + "extra" + name(below) e.g. renovate-netrc-config # -- Additional configmaps. A generated configMap name is: "renovate.fullname" + "extra" + name(below) e.g. renovate-netrc-config
extraConfigmaps: [] extraConfigmaps: []
@ -233,8 +233,8 @@ renovate-personal:
# cpu: 100m # cpu: 100m
# memory: 128Mi # memory: 128Mi
# requests: # requests:
# cpu: 100m # cpu: 100m
# memory: 128Mi # memory: 128Mi
# -- Environment variables to add from existing secrets/configmaps. Uses the keys as variable name # -- Environment variables to add from existing secrets/configmaps. Uses the keys as variable name
envFrom: [] envFrom: []
@ -247,7 +247,6 @@ renovate-personal:
# -- Environment variables to set on the renovate container # -- Environment variables to set on the renovate container
env: env:
RENOVATE_AUTODISCOVER: true RENOVATE_AUTODISCOVER: true
#LOG_LEVEL: debug
# env: # env:
# VARIABLE_NAME: "value" # VARIABLE_NAME: "value"

116
infra/terraform/k3s.tf Normal file
View file

@ -0,0 +1,116 @@
resource "proxmox_vm_qemu" "k3smaster" {
lifecycle {
prevent_destroy = true
}
count = local.k3smaster.count
ciuser = "administrator"
name = local.k3smaster.name[count.index]
target_node = local.k3smaster.node[count.index]
tags = local.k3smaster.tags
full_clone = false
qemu_os = "l26"
os_type = "cloud-init"
agent = 1
cores = local.k3smaster.cores
sockets = 1
cpu_type = "host"
memory = local.k3smaster.memory
scsihw = "virtio-scsi-pci"
boot = "order=virtio0"
onboot = true
sshkeys = local.sshkeys
vga {
type = "serial0"
}
serial {
id = 0
type = "socket"
}
disks {
ide {
ide2 {
cloudinit {
storage = local.k3smaster.storage
}
}
}
virtio {
virtio0 {
disk {
size = local.k3smaster.drive
format = local.format
storage = local.k3smaster.storage
}
}
}
}
network {
id = 0
model = "virtio"
bridge = "vmbr0"
tag = local.vlan
}
#Cloud Init Settings
ipconfig0 = "ip=192.168.${local.vlan}.${local.k3smaster.ip[count.index]}/24,gw=192.168.${local.vlan}.1"
searchdomain = "durp.loc"
nameserver = local.dnsserver
}
resource "proxmox_vm_qemu" "k3sserver" {
lifecycle {
prevent_destroy = true
}
count = local.k3sserver.count
ciuser = "administrator"
name = local.k3sserver.name[count.index]
target_node = local.k3sserver.node[count.index]
tags = local.k3sserver.tags
qemu_os = "l26"
full_clone = false
os_type = "cloud-init"
agent = 1
cores = local.k3sserver.cores
sockets = 1
cpu_type = "host"
memory = local.k3sserver.memory
scsihw = "virtio-scsi-pci"
#bootdisk = "scsi0"
boot = "order=virtio0"
onboot = true
sshkeys = local.sshkeys
vga {
type = "serial0"
}
serial {
id = 0
type = "socket"
}
disks {
ide {
ide2 {
cloudinit {
storage = local.k3sserver.storage
}
}
}
virtio {
virtio0 {
disk {
size = local.k3sserver.drive
format = local.format
storage = local.k3sserver.storage
}
}
}
}
network {
id = 0
model = "virtio"
bridge = "vmbr0"
tag = local.vlan
}
#Cloud Init Settings
ipconfig0 = "ip=192.168.${local.vlan}.${local.k3sserver.ip[count.index]}/24,gw=192.168.${local.vlan}.1"
searchdomain = "durp.loc"
nameserver = local.dnsserver
}

81
infra/terraform/main.tf Normal file
View file

@ -0,0 +1,81 @@
terraform {
backend "http" {}
required_providers {
proxmox = {
source = "Telmate/proxmox"
version = "3.0.1-rc9"
}
}
}
provider "proxmox" {
pm_parallel = 1
pm_tls_insecure = true
pm_api_url = var.pm_api_url
pm_user = var.pm_user
pm_password = var.pm_password
pm_debug = false
}
locals {
sshkeys = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDEphzWgwUZnvL6E5luKLt3WO0HK7Kh63arSMoNl5gmjzXyhG1DDW0OKfoIl0T+JZw/ZjQ7iii6tmSLFRk6nuYCldqe5GVcFxvTzX4/xGEioAyG0IiUGKy6s+9xzO8QXF0EtSNPH0nfHNKcCjgwWAzM+Lt6gW0Vqs+aU5ICuDiEchmvYPz+rBaVldJVTG7m3ogKJ2aIF7HU/pCPp5l0E9gMOw7s0ABijuc3KXLEWCYgL39jIST6pFH9ceRLmu8Xy5zXHAkkEEauY/e6ld0hlzLadiUD7zYJMdDcm0oRvenYcUlaUl9gS0569IpfsJsjCejuqOxCKzTHPJDOT0f9TbIqPXkGq3s9oEJGpQW+Z8g41BqRpjBCdBk+yv39bzKxlwlumDwqgx1WP8xxKavAWYNqNRG7sBhoWwtxYEOhKXoLNjBaeDRnO5OY5AQJvONWpuByyz0R/gTh4bOFVD+Y8WWlKbT4zfhnN70XvapRsbZiaGhJBPwByAMGg6XxSbC6xtbyligVGCEjCXbTLkeKq1w0DuItY+FBGO3J2k90OiciTVSeyiVz9J/Y03UB0gHdsMCoVNrj+9QWfrTLDhM7D5YrXUt5nj2LQTcbtf49zoQXWxUhozlg42E/FJU/Yla7y55qWizAEVyP2/Ks/PHrF679k59HNd2IJ/aicA9QnmWtLQ== ansible"
template = "Debian12-Template"
format = "raw"
dnsserver = "192.168.12.1"
vlan = 12
k3smaster = {
tags = "k3s_infra"
count = 3
name = ["master01-infra", "master02-infra", "master03-infra"]
cores = 2
memory = "4096"
drive = 20
storage = "cache-domains"
node = ["mothership", "overlord", "vanguard"]
ip = ["11", "12", "13"]
}
k3sserver = {
tags = "k3s_infra"
count = 3
name = ["node01-infra", "node02-infra", "node03-infra"]
cores = 4
memory = "16384"
drive = 240
storage = "cache-domains"
node = ["mothership", "overlord", "vanguard"]
ip = ["21", "22", "23"]
}
#haproxy = {
# tags = "haproxy"
# count = 3
# name = ["haproxy-01", "haproxy-02", "haproxy-03"]
# cores = 2
# memory = "1024"
# drive = 20
# storage = "cache-domains"
# node = ["mothership", "overlord", "vanguard"]
# ip = ["31", "32", "33"]
#}
#postgres = {
# tags = "postgres"
# count = 3
# name = ["postgres-01", "postgres-02", "postgres-03"]
# cores = 4
# memory = "4096"
# drive = 40
# storage = "cache-domains"
# node = ["mothership", "overlord", "vanguard"]
# ip = ["34", "35", "36"]
#}
pihole = {
tags = "pihole"
count = 3
name = ["pihole-01", "pihole-02", "pihole-03"]
cores = 2
memory = "2048"
drive = 20
storage = "cache-domains"
node = ["mothership", "overlord", "vanguard"]
ip = ["41", "42", "43"]
}
}

57
infra/terraform/pihole.tf Normal file
View file

@ -0,0 +1,57 @@
resource "proxmox_vm_qemu" "pihole" {
count = local.pihole.count
ciuser = "administrator"
vmid = "${local.vlan}${local.pihole.ip[count.index]}"
name = local.pihole.name[count.index]
target_node = local.pihole.node[count.index]
clone = local.template
tags = local.pihole.tags
qemu_os = "l26"
full_clone = true
os_type = "cloud-init"
agent = 1
cores = local.pihole.cores
sockets = 1
cpu_type = "host"
memory = local.pihole.memory
scsihw = "virtio-scsi-pci"
#bootdisk = "scsi0"
boot = "order=virtio0"
onboot = true
sshkeys = local.sshkeys
vga {
type = "serial0"
}
serial {
id = 0
type = "socket"
}
disks {
ide {
ide2 {
cloudinit {
storage = local.pihole.storage
}
}
}
virtio {
virtio0 {
disk {
size = local.pihole.drive
format = local.format
storage = local.pihole.storage
}
}
}
}
network {
id = 0
model = "virtio"
bridge = "vmbr0"
tag = local.vlan
}
#Cloud Init Settings
ipconfig0 = "ip=192.168.${local.vlan}.${local.pihole.ip[count.index]}/24,gw=192.168.${local.vlan}.1"
searchdomain = "durp.loc"
nameserver = local.dnsserver
}

116
infra/terraform/postgres.tf Normal file
View file

@ -0,0 +1,116 @@
#resource "proxmox_vm_qemu" "haproxy" {
# count = local.haproxy.count
# ciuser = "administrator"
# vmid = "${local.vlan}${local.haproxy.ip[count.index]}"
# name = local.haproxy.name[count.index]
# target_node = local.haproxy.node[count.index]
# clone = local.template
# tags = local.haproxy.tags
# qemu_os = "l26"
# full_clone = true
# os_type = "cloud-init"
# agent = 1
# cores = local.haproxy.cores
# sockets = 1
# cpu_type = "host"
# memory = local.haproxy.memory
# scsihw = "virtio-scsi-pci"
# #bootdisk = "scsi0"
# boot = "order=virtio0"
# onboot = true
# sshkeys = local.sshkeys
# vga {
# type = "serial0"
# }
# serial {
# id = 0
# type = "socket"
# }
# disks {
# ide {
# ide2 {
# cloudinit {
# storage = local.haproxy.storage
# }
# }
# }
# virtio {
# virtio0 {
# disk {
# size = local.haproxy.drive
# format = local.format
# storage = local.haproxy.storage
# }
# }
# }
# }
# network {
# id = 0
# model = "virtio"
# bridge = "vmbr0"
# tag = local.vlan
# }
# #Cloud Init Settings
# ipconfig0 = "ip=192.168.${local.vlan}.${local.haproxy.ip[count.index]}/24,gw=192.168.${local.vlan}.1"
# searchdomain = "durp.loc"
# nameserver = local.dnsserver
#}
#
#resource "proxmox_vm_qemu" "postgres" {
# count = local.postgres.count
# ciuser = "administrator"
# vmid = "${local.vlan}${local.postgres.ip[count.index]}"
# name = local.postgres.name[count.index]
# target_node = local.postgres.node[count.index]
# clone = local.template
# tags = local.postgres.tags
# qemu_os = "l26"
# full_clone = true
# os_type = "cloud-init"
# agent = 1
# cores = local.postgres.cores
# sockets = 1
# cpu_type = "host"
# memory = local.postgres.memory
# scsihw = "virtio-scsi-pci"
# #bootdisk = "scsi0"
# boot = "order=virtio0"
# onboot = true
# sshkeys = local.sshkeys
# vga {
# type = "serial0"
# }
# serial {
# id = 0
# type = "socket"
# }
# disks {
# ide {
# ide2 {
# cloudinit {
# storage = local.postgres.storage
# }
# }
# }
# virtio {
# virtio0 {
# disk {
# size = local.postgres.drive
# format = local.format
# storage = local.postgres.storage
# }
# }
# }
# }
# network {
# id = 0
# model = "virtio"
# bridge = "vmbr0"
# tag = local.vlan
# }
# #Cloud Init Settings
# ipconfig0 = "ip=192.168.${local.vlan}.${local.postgres.ip[count.index]}/24,gw=192.168.${local.vlan}.1"
# searchdomain = "durp.loc"
# nameserver = local.dnsserver
#}
#

View file

@ -0,0 +1,14 @@
variable "pm_api_url" {
description = "API URL to Proxmox provider"
type = string
}
variable "pm_password" {
description = "Passowrd to Proxmox provider"
type = string
}
variable "pm_user" {
description = "UIsername to Proxmox provider"
type = string
}

14
master/argocd/Chart.yaml Normal file
View file

@ -0,0 +1,14 @@
apiVersion: v2
name: argocd
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "1.16.0"
dependencies:
- name: argo-cd
repository: https://argoproj.github.io/argo-helm
version: 8.1.3

View file

@ -0,0 +1,23 @@
#apiVersion: argoproj.io/v1alpha1
#kind: Application
#metadata:
# name: internalproxy
# namespace: argocd
#spec:
# project: default
# source:
# repoURL: https://gitlab.com/developerdurp/homelab.git
# targetRevision: main
# path: master/internalproxy
# directory:
# recurse: true
# destination:
# server: https://kubernetes.default.svc
# namespace: internalproxy
# syncPolicy:
# automated:
# prune: true
# selfHeal: true
# syncOptions:
# - CreateNamespace=true
#

View file

@ -0,0 +1,59 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: argocd
namespace: argocd
spec:
project: default
source:
repoURL: https://gitlab.com/developerdurp/homelab.git
targetRevision: main
path: master/argocd
destination:
namespace: argocd
name: in-cluster
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: argocd-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-production
spec:
entryPoints:
- websecure
routes:
- match: Host(`argocd.internal.durp.info`)
middlewares:
- name: whitelist
namespace: traefik
kind: Rule
services:
- name: argocd-server
port: 443
scheme: https
tls:
secretName: argocd-tls
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: argocd-tls
spec:
secretName: argocd-tls
issuerRef:
name: letsencrypt-production
kind: ClusterIssuer
commonName: "argocd.internal.durp.info"
dnsNames:
- "argocd.internal.durp.info"

Some files were not shown because too many files have changed in this diff Show more