Add script to automate creation of k8s users
This commit is contained in:
parent
d5c31c0d32
commit
153a31ae27
64
tools/createuser.sh
Executable file
64
tools/createuser.sh
Executable file
|
@ -0,0 +1,64 @@
|
|||
#!/bin/bash
|
||||
|
||||
CLUSTER="matrixtest"
|
||||
|
||||
|
||||
function usage() {
|
||||
echo "Usage: ${0#*/} <username> [group1,group2,...]"
|
||||
echo "If no group is given the default one is user"
|
||||
}
|
||||
|
||||
|
||||
if [[ ! "${1}" =~ ^[a-z0-9]+$ ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
if [[ -z "${2}" ]]; then
|
||||
groups=( 'user' )
|
||||
elif [[ "${2}" =~ ^[-_a-z1-9]+(,[-_a-z1-9]+)*$ ]]; then
|
||||
groups=( ${2//,/ } )
|
||||
else
|
||||
echo -e "[Error] Fail to validate grouplist\nWe will exit"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
basepath=${HOME}/ssl/kube/${CLUSTER}/${1}
|
||||
|
||||
echo "Generate key and certificate request"
|
||||
mkdir -p "${basepath}"
|
||||
openssl genrsa -out ${basepath}/${1}.key 4096
|
||||
subj="/CN=${1}"
|
||||
for group in "${groups[@]}"; do
|
||||
subj+="/O=${group}"
|
||||
done
|
||||
echo "subj: ${subj}"
|
||||
openssl req -new -key "${basepath}/${1}.key" -out "${basepath}/${1}.csr" -subj "${subj}"
|
||||
|
||||
cat <<EOF > "${basepath}/req-${1}.yaml"
|
||||
apiVersion: certificates.k8s.io/v1
|
||||
kind: CertificateSigningRequest
|
||||
metadata:
|
||||
name: ${1}-req
|
||||
spec:
|
||||
request: $(cat ${basepath}/${1}.csr | base64 | tr -d "\n")
|
||||
signerName: kubernetes.io/kube-apiserver-client
|
||||
expirationSeconds: $((86400*3650)) # 10 years
|
||||
usages:
|
||||
- client auth
|
||||
EOF
|
||||
status=0
|
||||
kubectl apply -f "${basepath}/req-${1}.yaml" || { status=1; echo "Failed to submit cerificate request to cluster" ;}
|
||||
kubectl certificate approve ${1}-req || { status=1; echo "Failed to approve cerificate request by cluster ca";}
|
||||
[[ "${status}" == "1" ]] && exit 1
|
||||
|
||||
# Retrieving signed cert
|
||||
kubectl get "csr/${1}-req" -o jsonpath='{.status.certificate}' | base64 -d > "${basepath}/${1}.crt" || { status=1;echo "[Error] Failed to extract certificate from request status";}
|
||||
[[ "${status}" == "1" ]] && exit 1
|
||||
kubectl delete "csr/${1}-req"
|
||||
|
||||
echo -e "\nRun these commands to create or update the user/context in .kube/config"
|
||||
echo -e "\nkubectl config set-credentials ${1} --client-certificate=${basepath}/${1}.crt --client-key=${basepath}/${1}.key"
|
||||
echo "kubectl config set-context <contextname> --cluster=<clustername> --namespace=default --user=${1}"
|
||||
|
Loading…
Reference in a new issue