parent
88fd592b4c
commit
13ea2e8719
14 changed files with 111 additions and 67 deletions
|
@ -15,7 +15,7 @@ services:
|
||||||
hex.grote.lan,routeros-config-backup,/key_hex
|
hex.grote.lan,routeros-config-backup,/key_hex
|
||||||
crs305.grote.lan,routeros-config-backup,/key_crs305
|
crs305.grote.lan,routeros-config-backup,/key_crs305
|
||||||
GIT_REPO_BRANCH: "master"
|
GIT_REPO_BRANCH: "master"
|
||||||
GIT_REPO_URL: "ssh://gitea@git.mgrote.net:2222/mg/routeros-configs.git"
|
GIT_REPO_URL: "ssh://gitea@gitea.grote.lan:2222/mg/routeros-configs.git"
|
||||||
GIT_REPO_DEPLOY_KEY: "/deploy_token"
|
GIT_REPO_DEPLOY_KEY: "/deploy_token"
|
||||||
GIT_USERNAME: oxidized-selfmade
|
GIT_USERNAME: oxidized-selfmade
|
||||||
GIT_USER_MAIL: michael.grote@posteo.de
|
GIT_USER_MAIL: michael.grote@posteo.de
|
||||||
|
|
|
@ -1,20 +1,4 @@
|
||||||
# TCP da SSH keine Hostnamen kennt
|
# TCP da SSH keine Hostnamen kennt
|
||||||
# alle Anfragen an diesen Port werden an Gitea weitergeleitet
|
|
||||||
tcp:
|
|
||||||
###### router #####
|
|
||||||
routers:
|
|
||||||
router-ssh:
|
|
||||||
entryPoints:
|
|
||||||
- entry_ssh
|
|
||||||
rule: HostSNI(`*`)
|
|
||||||
service: service_gitea_ssh
|
|
||||||
###### services #####
|
|
||||||
services:
|
|
||||||
service_gitea_ssh:
|
|
||||||
loadBalancer:
|
|
||||||
servers:
|
|
||||||
- address: gitea.grote.lan:2222
|
|
||||||
|
|
||||||
http:
|
http:
|
||||||
###### router #####
|
###### router #####
|
||||||
routers:
|
routers:
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
from_ip: 192.168.2.144/24
|
from_ip: 192.168.2.144/24
|
||||||
### l3d.gitea
|
### l3d.gitea
|
||||||
# config liegt in /etc/gitea/gitea.ini
|
# config liegt in /etc/gitea/gitea.ini
|
||||||
gitea_version: "1.20.0"
|
gitea_version: "1.20.3"
|
||||||
gitea_app_name: "Gitea"
|
gitea_app_name: "Gitea"
|
||||||
gitea_user: "gitea"
|
gitea_user: "gitea"
|
||||||
gitea_home: "/var/lib/gitea"
|
gitea_home: "/var/lib/gitea"
|
||||||
|
@ -76,7 +76,7 @@
|
||||||
gitea_db_path: "{{ gitea_home }}/data/gitea.db" # for sqlite3
|
gitea_db_path: "{{ gitea_home }}/data/gitea.db" # for sqlite3
|
||||||
|
|
||||||
gitea_ssh_listen: 0.0.0.0
|
gitea_ssh_listen: 0.0.0.0
|
||||||
gitea_ssh_domain: git.mgrote.net
|
gitea_ssh_domain: gitea.grote.lan
|
||||||
gitea_ssh_port: 2222
|
gitea_ssh_port: 2222
|
||||||
gitea_start_ssh: true
|
gitea_start_ssh: true
|
||||||
|
|
||||||
|
|
81
group_vars/k3s.yml
Normal file
81
group_vars/k3s.yml
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
---
|
||||||
|
### Allgemein
|
||||||
|
kubeconfig: /etc/rancher/k3s/k3s.yaml
|
||||||
|
|
||||||
|
### mgrote.restic
|
||||||
|
restic_folders_to_backup: "/ /var" # --one-file-system ist gesetzt, also werden weitere Dateisysteme nicht eingeschlossen, es sei denn sie werden hier explizit angegeben; https://restic.readthedocs.io/en/latest/040_backup.html#excluding-files
|
||||||
|
|
||||||
|
### pandemonium1986.ansible-role-k9s
|
||||||
|
k9s_version: "v0.27.3"
|
||||||
|
|
||||||
|
### mrlesmithjr.ansible-manage-lvm
|
||||||
|
#lvm_groups:
|
||||||
|
# - vgname: vg_gitea_data
|
||||||
|
# disks:
|
||||||
|
# - /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi1
|
||||||
|
# create: true
|
||||||
|
# lvnames:
|
||||||
|
# - lvname: lv_gitea_data
|
||||||
|
# size: +100%FREE
|
||||||
|
# create: true
|
||||||
|
# filesystem: xfs
|
||||||
|
# mount: true
|
||||||
|
# mntp: /var/lib/gitea
|
||||||
|
#manage_lvm: true
|
||||||
|
#pvresize_to_max: true
|
||||||
|
|
||||||
|
### oefenweb.ufw
|
||||||
|
ufw_rules:
|
||||||
|
- rule: allow
|
||||||
|
comment: 'k3s - alles offen'
|
||||||
|
from_ip: 0.0.0.0/0
|
||||||
|
|
||||||
|
### pyratlabs.k3s
|
||||||
|
k3s_state: installed
|
||||||
|
k3s_release_version: v1.25.11+k3s1
|
||||||
|
k3s_airgap: false
|
||||||
|
k3s_config_file: /etc/rancher/k3s/config.yaml
|
||||||
|
k3s_build_cluster: true
|
||||||
|
k3s_install_dir: /usr/local/bin
|
||||||
|
k3s_etcd_datastore: true
|
||||||
|
k3s_become: true
|
||||||
|
k3s_use_experimental: true
|
||||||
|
k3s_debug: false
|
||||||
|
k3s_server:
|
||||||
|
# siehe https://docs.k3s.io/reference/server-config
|
||||||
|
# cli parameter OHNE -- am anfang
|
||||||
|
write-kubeconfig-mode: '644'
|
||||||
|
cluster-cidr: "10.42.0.0/16"
|
||||||
|
service-cidr: "10.43.0.0/16"
|
||||||
|
disable:
|
||||||
|
- traefik
|
||||||
|
- local-storage # disables local-path-provisioner
|
||||||
|
- disable-helm-controller # https://fluxcd.io/flux/cheatsheets/troubleshooting/
|
||||||
|
|
||||||
|
### mgrote.fluxcd
|
||||||
|
flux_repo_host: gitea.grote.lan
|
||||||
|
flux_repo_host_port: 2222
|
||||||
|
flux_repo_branch: master
|
||||||
|
flux_repo_url_complete: "ssh://gitea@{{ flux_repo_host }}:{{ flux_repo_host_port }}/mg/manifests.git"
|
||||||
|
flux_install_host: k3s4.grote.lan
|
||||||
|
flux_homedir: /home/flux
|
||||||
|
flux_path_ssh_dir: /home/flux/.ssh
|
||||||
|
flux_user_group: flux
|
||||||
|
flux_user: flux
|
||||||
|
flux_download_url: https://github.com/fluxcd/flux2/releases/download/v2.0.1/flux_2.0.1_linux_amd64.tar.gz # updaten
|
||||||
|
flux_path_bin: /usr/local/sbin
|
||||||
|
flux_path_ssh_id_file: id_rsa
|
||||||
|
flux_ssh_key_format: ed25519
|
||||||
|
flux_sync_interval: 1m
|
||||||
|
|
||||||
|
### mgrote.apt_manage_packages
|
||||||
|
apt_packages_extra:
|
||||||
|
- nfs-common # für nfs-subdir-external-provisioner
|
||||||
|
|
||||||
|
### mgrote.sealed-secrets
|
||||||
|
sealed_secrets_homedir: /home/sealed_secrets
|
||||||
|
sealed_secrets_user_group: sealed_secrets
|
||||||
|
sealed_secrets_user: sealed_secrets
|
||||||
|
kubeseal_download_url: "https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.19.1/kubeseal-0.19.1-linux-amd64.tar.gz" #updaten
|
||||||
|
kubeseal_path_bin: /usr/local/sbin
|
||||||
|
sealed_secrets_keepass_entry_name: "{{ lookup('keepass', 'k3s-sealed-secrets-private-key', 'notes') }}"
|
3
host_vars/k3s4.grote.lan.yml
Normal file
3
host_vars/k3s4.grote.lan.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
### pyratlabs.k3s
|
||||||
|
k3s_control_node: true
|
|
@ -169,7 +169,7 @@
|
||||||
### mgrote.cv4pve-autosnap
|
### mgrote.cv4pve-autosnap
|
||||||
cv4pve_api_user: root@pam!cv4pve-autosnap
|
cv4pve_api_user: root@pam!cv4pve-autosnap
|
||||||
cv4pve_api_token: "{{ lookup('keepass', 'cv4pve_api_token', 'password') }}"
|
cv4pve_api_token: "{{ lookup('keepass', 'cv4pve_api_token', 'password') }}"
|
||||||
cv4pve_vmid: all,-106,-115
|
cv4pve_vmid: all,-106,-112,-115
|
||||||
cv4pve_keep_snapshots: 5
|
cv4pve_keep_snapshots: 5
|
||||||
cv4pve_dl_link: "https://github.com/Corsinvest/cv4pve-autosnap/releases/download/v1.14.7/cv4pve-autosnap-linux-x64.zip"
|
cv4pve_dl_link: "https://github.com/Corsinvest/cv4pve-autosnap/releases/download/v1.14.7/cv4pve-autosnap-linux-x64.zip"
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,9 @@ all:
|
||||||
docker:
|
docker:
|
||||||
hosts:
|
hosts:
|
||||||
docker10.grote.lan:
|
docker10.grote.lan:
|
||||||
|
k3s:
|
||||||
|
hosts:
|
||||||
|
k3s4.grote.lan:
|
||||||
vmtest:
|
vmtest:
|
||||||
hosts:
|
hosts:
|
||||||
vm-test-2204.grote.lan:
|
vm-test-2204.grote.lan:
|
||||||
|
@ -45,6 +48,7 @@ all:
|
||||||
gitea.grote.lan:
|
gitea.grote.lan:
|
||||||
docker10.grote.lan:
|
docker10.grote.lan:
|
||||||
pbs.grote.lan:
|
pbs.grote.lan:
|
||||||
|
k3s4.grote.lan:
|
||||||
test:
|
test:
|
||||||
hosts:
|
hosts:
|
||||||
vm-test-2204.grote.lan:
|
vm-test-2204.grote.lan:
|
||||||
|
|
BIN
keepass_db.kdbx
BIN
keepass_db.kdbx
Binary file not shown.
10
playbooks/3_service/k3s.yml
Normal file
10
playbooks/3_service/k3s.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
- hosts: k3s
|
||||||
|
roles:
|
||||||
|
- { role: PyratLabs.k3s, tags: "k3s" }
|
||||||
|
- { role: mgrote.k8s_autocompletion, tags: "autocomp" }
|
||||||
|
- { role: pandemonium1986.ansible-role-k9s, tags: "k9s", become: true }
|
||||||
|
- { role: mgrote.fluxcd, tags: "flux", become: true }
|
||||||
|
- { role: mgrote.k8s_misc, tags: "misc", become: true }
|
||||||
|
- { role: mgrote.sealed-secrets, tags: "sealed-secrets", become: true }
|
||||||
|
- { role: geerlingguy.helm, tags: "helm", become: true }
|
4
playbooks/3_service/nfs.yml
Normal file
4
playbooks/3_service/nfs.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
- hosts: nfs
|
||||||
|
roles:
|
||||||
|
- { role: geerlingguy.nfs_server, tags: "nfs", become: true }
|
|
@ -1,8 +1,8 @@
|
||||||
---
|
---
|
||||||
flux_repo_host: git.mgrote.net
|
flux_repo_host: gitea.grote.lan
|
||||||
flux_repo_host_port: 2222
|
flux_repo_host_port: 2222
|
||||||
flux_repo_branch: master
|
flux_repo_branch: master
|
||||||
flux_repo_url_complete: ssh://gitea@git.mgrote.net:2222/mg/k3s-fluxcd.git
|
flux_repo_url_complete: "ssh://gitea@{{ flux_repo_host }}:{{ flux_repo_host_port }}/mg/manifests.git"
|
||||||
flux_install_host: k3s1.grote.lan
|
flux_install_host: k3s1.grote.lan
|
||||||
flux_homedir: /home/flux
|
flux_homedir: /home/flux
|
||||||
flux_path_ssh_dir: /home/flux/.ssh
|
flux_path_ssh_dir: /home/flux/.ssh
|
||||||
|
|
|
@ -2,42 +2,6 @@
|
||||||
|
|
||||||
Diese Rolle installiert das kubeseal-Binary und hinterlegt den Private-Key im Cluster.
|
Diese Rolle installiert das kubeseal-Binary und hinterlegt den Private-Key im Cluster.
|
||||||
|
|
||||||
Der Key ist im Keepass im Eintrag unter "Notes" abgelegt. Sollten die Secrets neu verschlüsselt werden ist hier wieder der aktuelle Private-Key abzulegen.
|
|
||||||
|
|
||||||
Siehe: https://github.com/bitnami-labs/sealed-secrets#how-can-i-do-a-backup-of-my-sealedsecrets
|
|
||||||
|
|
||||||
## Backup
|
|
||||||
|
|
||||||
`kubectl get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o yaml >main.key`
|
|
||||||
|
|
||||||
## Restore
|
|
||||||
|
|
||||||
```
|
|
||||||
kubectl apply -f main.key
|
|
||||||
kubectl delete pod -n kube-system -l name=sealed-secrets-controller
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Erstellen eines verschlüsselten Secrets
|
|
||||||
|
|
||||||
- Wichtig ist "stringData", wird nur "data" verwendet ist der Inhalt base64 zu enkodieren.
|
|
||||||
|
|
||||||
1. lege Secret mit Klartext VALUE als Datei() an
|
|
||||||
```
|
|
||||||
kind: Secret
|
|
||||||
apiVersion: v1
|
|
||||||
metadata:
|
|
||||||
name: NAME_DES_SECRETS
|
|
||||||
namespace: drone
|
|
||||||
stringData:
|
|
||||||
ICH_BIN_DER VARIABLEN_NAME: ICH_BIN_DAS_PASSWORT
|
|
||||||
```
|
|
||||||
2. diese Datei mit kubeseal verschlüsseln
|
|
||||||
```
|
|
||||||
cat <datei> | kubeseal --controller-namespace kube-system --format yaml > sealed-secret.yaml
|
|
||||||
```
|
|
||||||
3. den Inhalt dann als Secret im Repo ablegen ablegen
|
|
||||||
|
|
||||||
## Verwenden des Secrets
|
## Verwenden des Secrets
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -47,9 +11,3 @@ kubectl delete pod -n kube-system -l name=sealed-secrets-controller
|
||||||
name: NAME_DES_SECRETS
|
name: NAME_DES_SECRETS
|
||||||
key: ICH_BIN_DER VARIABLEN_NAME
|
key: ICH_BIN_DER VARIABLEN_NAME
|
||||||
```
|
```
|
||||||
|
|
||||||
## Auslesen eines Klartext-Secrets aus dem Cluster
|
|
||||||
|
|
||||||
```
|
|
||||||
kubectl get secret <secretname> -n <namespace> -o jsonpath="{.data.<key>}" | base64 --decode ; echo""
|
|
||||||
```
|
|
||||||
|
|
|
@ -5,4 +5,4 @@
|
||||||
kubeseal_download_url: "https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.19.1/kubeseal-0.19.1-linux-amd64.tar.gz"
|
kubeseal_download_url: "https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.19.1/kubeseal-0.19.1-linux-amd64.tar.gz"
|
||||||
kubeseal_path_bin: /usr/local/sbin
|
kubeseal_path_bin: /usr/local/sbin
|
||||||
kubeconfig: /etc/rancher/k3s/k3s.yaml
|
kubeconfig: /etc/rancher/k3s/k3s.yaml
|
||||||
sealed_secrets_keepass_entry_name: "{{ lookup('keepass', 'k3s-sealed-secrets-private-key', 'notes') }}"
|
sealed_secrets_keepass_entry_name: "{{ lookup('keepass', 'k3s-sealed-secrets-private-key', 'notes') }}" # mit kubectl get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o yaml >main.key holen
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
- name: check if private key exists
|
- name: check if private key exists
|
||||||
ansible.builtin.command: kubectl get secrets sealed-secrets-key9mpfq -n kube-system
|
ansible.builtin.command: kubectl get secrets sealed-secrets-keytsq4k -n kube-system
|
||||||
register: key
|
register: key
|
||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
changed_when: false
|
changed_when: false
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
group: root
|
group: root
|
||||||
mode: '0400'
|
mode: '0400'
|
||||||
when: key.rc not in [ 0 ]
|
when: key.rc not in [ 0 ]
|
||||||
no_log: True
|
#no_log: True
|
||||||
|
|
||||||
- name: apply private key
|
- name: apply private key
|
||||||
ansible.builtin.command: kubectl apply -f /root/private.key
|
ansible.builtin.command: kubectl apply -f /root/private.key
|
||||||
|
|
Loading…
Reference in a new issue