Kubernetes(k8s) 中如何通过 ServiceAccount 管理权限和访问控制?
mistywing66:
创建ServiceAccount:
kubectl create serviceaccount <service-account-name> -n <namespace>
定义RBAC权限:
创建Role/ClusterRole(示例Role允许读取Pods):
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
kubectl apply -f role.yaml -n <namespace>
创建RoleBinding/ClusterRoleBinding(绑定ServiceAccount到Role):
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods-binding
subjects:
- kind: ServiceAccount
name: <service-account-name>
namespace: <namespace>
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
kubectl apply -f rolebinding.yaml -n <namespace>
在Pod中使用ServiceAccount:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
serviceAccountName: <service-account-name>
containers:
- name: mycontainer
image: nginx
验证权限:
kubectl auth can-i get pods --as=system:serviceaccount:<namespace>:<service-account-name>
关键点:
Role作用于单个命名空间,ClusterRole适用于集群范围。
ServiceAccount需与RoleBinding/ClusterRoleBinding明确关联。
最小化权限分配,避免过度授权。
630
2025-05-12 07:15:00