Compare commits

...

5 commits

Author SHA1 Message Date
2e3bcfac2d Update haproxy-ingress-rbac.yaml
Some checks failed
Build Go Binary / build (push) Has been cancelled
2025-06-29 17:30:27 +02:00
fd31ce7eed Add generate_kubeconfig.sh
Some checks failed
Build Go Binary / build (push) Has been cancelled
2025-06-29 15:21:42 +02:00
f22d7423e8 Add haproxy-ingress-rbac.yaml
Some checks failed
Build Go Binary / build (push) Has been cancelled
2025-06-29 15:17:26 +02:00
3bcf42e94a Add haproxy-ingress-configmap.yaml
Some checks failed
Build Go Binary / build (push) Has been cancelled
2025-06-29 15:17:10 +02:00
83a3d12dbd Add go_cron_bash.sh
All checks were successful
Build Go Binary / build (push) Successful in 31s
2025-06-29 10:12:03 +02:00
4 changed files with 108 additions and 0 deletions

30
generate_kubeconfig.sh Normal file
View file

@ -0,0 +1,30 @@
#!/bin/bash
# Erstellt ein Token
TOKEN=$(kubectl -n kube-system create token haproxy-sa)
# Get Cluster Info
CLUSTER_NAME=$(kubectl config view -o jsonpath='{.clusters[0].name}')
CLUSTER_SERVER=$(kubectl config view -o jsonpath="{.clusters[0].cluster.server}")
CA_DATA=$(kubectl config view --raw -o jsonpath="{.clusters[0].cluster.certificate-authority-data}")
# Erstelle kubeconfig
cat <<EOF > haproxy-kubeconfig.yaml
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority-data: ${CA_DATA}
server: ${CLUSTER_SERVER}
name: ${CLUSTER_NAME}
contexts:
- context:
cluster: ${CLUSTER_NAME}
user: haproxy-sa
name: haproxy-context
current-context: haproxy-context
users:
- name: haproxy-sa
user:
token: ${TOKEN}
EOF

42
go_cron_bash.sh Normal file
View file

@ -0,0 +1,42 @@
#!/bin/bash
set -euo pipefail
BIN_PATH="/usr/local/bin/haproxy_generator"
CONFIG_PATH="/etc/haproxy/haproxy.cfg"
NEW_CONFIG="${CONFIG_PATH}.new"
TEMPLATE_PATH="/etc/haproxy/haproxy.tmpl"
# Setze notwendige Umgebungsvariablen
export HAPROXY_TEMPLATE="$TEMPLATE_PATH"
export KUBERNETES_HOST="https://10.0.20.7:6443"
export KUBERNETES_TOKEN="eyJhbGciOi..." # <<< hier echten Token einfügen
export KUBERNETES_VERIFYSSL="false"
# Prüfe, ob Template vorhanden ist
if [ ! -f "$TEMPLATE_PATH" ]; then
echo "[ERROR] Template-Datei nicht gefunden: $TEMPLATE_PATH" >&2
exit 1
fi
# Neue Konfiguration generieren
if ! "$BIN_PATH" > "$NEW_CONFIG"; then
echo "[ERROR] Fehler beim Ausführen von haproxy_generator" >&2
exit 1
fi
# Syntaxprüfung der neuen Konfiguration
if ! /sbin/haproxy -f "$NEW_CONFIG" -c; then
echo "[ERROR] Neue Konfiguration ist syntaktisch ungültig (haproxy -c)" >&2
exit 1
fi
# Unterschiede prüfen und ggf. übernehmen
if ! diff -q "$CONFIG_PATH" "$NEW_CONFIG" > /dev/null; then
echo "[INFO] Änderungen erkannt - Konfiguration wird übernommen"
mv "$NEW_CONFIG" "$CONFIG_PATH"
/usr/sbin/service haproxy reload
else
echo "[INFO] Keine Änderungen - kein Reload notwendig"
rm -f "$NEW_CONFIG"
fi

View file

@ -0,0 +1,9 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: haproxy-config
namespace: kube-system
data:
ssl-redirect: "true"
timeout-http-request: "5s"
use-forwarded-headers: "true"

27
haproxy-ingress-rbac.yaml Normal file
View file

@ -0,0 +1,27 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: gateway
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: gateway
rules:
- apiGroups: [""]
resources: ["endpoints", "services", "namespaces", "nodes"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: gateway
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: gateway
subjects:
- kind: ServiceAccount
name: gateway
namespace: kube-system