export USER_NAME=user1
openssl genrsa -out $USER_NAME.key 2048
openssl req -new -key $USER_NAME.key -out $USER_NAME.csr
# Common Name (eg, fully qualified host name) []:user1 <--- only set common name as $USER_NAME
# จะมีไฟล์
ls $USER_NAME.csr $USER_NAME.key
USER_CSR=$(cat $USER_NAME.csr | base64)
cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: ${USER_NAME}
spec:
groups:
- system:authenticated
request: ${USER_CSR}
signerName: kubernetes.io/kube-apiserver-client
usages:
- client auth
EOF
# <-- จะมี certificate signing request ชื่อ ${USER_NAME} สถานะ Pending -->
k get csr
# <-- approve csr -->
k certificate approve ${USER_NAME}
# <-- สถานะ csr จะเปลี่ยนเป็น Approved,Issued -->
k get csr ${USER_NAME}
# <-- export cert -->
k get csr/${USER_NAME} -o jsonpath='{.status.certificate}' | base64 -d >> ${USER_NAME}.crt
# 2 ไฟล์ที่เราจะใช้
ls ${USER_NAME}.key ${USER_NAME}.crt
k config set-credentials ${USER_NAME} --client-key=${USER_NAME}.key --client-certificate=${USER_NAME}.crt --embed-certs=true
k config set-context <ชื่อ context> --cluster=<ชื่อ cluster> --user=${USER_NAME} --namespace=<ชื่อ default namespace>
k config get-contexts
k config use-context <ชื่อ context>
ถึงตรงนี้ user ที่เพิ่งสร้างควรจะสามารถเรียกใช้งาน kube ได้แล้ว แต่ยังไม่มีสิทธิ์ทำอะไรเลย
เปลี่ยนไปใช้ context ของ kubeadmin
# <-- สร้าง cluster role ที่สามารถทำทุกอย่างกับ pods, deployments, configmap และ service ได้
k create clusterrole developer --verb=create,get,list,watch,delete,update,patch --resource=pods --resource=deployments --resource=configmaps --resource=services --resource=secrets
# <-- สร้าง rolebinding ${USER_NAME} ไปยัง developer clusterrole -->
k create namespace dev
k create rolebinding developer-role-binding --namespace dev --clusterrole=developer --user=${USER_NAME}
# <-- สามารถ create rolebinding ใน namespace อื่นๆ ที่อยากให้สิทธิ์ user นี้ใช้งาน
# check
# <-- มี rolebinding -->
k get rolebinding -n dev
# เช็คสิทธิ์ในการสร้าง pod
k auth can-i create pod -n dev --as ${USER_NAME}
k auth can-i create deploy -n dev --as ${USER_NAME}
k auth can-i create svc -n dev --as ${USER_NAME}
k auth can-i create cm -n dev --as ${USER_NAME}
k auth can-i create secret -n dev --as ${USER_NAME}
# เช็คว่าไม่มีสิทธิ์ใดๆ ใน default namespace
k auth can-i create pod -n default --as ${USER_NAME}
k auth can-i create deploy -n default --as ${USER_NAME}
k auth can-i create svc -n default --as ${USER_NAME}
k auth can-i create secret -n default --as ${USER_NAME}
k auth can-i create cm -n default --as ${USER_NAME}