Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save simonswine/1f9e14a09c911f126ffd3e83bedbbadf to your computer and use it in GitHub Desktop.
Save simonswine/1f9e14a09c911f126ffd3e83bedbbadf to your computer and use it in GitHub Desktop.
Create kubeconfig from service account
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
# ensure service account exists
kubectl apply -f - >&2 <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-sa
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: my-sa-admin-binding
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: admin
subjects:
- kind: ServiceAccount
name: my-sa
namespace: default
EOF
secret_name=$(kubectl get sa my-sa -n default -o=jsonpath='{.secrets[0].name}')
token=$(kubectl get secret -n default ${secret_name} -o 'jsonpath={.data.token}' | base64 -d)
ca_crt=$(kubectl get secret -n default ${secret_name} -o 'jsonpath={.data.ca\.crt}')
cat <<EOF
kind: Config
preferences:
colors: true
current-context: cluster
apiVersion: v1
clusters:
- cluster:
server: https://my-host
certificate-authority-data: ${ca_crt}
name: cluster
contexts:
- context:
cluster: cluster
user: cluster
name: cluster
users:
- name: cluster
user:
token: ${token}
EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment