「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」。
✍️前言
✨本文一键脚本 根据 juejin.cn/post/701773… 这位小哥的文章,二次开发而来,小哥的内容说得比较详细,如果看了本文脚本,不明其意的同学,可以看看这位小哥的文章
🙋♂️本着凡是自动化能解决的,决不一条一条命令去敲,博主决定写个一键创建用户,然后授于查看pod权限的脚本
🙆♂️下图为脚本运行截图,可见非常方便。。还可以集成到Golang和php代码中哦。
✍️脚本内容如下
命名为: create_user.sh 执行: bash create_user.sh
#!/bin/bash
#异常直接中断流程,退出脚本
set -e
#接收两个参数,第1个参数为用户名,第2个参数为命令空间(可选)
name=$1
namespace=$2
#如果不设置用户名,默认为dmp+随机数
if [ -z $name ];then
name=dmp`date +%N`
fi
#如果不设置namespace,默认为test命令空间
if [ -z $namespace ];then
namespace="test"
fi
group=peach
caPath=/etc/kubernetes/pki/
#1. 创建用户证书私钥
openssl genrsa -out ${name}.key 2048
#2. 创建证书签名文件
openssl req -new -key ${name}.key -out ${name}.csr -subj "/CN=${name}/O=${group}"
#3. 生成最终证书文件
openssl x509 -req -in ${name}.csr -CA ${caPath}ca.crt -CAkey ${caPath}ca.key -CAcreateserial -out ${name}.crt -days 3650
#4. 创建集群凭证
kubectl config set-credentials ${name} --client-certificate=${name}.crt --client-key=${name}.key
#5. 创建集群上下文context
cluster=`kubectl config get-clusters | grep -v NAME`
kubectl config set-context ${name}-context --cluster=${cluster} --namespace=${namespace} --user=${name}
#6. 创建用户成功提示
echo "----------------"
echo "创建用户成功\n"
echo "用户名: ${name} namespace: $namespace\n"
#查看当前已创建的users和contexts
echo "------显示user列表-------" && kubectl config get-users
echo "------显示context列表-------" && kubectl config get-contexts
echo "----------------"
echo "接下来创建k8s集群角色和权限"
#7. 编写角色配置文件
cat >> role.yaml << EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: ${namespace}
name: ${name}-log-role
rules:
- apiGroups: [""]
resources: ["pods", "pods/log"]
verbs: ["get", "list"]
EOF
# 替换角色配置(可选)
#sed 's/NS/${namespace}/g' role.yaml
#8. 创建角色
kubectl apply -f role.yaml
#9. 编写角色权限绑定配置文件
cat >> rolebinding.yaml << EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: ${name}-hangzhou-rolebinding
namespace: ${namespace}
subjects:
- kind: User
name: ${name}
apiGroup: ""
roleRef:
kind: Role
name: ${namespace}-log-role
apiGroup: ""
EOF
#10. 创建角色权限绑定
kubectl apply -f rolebinding.yaml
#11. 创建权限成功提示
echo "----------------"
echo "创建角色权限成功\n"
#权限测试
kubectl get pods -n ${namespace} --context=${name}-context
#查看角色和角色绑定列表并过滤用户名
echo "-----查看角色列表----"
kubectl get role -A | grep ${name}
echo "-----查看角色绑定列表----"
kubectl get rolebinding -A | grep ${name}
echo "查看pod命令: kubectl get pods -n ${namespace} --context=${name}-context"
echo "-------脚本处理完成,谢谢使用---------"
😅脚本中有非常详细的注释,方便看官们快速理解哦