k8s-ServiceAccount 配置

在 Kubernetes 中
ServiceAccount 是一种为 Pod 提供身份认证的机制,允许 Pod 以特定的身份访问 Kubernetes API 服务器。

**Role(角色)**是 Kubernetes 中定义权限的资源对象,它只能在特定的命名空间内生效。Role 用于定义一组权限规则,这些规则定义了可以对 Kubernetes 资源执行的操作。

**RoleBinding(角色绑定)**是将 Role 分配给用户、组或 ServiceAccount 的资源对象。它定义了哪些主体(用户、组或服务账号)可以使用特定的 Role。
ClusterRole(集群角色) ClusterRole 与 Role 类似,但它定义的权限规则可以在整个集群范围内生效,而不是局限于某个命名空间。
ClusterRoleBinding(集群角色绑定) ClusterRoleBinding 是将 ClusterRole 分配给用户、组或 ServiceAccount 的资源对象。它定义了哪些主体可以使用特定的 ClusterRole。

以下是 ServiceAccount 的配置方法和使用指南:
1.创建 ServiceAccount

ServiceAccount 可以通过 kubectl 命令或 YAML 文件创建。

通过命令行创建:

bash 复制代码
kubectl create serviceaccount <service-account-name> --namespace=<namespace>

例如:

bash 复制代码
kubectl create serviceaccount my-service-account --namespace=default

通过 YAML 文件创建:

创建一个名为 service-account.yaml 的文件,内容如下:

bash 复制代码
apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-service-account
  namespace: default

然后运行以下命令应用配置:

bash 复制代码
kubectl apply -f service-account.yaml

2.为 ServiceAccount 分配权限

ServiceAccount 需要与角色(Role 或 ClusterRole)结合使用,通过 RoleBinding 或 ClusterRoleBinding 来分配权限。

创建 Role:

创建一个名为 role.yaml 的文件,定义 Role 的权限:

bash 复制代码
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

然后应用该 Role:

bash 复制代码
kubectl apply -f role.yaml

创建 RoleBinding:

创建一个名为 rolebinding.yaml 的文件,将 Role 绑定到 ServiceAccount:

bash 复制代码
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pod-reader-binding
  namespace: default
subjects:
- kind: ServiceAccount
  name: my-service-account
  namespace: default
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

然后应用该 RoleBinding:

bash 复制代码
kubectl apply -f rolebinding.yaml

3.将 ServiceAccount 分配给 Pod

Pod 可以通过 spec.serviceAccountName 字段指定使用某个 ServiceAccount。

Pod 定义中指定 ServiceAccount:

bash 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  serviceAccountName: my-service-account
  containers:
  - name: my-container
    image: my-image

4.配置 ServiceAccount 的 Token

ServiceAccount 的 Token 是一个自动创建的 Secret,用于 Pod 访问 Kubernetes API。

查看 ServiceAccount 的 Token:

bash 复制代码
kubectl get secrets

或者

bash 复制代码
kubectl describe serviceaccount my-service-account

手动创建 Token:

如果需要手动创建一个 Token,可以使用以下命令:

bash 复制代码
kubectl create token my-service-account

5.配置 ImagePullSecrets

如果需要从私有镜像仓库拉取镜像,可以将 ImagePullSecrets 添加到 ServiceAccount。

创建 ImagePullSecrets:

bash 复制代码
kubectl create secret docker-registry my-secret \
  --docker-server=registry.example.com \
  --docker-username=admin \
  --docker-password=pass123

将 ImagePullSecrets 添加到 ServiceAccount:

bash 复制代码
apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-service-account
imagePullSecrets:
- name: my-secret
相关推荐
容器魔方15 小时前
华为云亮相 KubeCon China 2025,开源生态引领 AI 时代技术跃迁
云原生·容器·云计算
老兵发新帖20 小时前
Kubernetes架构解析
容器·架构·kubernetes
字节跳动开源20 小时前
Gödel Rescheduler:适用于云原生系统的全局最优重调度框架
云原生
星辰大海的精灵20 小时前
轻松玩转 Kubernetes 集群的工具包
后端·架构·kubernetes
容器魔方2 天前
Volcano v1.12 正式发布!驱动云原生AI与批量计算向智能高效新阶段演进
云原生·容器·云计算
Johny_Zhao2 天前
CentOS Stream 8 高可用 Kuboard 部署方案
linux·网络·python·网络安全·docker·信息安全·kubernetes·云计算·shell·yum源·系统运维·kuboard
在未来等你2 天前
互联网大厂Java求职面试:云原生架构与微服务设计中的复杂挑战
java·微服务·ai·云原生·秒杀系统·rag·分布式系统
爱瑞瑞2 天前
云原生学习笔记(八) Docker 实战:宿主机与容器的信息交互与共享策略
docker·容器
程序员老乔2 天前
【Dify系列】【一】【安装与部署】【ubuntu22.04安装docker部署dify1.4.2】
运维·docker·容器
exe4522 天前
使用docker中的ollama
运维·docker·容器