一键创建k8s用户并授于查看pod日志权限

1,576 阅读2分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」。

✍️前言

✨本文一键脚本 根据 juejin.cn/post/701773… 这位小哥的文章,二次开发而来,小哥的内容说得比较详细,如果看了本文脚本,不明其意的同学,可以看看这位小哥的文章

🙋‍♂️本着凡是自动化能解决的,决不一条一条命令去敲,博主决定写个一键创建用户,然后授于查看pod权限的脚本

🙆‍♂️下图为脚本运行截图,可见非常方便。。还可以集成到Golang和php代码中哦。 image.png

✍️脚本内容如下

命名为: 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 "-------脚本处理完成,谢谢使用---------"

😅脚本中有非常详细的注释,方便看官们快速理解哦