Kubernetes 中Service Account

目录

  • 一、服务账户的组成部分
  • 二、创建服务账户
  • 三、绑定权限
  • 四、在Pod中使用服务账户
  • 五、注意事项

在 Kubernetes 中,Service Account(服务账户)是一种特殊的 Kubernetes 账户,主要用于在 Pod 内运行的应用程序,以便这些应用程序能够与 Kubernetes API 进行交互,比如读取或修改 Kubernetes 对象。每个命名空间下默认都会有一个名为 default 的服务账户,也可以创建额外的服务账户来满足不同权限需求。

一、服务账户的组成部分

  1. Token Secret: 服务账户会自动关联一个 Secret,这个 Secret 包含了一个用于 API 认证的令牌(token)。Pod 中的应用可以通过环境变量、文件挂载或 API 请求获取这个 token 来认证自己。

  2. API访问权限: 服务账户可以通过关联的 Role 或 ClusterRole(通过 RoleBinding 或 ClusterRoleBinding)来定义它能访问哪些资源和执行哪些操作。

二、创建服务账户

下面是如何创建一个自定义服务账户的 YAML 示例:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-app-account
  namespace: my-namespace

三、绑定权限

接着,可以为这个服务账户绑定角色,例如赋予它读取 Pod 的权限:

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

---

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pod-reader-binding
  namespace: my-namespace
subjects:
- kind: ServiceAccount
  name: my-app-account
  namespace: my-namespace
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

四、在Pod中使用服务账户

一旦服务账户创建并配置好权限,就可以在 Pod 定义中指定使用哪个服务账户。默认情况下,Pod 使用所在命名空间的 default 服务账户,但可以通过以下方式指定:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  namespace: my-namespace
spec:
  serviceAccountName: my-app-account # 指定服务账户
  containers:
  - name: my-container
    image: my-image

五、注意事项

  • 服务账户的权限应该遵循最小权限原则,即仅给予完成任务所必需的最小权限集。
  • 服务账户的 Secret(包含 API 访问令牌)应该妥善管理,避免泄露。
  • 如果Pod不需要与API服务器交互,可以考虑不指定服务账户或者使用没有附加权限的服务账户。
  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值