-
Notifications
You must be signed in to change notification settings - Fork 2
/
create_kubeconfig.bash
70 lines (57 loc) · 2.28 KB
/
create_kubeconfig.bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
SERVICE_ACCOUNT_NAME=$1
SERVICE_ACCOUNT_NAMESPACE=$2
echo "Creating Service Acount $SERVICE_ACCOUNT_NAME at namespace $SERVICE_ACCOUNT_NAMESPACE"
# Create a Service Account name `helm-rest` in the default namespaces.
kubectl create serviceaccount $SERVICE_ACCOUNT_NAME -n $SERVICE_ACCOUNT_NAMESPACE
# Create a Cluster Role and Cluster Role Binding with the permissions for the service account,
# you can edit this command to have more granular and secure set of permissions
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: helm-rest-role
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: helm-rest-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: helm-rest-role
subjects:
- kind: ServiceAccount
name: $SERVICE_ACCOUNT_NAME
namespace: $SERVICE_ACCOUNT_NAMESPACE
EOF
SA_SECRET=$( kubectl get sa -n $SERVICE_ACCOUNT_NAMESPACE $SERVICE_ACCOUNT_NAME -o jsonpath='{.secrets[0].name}' )
# Pull the bearer token and cluster CA from the service account secret.
BEARER_TOKEN=$( kubectl get secrets -n $SERVICE_ACCOUNT_NAMESPACE $SA_SECRET -o jsonpath='{.data.token}' | base64 -d )
# Get Certificate File
CERTIFICATE=$(kubectl get secrets -n default $SA_SECRET -o jsonpath='{.data.ca\.crt}')
# Get Cluster Url
CURRENT_CONTEXT=$(kubectl config current-context)
CURRENT_CLUSTER=$(kubectl config view -o jsonpath="{.contexts[?(@.name == \"$CURRENT_CONTEXT\")].context.cluster}")
CLUSTER_URL=$(kubectl config view -o jsonpath="{.clusters[?(@.name == \"$CURRENT_CLUSTER\")].cluster.server}")
# Generate KubeConfig File
KUBECONFIG=./kubeconfig
kubectl config --kubeconfig=$KUBECONFIG \
set-cluster \
$CLUSTER_URL \
--server=$CLUSTER_URL
kubectl config --kubeconfig=$KUBECONFIG \
set clusters.$CLUSTER_URL.certificate-authority-data $CERTIFICATE
kubectl config --kubeconfig=$KUBECONFIG \
set-credentials $SERVICE_ACCOUNT_NAME --token=$BEARER_TOKEN
kubectl config --kubeconfig=$KUBECONFIG \
set-context registry \
--cluster=$CLUSTER_URL \
--user=$SERVICE_ACCOUNT_NAME
kubectl config --kubeconfig=$KUBECONFIG \
use-context registry
# Genereate the Base64 string
cat ./kubeconfig | base64 --wrap=0