renew-k3s-server-certs.sh 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/bin/bash
  2. set -e
  3. # Renew k3s server (control plane) certificates using `k3s certificate rotate`.
  4. # Ensures CATTLE_NEW_SIGNED_CERT_EXPIRATION_DAYS is set so new certs are valid for 10 years.
  5. #
  6. # Usage:
  7. # ./renew-k3s-server-certs.sh <server_host> [ssh_user] [ssh_port]
  8. #
  9. # Examples:
  10. # ./renew-k3s-server-certs.sh 10.0.0.1
  11. # ./renew-k3s-server-certs.sh 10.0.0.1 root 22
  12. # ./renew-k3s-server-certs.sh "10.0.0.1 10.0.0.2 10.0.0.3"
  13. SERVER_HOSTS="${1:?Usage: $0 <server_host(s)> [ssh_user] [ssh_port]}"
  14. SSH_USER="${2:-root}"
  15. SSH_PORT="${3:-22}"
  16. SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=10 -p ${SSH_PORT}"
  17. renew_server_certs() {
  18. local host="$1"
  19. echo "=========================================="
  20. echo "Processing k3s server on: ${host}"
  21. echo "=========================================="
  22. ssh ${SSH_OPTS} "${SSH_USER}@${host}" bash <<'REMOTE_SCRIPT'
  23. set -e
  24. K3S_SERVICE_ENV="/etc/systemd/system/k3s.service.env"
  25. echo "[1/5] Checking k3s service status..."
  26. if ! systemctl is-enabled k3s &>/dev/null; then
  27. echo "ERROR: k3s service not found on this host, skipping."
  28. exit 1
  29. fi
  30. echo "[2/5] Ensuring CATTLE_NEW_SIGNED_CERT_EXPIRATION_DAYS=3650 in ${K3S_SERVICE_ENV}..."
  31. if [ -f "${K3S_SERVICE_ENV}" ]; then
  32. if grep -q "^CATTLE_NEW_SIGNED_CERT_EXPIRATION_DAYS=" "${K3S_SERVICE_ENV}"; then
  33. sed -i 's/^CATTLE_NEW_SIGNED_CERT_EXPIRATION_DAYS=.*/CATTLE_NEW_SIGNED_CERT_EXPIRATION_DAYS=3650/' "${K3S_SERVICE_ENV}"
  34. else
  35. echo "CATTLE_NEW_SIGNED_CERT_EXPIRATION_DAYS=3650" >> "${K3S_SERVICE_ENV}"
  36. fi
  37. else
  38. echo "CATTLE_NEW_SIGNED_CERT_EXPIRATION_DAYS=3650" > "${K3S_SERVICE_ENV}"
  39. fi
  40. echo " $(grep CATTLE_NEW_SIGNED_CERT_EXPIRATION_DAYS ${K3S_SERVICE_ENV})"
  41. echo "[3/5] Stopping k3s..."
  42. systemctl stop k3s
  43. echo "[4/5] Rotating k3s server certificates..."
  44. k3s certificate rotate
  45. echo "[5/5] Starting k3s..."
  46. systemctl daemon-reload
  47. systemctl start k3s
  48. sleep 5
  49. if systemctl is-active k3s &>/dev/null; then
  50. echo "SUCCESS: k3s server is running on $(hostname)"
  51. else
  52. echo "ERROR: k3s failed to start. Check: journalctl -u k3s -n 50"
  53. exit 1
  54. fi
  55. REMOTE_SCRIPT
  56. echo ""
  57. }
  58. # Process each host
  59. for host in ${SERVER_HOSTS}; do
  60. renew_server_certs "${host}"
  61. done
  62. echo "All done."