权限管理,为kubernetes集群创建只读账户,方便dev人员查看集群信息
shell脚本
在可以操作kubernetes集群管理员权限的机器执行
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 71 72 73 74 75 76 77 78
| #!/bin/bash # 判断是否安装base64 if command -v base64 &> /dev/null; then echo "base64 is installed" else echo "base64 is not installed" exit 1 fi
# 设置只读用户的命名空间 namespace="default" # 设置只读用户的名称,与对应linux用户同名,也可以不同名 username="ro"
# 创建 ServiceAccount kubectl create sa "${username}" --namespace="${namespace}"
# 高版本的kubernetes集群关闭了ServiceAccount创建时自动创建对应的 Secret # 创建 Secret与 ServiceAccount进行关联绑定 cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: ${username}-secret namespace: ${namespace} annotations: kubernetes.io/service-account.name: "${username}" type: kubernetes.io/service-account-token EOF
# 新建的ServiceAccount与集群角色view(只读权限)进行绑定授权 cat <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: ${username}-cluster-role-binding subjects: - kind: ServiceAccount name: ${username} namespace: ${namespace} roleRef: kind: ClusterRole name: view apiGroup: rbac.authorization.k8s.io EOF
# 获取 secret 创建后自动生成的 token TOKEN=$(kubectl get secret -n ${namespace} ${username}-secret -o jsonpath='{.data.token}' | base64 -d)
echo TOKEN:$TOKEN
# 获取集群的name CLUSTER_NAME=$(kubectl config view -o jsonpath='{.clusters[0].name}')
# 获取 API Server 地址 API_SERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
# 将 kubeconfig 文件保存到对应linux用户同名的.kube目录 mkdir -p /home/${username}/.kube #将集群ca.crt文件保存到linux用户同名的只读用户可以读取的地方 kubectl get secret -n ${namespace} ro-secret -o jsonpath="{.data['ca\.crt']}" | base64 -d > /home/${username}/.kube/kubernetes.ca.crt
KUBECONFIG_PATH=/home/${username}/.kube/config
# 清理旧的只读config rm -rf ${KUBECONFIG_PATH} kubectl config set-cluster ${CLUSTER_NAME} --server="${API_SERVER}" --certificate-authority=/home/${username}/.kube/kubernetes.ca.crt --kubeconfig="${KUBECONFIG_PATH}" kubectl config set-credentials "${username}" --token="${TOKEN}" --kubeconfig="${KUBECONFIG_PATH}" kubectl config set-context "${username}-context" --cluster=${CLUSTER_NAME} --user="${username}" --namespace="${namespace}" --kubeconfig="${KUBECONFIG_PATH}" kubectl config use-context "${username}-context" --kubeconfig="${KUBECONFIG_PATH}"
# 修改文件所有权 sudo chown -R ${username}:${username} /home/${username}/.kube
|
这样,你就可以完成对kubernetes集群权限管理,对应linux用户只有只读集群的权限