GKE Private Clusters Best Practices: Security, Networking, and Cost Optimization

Deploy GKE private clusters with private nodes, VPC-native networking, Workload Identity, and DNS endpoint access to eliminate public internet exposure while maintaining flexible, secure connectivity without requiring VPNs.

The google/skills repository codifies production-ready patterns for GKE private clusters in skills/cloud/gke-cluster-creation/SKILL.md and skills/cloud/gke-networking/SKILL.md. These best practices harden your Kubernetes environment against external threats while optimizing for cost, availability, and operational efficiency.

Security and Networking Foundation

Private Nodes and Control Plane Isolation

Disable public internet access to both your worker nodes and the Kubernetes control plane. According to the cluster creation skill file, you must set enablePrivateNodes: true and enforce the private endpoint with masterAuthorizedNetworksConfig.privateEndpointEnforcementEnabled: true.

This configuration ensures the API server is only accessible through authorized private networks, eliminating attack vectors from the public internet.

gcloud container clusters create-auto my-private-cluster \
  --region us-central1 \
  --project $PROJECT_ID \
  --enable-private-nodes \
  --enable-master-authorized-networks \
  --release-channel regular

VPC-Native Networking and IP Management

Enable VPC-native networking by setting useIpAliases: true. This allocates pod IPs from your VPC subnets rather than using routes-based networking, enabling direct connectivity to VPC resources and supporting advanced networking features like NetworkPolicy.

Activate automatic IP address management (IPAM) with autoIpamConfig.enabled: true and auto-create subnets to simplify cluster provisioning. Set sensible pod density limits using defaultMaxPodsConstraint.maxPodsPerNode: 48 for standard workloads, or increase to 110 for high-density compute nodes.

Identity Hardening and Node Protection

Configure Workload Identity by setting the workloadPool to <PROJECT>.svc.id.goog. This allows workloads to impersonate Google service accounts using short-lived tokens rather than static service account keys.

Enable Shielded GKE Nodes using --enable-shielded-nodes and --enable-secure-boot to prevent rootkits and boot-level malware. Enforce strict RBAC policies and disable insecure system bindings by setting enableInsecureBindingSystemAuthenticated: false and enableInsecureBindingSystemUnauthenticated: false in the rbacBindingConfig.

{
  "parent": "projects/$PROJECT_ID/locations/us-central1",
  "cluster": {
    "name": "my-private-cluster",
    "autopilot": { "enabled": true },
    "privateClusterConfig": { "enablePrivateNodes": true },
    "masterAuthorizedNetworksConfig": {
      "privateEndpointEnforcementEnabled": true
    },
    "workloadPool": "$PROJECT_ID.svc.id.goog",
    "rbacBindingConfig": {
      "enableInsecureBindingSystemAuthenticated": false,
      "enableInsecureBindingSystemUnauthenticated": false
    }
  }
}

Secure Cluster Access Patterns

DNS Endpoint Access

For connectivity from outside the VPC without VPN tunnels, use the DNS endpoint with allowExternalTraffic: true (or --enable-dns-access in gcloud). This provides a public DNS name that resolves to private IP addresses, accessible only through IAM-authorized users.

gcloud container clusters get-credentials my-private-cluster \
  --region us-central1 \
  --dns-endpoint

Private Endpoint Access

When operating entirely within the VPC, access the cluster using the private endpoint with the --internal-ip flag. This routes all kubectl traffic through your VPC network, ensuring it never traverses the public internet.

gcloud container clusters get-credentials my-private-cluster \
  --region us-central1 \
  --internal-ip

Master Authorized Networks

Optionally restrict API server access to specific corporate CIDR ranges using master authorized networks. This defense-in-depth measure limits which source IP addresses can authenticate to the control plane, even when using the DNS endpoint.

High Availability and Reliability

Regional Cluster Deployment

Deploy regional clusters using --region rather than --zone to replicate the control plane across three zones. This architecture provides resilience against zonal failures and ensures零-downtime control plane maintenance.

Automated Upgrades

