Skip to main content

More Info:

Enable node auto-repair so GKE automatically repairs nodes that fail health checks, keeping nodes healthy and reducing manual maintenance. Unhealthy nodes can degrade workload availability.

Risk Level

Low

Address

Security

Compliance Standards

  • CIS GKE

Triage and Remediation

Remediation

Manual Steps

  1. On any machine with gcloud installed and access to the project, list all node pools per cluster and location to scope what to review:
    For each cluster:
  2. For each node pool, retrieve and record its management settings, including auto-repair status:
    Focus on .management.autoRepair.
  3. Decide which node pools must have auto-repair enabled, considering:
    • Workload criticality (production vs. dev/test)
    • Tolerance for automatic node replacement and potential pod rescheduling
    • Any special nodes where manual intervention is required (e.g., tightly coupled with external systems, stateful workloads without proper PodDisruptionBudgets).
  4. For each node pool where .management.autoRepair is false and automatic health-based repair is acceptable, enable node auto-repair:
  5. For any node pool where you intentionally choose not to enable auto-repair, document:
    • The node pool name and cluster
    • The business/technical justification (e.g., legacy workloads, special ops runbooks)
    • The alternative process for detecting and repairing unhealthy nodes (monitoring alerts, manual runbooks).
  6. Verify the final state for all node pools after changes:
    Confirm .autoRepair is true for node pools where it should be enabled and that exceptions are explicitly documented.
kubectl cannot enable or configure GKE node auto-repair because it is a managed control-plane / node pool setting controlled via Google Cloud (console, gcloud, or IaC), not a Kubernetes API object. Use the cloud provider configuration as described in the Manual Steps section to remediate this finding.
How to run (from any machine with gcloud access to the project):
  1. Save as check-gke-autorepair.sh and make executable:
  2. Edit the PROJECT_ID (and optionally LOCATION_FILTER) variables in the script.
  3. Run:
Example output:
Interpretation (what indicates a problem):
  • Any row where auto_repair_enabled is false means that node auto-repair is explicitly disabled for that node pool and should be reviewed.
  • Any row where auto_repair_enabled is null (missing) means the management settings could not be determined as expected and should be investigated manually.
  • For CISGKE 5.5.2, all production node pools should typically show auto_repair_enabled as true unless there is a documented exception.