1+ #! /usr/bin/env bash
2+ set -e
3+ set -o pipefail
4+
5+ # Thanks to innovia
6+ # https://gist.github.com/innovia/fbba8259042f71db98ea8d4ad19bd708
7+
8+ SERVICE_ACCOUNT_NAME=goose
9+ NAMESPACE=" garden"
10+ KUBECFG_FILE_NAME=" /tmp/kube/k8s-${SERVICE_ACCOUNT_NAME} -${NAMESPACE} -conf"
11+ TARGET_FOLDER=" /tmp/kube"
12+
13+ create_target_folder () {
14+ echo -n " Creating target directory to hold files in ${TARGET_FOLDER} ..."
15+ mkdir -p " ${TARGET_FOLDER} "
16+ printf " done"
17+ }
18+
19+ create_service_account () {
20+ echo -e " \\ nCreating a service account in ${NAMESPACE} namespace: ${SERVICE_ACCOUNT_NAME} "
21+ kubectl create sa " ${SERVICE_ACCOUNT_NAME} " --namespace " ${NAMESPACE} "
22+ }
23+
24+ get_secret_name_from_service_account () {
25+ echo -e " \\ nGetting secret of service account ${SERVICE_ACCOUNT_NAME} on ${NAMESPACE} "
26+ SECRET_NAME=$( kubectl get sa " ${SERVICE_ACCOUNT_NAME} " --namespace=" ${NAMESPACE} " -o json | jq -r .secrets[].name)
27+ echo " Secret name: ${SECRET_NAME} "
28+ }
29+
30+ extract_ca_crt_from_secret () {
31+ echo -e -n " \\ nExtracting ca.crt from secret..."
32+ kubectl get secret --namespace " ${NAMESPACE} " " ${SECRET_NAME} " -o json | jq \
33+ -r ' .data["ca.crt"]' | base64 -d > " ${TARGET_FOLDER} /ca.crt"
34+ printf " done"
35+ }
36+
37+ get_user_token_from_secret () {
38+ echo -e -n " \\ nGetting user token from secret..."
39+ USER_TOKEN=$( kubectl get secret --namespace " ${NAMESPACE} " " ${SECRET_NAME} " -o json | jq -r ' .data["token"]' | base64 -d)
40+ printf " done"
41+ }
42+
43+ set_kube_config_values () {
44+ context=$( kubectl config current-context)
45+ echo -e " \\ nSetting current context to: $context "
46+
47+ CLUSTER_NAME=$( kubectl config get-contexts " $context " | awk ' {print $3}' | tail -n 1)
48+ echo " Cluster name: ${CLUSTER_NAME} "
49+
50+ ENDPOINT=$( kubectl config view \
51+ -o jsonpath=" {.clusters[?(@.name == \" ${CLUSTER_NAME} \" )].cluster.server}" )
52+ echo " Endpoint: ${ENDPOINT} "
53+
54+ # Set up the config
55+ echo -e " \\ nPreparing k8s-${SERVICE_ACCOUNT_NAME} -${NAMESPACE} -conf"
56+ echo -n " Setting a cluster entry in kubeconfig..."
57+ kubectl config set-cluster " ${CLUSTER_NAME} " \
58+ --server=" ${ENDPOINT} " \
59+ --certificate-authority=" ${TARGET_FOLDER} /ca.crt" \
60+ --embed-certs=true
61+
62+ echo -n " Setting token credentials entry in kubeconfig..."
63+ kubectl config set-credentials \
64+ " ${SERVICE_ACCOUNT_NAME} -${NAMESPACE} -${CLUSTER_NAME} " \
65+ --token=" ${USER_TOKEN} "
66+
67+ echo -n " Setting a context entry in kubeconfig..."
68+ kubectl config set-context \
69+ " ${SERVICE_ACCOUNT_NAME} -${NAMESPACE} -${CLUSTER_NAME} " \
70+ --cluster=" ${CLUSTER_NAME} " \
71+ --user=" ${SERVICE_ACCOUNT_NAME} -${NAMESPACE} -${CLUSTER_NAME} " \
72+ --namespace=" ${NAMESPACE} "
73+
74+ echo -n " Setting the current-context in the kubeconfig file..."
75+ kubectl config use-context " ${SERVICE_ACCOUNT_NAME} -${NAMESPACE} -${CLUSTER_NAME} "
76+ }
77+
78+ create_target_folder
79+ get_secret_name_from_service_account
80+ extract_ca_crt_from_secret
81+ get_user_token_from_secret
82+ set_kube_config_values
0 commit comments