场景一:假设你需要创建一个 sa 账号,分发给外部人员使用,这时候你就需要给它绑定权限,主要是对资源的管理,比如 node ,pod ,secret ,cm 等,根据使用者的需要设置固定的权限。
场景二:当你部署的应用是管理类应用,比如可以管理整个集群的,或者管理某个应用,比如 prometheus operator 就是管理 prometheus ,这时候需要创建不同的 sa 账户,对告警规则,告警等设置不同的权限。
以下是场景二的例子:
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: monitoring-updater
namespace: monitoring
---
apiVersion:
rbac.authorization.k8s.io/v1kind: ClusterRole
metadata:
name: monitoring-updater
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs:
- "*"
- apiGroups: ["
monitoring.coreos.com"]
resources: ["prometheusrules"]
verbs:
- "*"
---
apiVersion:
rbac.authorization.k8s.io/v1kind: ClusterRoleBinding
metadata:
name: monitoring-updater
subjects:
- kind: ServiceAccount
name: monitoring-updater
namespace: monitoring
roleRef:
kind: ClusterRole
name: monitoring-updater
apiGroup:
rbac.authorization.k8s.io#检查是否有 secret 和 PrometheusRule 权限
kubectl auth can-i create secret --as=system:serviceaccount:monitoring:monitoring-updater -n monitoring
kubectl auth can-i create prometheusrule --as=system:serviceaccount:monitoring:monitoring-updater -n monitoring