I manage several Kubernetes environments, including development, staging, and multiple production clusters. I'm trying to decide whether access should come directly from my local machine, through one shared jumpbox, or through separate jumpboxes for each environment. What setup have you found practical and secure, especially for keeping production isolated from non-production?
4 Answers
The safest general pattern is to separate production from non-production. Production access should ideally be limited to CI/CD and tightly controlled break-glass procedures, while engineers use direct or proxied access to lower environments. If compliance requires network-based controls, use a dedicated access point or jumpbox per environment.
For a small team, direct access from a local machine can be perfectly reasonable. Use separate kubeconfig contexts or profiles for each cluster, authenticate through your cloud identity provider, and apply least-privilege RBAC. Make the current context obvious so it’s harder to mistake production for development.
Cloud-provider gateways, private control-plane tunnels, and identity-aware networking can replace traditional jumpboxes. Mesh VPN or zero-trust tools are also useful when clusters should remain private, but they still need strong identity, device controls, and Kubernetes RBAC behind them.
A managed access layer can work well instead of maintaining jumpboxes. For example, a Kubernetes access agent or gateway can proxy connections through your identity provider, let you select the appropriate cluster context, and enforce RBAC centrally. This is especially useful when you need access from different locations or want deployments to run through CI/CD.
Keep production and non-production isolated even with a centralized access layer. In stricter environments, each environment may need its own network boundary and jumpbox, with production changes restricted to approved automation wherever possible.

Avoid leaving credentials in plaintext kubeconfig files. Encrypt them or obtain short-lived credentials at runtime, and make sure production permissions are more restrictive than those for lower environments.