isolated kubectl environments for safer production cluster administration
156
https://github.com/forestgagnon/kparanoid
kparanoid helps you avoid polluting your local environment with myriad
production kubectl contexts. Environments with multiple kubectl contexts are
dangerous, because if you forget to add --context even once to a kubectl
command, you can accidentally run a command on the wrong cluster. It happens.
A common "solution" to this problem is to put the active kubectl context in the terminal prompt. For the paranoid among us, this is not good enough: kubectl is stateful and the context may have changed since the prompt was drawn, perhaps from another terminal window or even a script.
kparanoid takes an extreme approach to isolation, where all kubectl commands
take place in isolated, single-context docker containers. Kparanoid will error
if you give it a kubectl config with more than one context, allowing it to
display a kube context in the terminal prompt which you can have full confidence
in. If you daily drive kparanoid, you can delete production contexts from your
local kubectl, decreasing your risk of accidents.
There may be much simpler ways to achieve something similar, without the usability issues of working inside a docker container. Admittedly, kparanoid is partially optimized for coolness.
You must have docker installed, and have an environment with bash. The
install script has been tested on Mac and Linux. It is distributed via the
public kparanoid docker image.
docker run --rm forestgagnon/kparanoid:1 install bash --config-dir="$HOME/.kparanoid" | bash
You can install kparanoid to any directory by changing --config-dir.
When the install script completes, it will print out a command which generates a
shell statement for adding kparanoid to your PATH.
make build-cli && docker run --rm forestgagnon/kparanoid:1 install bash --config-dir="$HOME/.kparanoid" | bash
kparanoid --help
kparanoid add-cluster gke mycluster --gcloud-cluster-creds-cmd='gcloud container clusters get-credentials my-gke-cluster --region us-central1 --project some-gcp-project'
Any kubeconfig should work with vanilla mode unless it needs to shell out to
some other tool for authentication information, like how GKE kubeconfigs require
gcloud to be present.
kparanoid add-cluster vanilla some-cluster
> You must manually place the kubeconfig file at exactly '/home/forest/.kparanoid/clusters/some-cluster/container-env/.kube/config'
# Start an interactive session
kparanoid open mycluster
kparanoid open my-old-cluster --kubectl-version=1.9.0-00
# Use exec to leverage your fancy local env for processing output
kparanoid exec mycluster kubectl get deployment some-deployed-thing -oyaml | yq e '.metadata.name' | cowsay
_____________________
< some-deployed-thing >
---------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
You can edit the cluster config file to change the default kubectl version
vim $(kparanoid cluster-config get-filepath mycluster)
Available kubectl versions can be fetched for your flavor of cluster
kparanoid kubectl-versions vanilla
Currently, there are some things you can't really do well with kparanoid, or at all:
kparanoid exec doesn't workkubectl port-forward to be usedkparanoid execkparanoid exec usable with kubectl commands which expect filepath
parametersContent type
Image
Digest
sha256:891d8879f…
Size
19.4 MB
Last updated
over 2 years ago
docker pull forestgagnon/kparanoid:1