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
相关推荐
老实巴交的麻匪4 小时前
Logs 可观测性 | Grafana Loki 架构窥探与实践
运维·云原生·容器
塑遂4 小时前
Kubernetes高级调度01
容器·kubernetes
MarkGosling4 小时前
【开源项目】轻量加速利器 HubProxy自建 Docker、GitHub 下载加速服务
docker·容器·github
MarkGosling5 小时前
【开源项目】轻量加速利器 HubProxy 自建 Docker、GitHub 下载加速服务
运维·git·docker·容器·开源·github·个人开发
chanalbert5 小时前
Docker网络技术深度研究与实战手册
docker·容器·自动化运维
东风微鸣6 小时前
AI 赋能的故障排除:技术趋势与实践
docker·云原生·kubernetes·可观察性
KubeSphere 云原生6 小时前
云原生周刊:2025年的服务网格
云原生
Etual6 小时前
云原生联调利器:Telepresence实战
云原生
陌上阳光18 小时前
docker搭建ray集群
docker·容器·ray
这就是佬们吗19 小时前
初识 docker [上]
java·开发语言·笔记·docker·容器