在 Kubernetes (k8s) 中,自建服务账号(Service Account)并将其绑定到集群管理员角色,需要进行以下步骤:
- 创建服务账号: 创建一个新的服务账号,这通常通过一个 YAML 文件来完成。
apiVersion: v1
kind: ServiceAccount
metadata:
name: ops
namespace: default # 指定服务账号所在的命名空间
将以上内容保存为 service-account.yaml
文件,并使用 kubectl apply -f service-account.yaml
命令创建服务账号。
- 创建角色绑定: Kubernetes 集群管理员角色通常绑定到
cluster-admin
ClusterRole。接下来,创建一个 ClusterRoleBinding 或 RoleBinding 来将你的服务账号绑定到这个角色。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: ops-clusterrolebinding
subjects:
- kind: ServiceAccount
name: ops
namespace: default
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
将以上内容保存为 clusterrolebinding.yaml
文件,并使用 kubectl apply -f clusterrolebinding.yaml
命令创建角色绑定。
这样,服务账号 ops
就被赋予了集群管理员权限。
注意:绑定服务账号到 cluster-admin
ClusterRole 是一个非常强大的操作,因为这会给予该服务账号对整个集群的完全控制权限。务必确保只有受信任的用户和服务可以获取这样的权限。
以下是上述步骤的简要命令行总结:
# 创建服务账号
kubectl apply -f service-account.yaml
# 创建角色绑定,将服务账号绑定到集群管理员角色
kubectl apply -f clusterrolebinding.yaml
一旦完成以上步骤,你就可以使用该服务账号的凭据来执行集群管理任务了。通常,这些凭据会以 Kubernetes 私钥的形式存储在 Secret 中,你可以通过以下命令获取:
kubectl get secret ops-token-xxxx -o jsonpath='{.data.token}' | base64 --decode
以上命令会返回一个 JWT 令牌,你可以使用这个令牌与 Kubernetes API 服务器进行交互,进行集群管理操作。