#!/bin/bash TARGET_USER="$1" if [ -z "$TARGET_USER" ]; then echo "❌ Bitte gib den Namen eines Linux-Users als Argument an." echo " Beispiel: sudo ./setup-k8s-user-kubeconfig.sh dashboarduser" exit 1 fi USERNAME="$TARGET_USER" NAMESPACE="kube-system" SECRET_NAME="${USERNAME}-token" CONFIG_PATH="/home/${TARGET_USER}/.kube/config" BASHRC_PATH="/home/${TARGET_USER}/.bashrc" function check_user_exists() { id "$1" &>/dev/null || { echo "❌ Linux-User '$1' existiert nicht!" exit 1 } } function create_k8s_resources() { echo "🔧 Erstelle ServiceAccount und ClusterRoleBinding für '$USERNAME'..." kubectl create serviceaccount "${USERNAME}" -n "${NAMESPACE}" --dry-run=client -o yaml | kubectl apply -f - kubectl create clusterrolebinding "${USERNAME}-binding" \ --clusterrole=cluster-admin \ --serviceaccount="${NAMESPACE}:${USERNAME}" \ --dry-run=client -o yaml | kubectl apply -f - } function create_static_token_secret() { echo "🔐 Erstelle statisches Token (Secret) für '$USERNAME'..." # Prüfen ob Secret schon existiert if ! kubectl get secret "${SECRET_NAME}" -n "${NAMESPACE}" &>/dev/null; then cat </dev/null) [ -n "$TOKEN" ] && break sleep 1 done if [ -z "$TOKEN" ]; then echo "❌ Token konnte nicht aus dem Secret gelesen werden." exit 1 fi } function get_cluster_info() { echo "🌐 Lese Cluster-Info..." SERVER=$(kubectl config view --raw -o jsonpath='{.clusters[0].cluster.server}') CA=$(kubectl config view --raw -o jsonpath='{.clusters[0].cluster.certificate-authority-data}') } function write_kubeconfig() { echo "📝 Schreibe Kubeconfig nach ${CONFIG_PATH}..." sudo -u "${TARGET_USER}" mkdir -p "/home/${TARGET_USER}/.kube" cat < /dev/null apiVersion: v1 kind: Config clusters: - cluster: certificate-authority-data: ${CA} server: ${SERVER} name: k3s contexts: - context: cluster: k3s user: ${USERNAME} name: ${USERNAME}@k3s current-context: ${USERNAME}@k3s users: - name: ${USERNAME} user: token: ${TOKEN} EOF sudo chown "${TARGET_USER}:${TARGET_USER}" "${CONFIG_PATH}" echo "✅ Kubeconfig für ${TARGET_USER} mit statischem Token erstellt." } function add_kubectl_hint_to_bashrc() { if ! sudo grep -q 'kubectl' "${BASHRC_PATH}" 2>/dev/null; then echo "🧠 Füge kubectl-Alias zur bashrc hinzu..." echo "" | sudo tee -a "${BASHRC_PATH}" > /dev/null echo "# kubectl completion & config (automatisch hinzugefügt)" | sudo tee -a "${BASHRC_PATH}" > /dev/null echo "export KUBECONFIG=\$HOME/.kube/config" | sudo tee -a "${BASHRC_PATH}" > /dev/null echo "source <(kubectl completion bash)" | sudo tee -a "${BASHRC_PATH}" > /dev/null fi } # === Ausführung === check_user_exists "${TARGET_USER}" create_k8s_resources create_static_token_secret get_cluster_info write_kubeconfig add_kubectl_hint_to_bashrc echo "🚀 Alles erledigt für Benutzer '${TARGET_USER}'!" echo "💡 Melde dich mit dem Token im Kubernetes Dashboard an, oder nutze:" echo " kubectl get pods -A"