Subscribe to a release channel (REGULAR or STABLE) to receive automated Kubernetes version upgrades. This practice ensures your cluster receives security patches and stable feature updates without manual intervention.

Workload Resilience

Configure Pod Disruption Budgets (PDBs) for critical workloads to ensure minimum availability during node maintenance or upgrades. Pair this with the Cluster Autoscaler to maintain capacity during rolling updates.

Cost Optimization Strategies

Autoscaling Configuration

Enable Cluster Autoscaler to adjust node counts based on pending pod resources, and deploy Vertical Pod Autoscaler to right-size container requests automatically. This prevents over-provisioning while maintaining workload performance.

Spot VMs and Autopilot

For non-critical batch processing or inference workloads, use Spot VMs to reduce compute costs by up to 91%. When possible, prefer GKE Autopilot mode, which charges per pod rather than provisioned infrastructure, eliminating capacity planning overhead and reducing total cost of ownership.

Advanced Networking Implementation

Dataplane V2

Enable Dataplane V2 using ADVANCED_DATAPATH to leverage eBPF-based networking and built-in NetworkPolicy enforcement. This modern data plane provides visibility and security policy enforcement without requiring the Calico networking add-on.

gcloud container clusters update my-private-cluster \
  --region us-central1 \
  --datapath-provider ADVANCED_DATAPATH \
  --enable-ip-alias \
  --enable-autoprovisioning

Egress and Connectivity

Configure Private Google Access on your subnets to allow pods without external IPs to reach Google Cloud APIs. For internet egress, deploy Cloud NAT in the cluster's region, ensuring high availability with minimum reserved IPs.

Summary

  • Enable private nodes and private endpoint enforcement to isolate the control plane from the internet, as defined in skills/cloud/gke-cluster-creation/SKILL.md.
  • Use DNS endpoint access for flexible external connectivity without VPNs, or private endpoint access for intra-VPC traffic patterns.
  • Implement Workload Identity and Shielded Nodes to eliminate static credentials and harden against boot-level attacks.
  • Deploy regional clusters with release channel subscriptions for high availability and automated security updates.
  • Optimize costs with Cluster Autoscaler, Spot VMs, and Autopilot mode while maintaining performance through Vertical Pod Autoscaler.
  • Enable Dataplane V2 for modern eBPF networking and native NetworkPolicy support, detailed in skills/cloud/gke-networking/SKILL.md.

Frequently Asked Questions

What is the difference between DNS endpoint and private endpoint access in GKE?

DNS endpoint access provides a public DNS record that resolves to private IP addresses, allowing authorized users outside the VPC to connect without a VPN. Private endpoint access restricts all API traffic to the VPC network, requiring either direct VPC connectivity or Cloud Interconnect. Both methods leverage enablePrivateNodes: true, but DNS endpoint adds allowExternalTraffic: true for broader accessibility.

How do I secure node-to-node communication in a private GKE cluster?

Enable Dataplane V2 (--datapath-provider ADVANCED_DATAPATH) to implement eBPF-based networking with built-in NetworkPolicy support. Combined with VPC-native networking (--enable-ip-alias), this configuration provides high-performance packet routing and allows you to enforce network segmentation policies without the performance overhead of iptables-based proxies or third-party CNI plugins.

What pod density should I configure for private GKE clusters?

Set defaultMaxPodsConstraint.maxPodsPerNode: 48 for general-purpose workloads to balance IP address consumption with node utilization. For high-density compute or microservices architectures, configure up to 110 pods per node, ensuring your subnet CIDR ranges are sized accordingly. The skills/cloud/gke-networking/SKILL.md file recommends enabling automatic IPAM to prevent address exhaustion as you scale.

When should I use GKE Autopilot versus Standard mode for private clusters?

Use GKE Autopilot when you want Google to manage node infrastructure, security patching, and capacity planning, paying only for allocated pod resources. This mode is ideal for applications with variable resource requirements or teams seeking reduced operational overhead. Use Standard mode when you require specific node configurations, custom operating systems, or specialized hardware like GPUs that require direct node access.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →