Kubernetes(k8s) 中如何通过 ServiceAccount 管理权限和访问控制?

问题浏览数Icon
7
问题创建时间Icon
2025-05-12 07:15:00
回答 | 共 1 个
作者头像
mistywing66
  1. 创建ServiceAccount

    kubectl create serviceaccount <service-account-name> -n <namespace>
  2. 定义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>
  3. 在Pod中使用ServiceAccount

    apiVersion: v1
    kind: Pod
    metadata:
     name: mypod
    spec:
     serviceAccountName: <service-account-name>
     containers:
     - name: mycontainer
       image: nginx
  4. 验证权限

    kubectl auth can-i get pods --as=system:serviceaccount:<namespace>:<service-account-name>

关键点

  • Role作用于单个命名空间,ClusterRole适用于集群范围。
  • ServiceAccount需与RoleBinding/ClusterRoleBinding明确关联。
  • 最小化权限分配,避免过度授权。