Kubernetes 中的 ServiceAccount 使用指南

在这里插入图片描述

在 Kubernetes (K8s) 中,ServiceAccount 是一种专门用于控制 Pod 与 Kubernetes API 之间交互的资源。它提供身份验证的凭据,通常用于向 Pod 授予访问 Kubernetes API 的权限。

1. ServiceAccount 的概念

默认情况下,Kubernetes 集群会自动为每个 Pod 分配一个默认的 default ServiceAccount。ServiceAccount 本质上是 K8s 内部的一种身份标识,用于关联 Pod 与相关的权限。

2. ServiceAccount 的用途

  • 授予 Pod 访问 Kubernetes API 的权限。
  • 结合 RBAC (Role-Based Access Control) 实现细粒度的权限控制。
  • 配合 Kubernetes 中的身份认证、访问控制和审计功能。
  • 用于在 Kubernetes 中运行需要访问 K8s API 的应用程序(如 Operators、Controllers)。

3. 创建和使用 ServiceAccount

3.1 创建 ServiceAccount

需要定义一个 ServiceAccount 的 YAML 文件 service-account.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-service-account
  namespace: default

执行以下命令来创建:

kubectl apply -f service-account.yaml

3.2 将 ServiceAccount 绑定到 Pod

需要在 Pod 的 YAML 文件中指定 serviceAccountName,例如 my-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  namespace: default
spec:
  serviceAccountName: my-service-account
  containers:
  - name: my-container
    image: nginx

执行以下命令来创建 Pod:

kubectl apply -f my-pod.yaml

3.3 查看 ServiceAccount

使用以下命令查看集群中的 ServiceAccount:

kubectl get serviceaccounts

4. 查询 ServiceAccount

可以使用多种方式来查询 ServiceAccount 的详细信息:

4.1 列出所有 ServiceAccount

列出当前命名空间中的所有 ServiceAccount:

kubectl get serviceaccounts

如果需要查看其他命名空间的 ServiceAccount,可以使用 -n 选项:

kubectl get serviceaccounts -n <namespace-name>

4.2 查看特定 ServiceAccount 的详细信息

可以使用 kubectl describe 命令查看 ServiceAccount 的详细信息:

kubectl describe serviceaccount my-service-account

4.3 查看 ServiceAccount 关联的 Secret

执行以下命令列出所有关联的 Secret:

kubectl get secrets

并通过以下命令查看 Secret 的详细信息:

kubectl describe secret <secret-name>

5. RBAC 与 ServiceAccount

可以为 ServiceAccount 配置 RBAC 权限,例如赋予 my-service-account 读取 Pod 列表的权限。

5.1 创建 Role

定义一个 role.yaml 文件,包含如下内容:

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

执行以下命令来创建 Role:

kubectl apply -f role.yaml

5.2 创建 RoleBinding

定义一个 rolebinding.yaml 文件,绑定 my-service-accountpod-reader 角色:

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:

kubectl apply -f rolebinding.yaml

6. ServiceAccount 的 Token

每个 ServiceAccount 都会自动创建一个 Secret,包含访问 Kubernetes API 所需的 token。可以通过以下命令查看:

kubectl get secrets

也可以通过描述 ServiceAccount 看到关联的 Secret:

kubectl describe serviceaccount my-service-account

7. 使用场景

  • 授权某个 Pod 访问集群中的资源。
  • 安全运行需要 Kubernetes API 交互的自定义控制器。
  • 与 GitOps 或 CI/CD 相关的工作负载集成。

通过正确地创建和配置 ServiceAccount,可以在 Kubernetes 集群中实现更安全、灵活的权限管理。如需更多细化配置或有其他问题,欢迎继续交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DZSpace

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值