Kubernetes ServiceAccount入门:概念、场景与资源定义

来自AI助手的总结
K8s ServiceAccount用于身份认证授权,1.24后不再自动创建Secret,改为动态生成短期token。
Kubernetes ServiceAccount入门:概念、场景与资源定义

一、什么是K8s服务账户ServiceAccount

ServiceAccount是Kubernetes中的一种资源,主要用于身份验证和授权,可以让应用或用户以特定的身份访问集群内部的其他资源和服务。

Kubernetes 1.24 版本对 Service Account(SA)的 Secret 创建行为确实做了重大调整。以下是版本差异的详细说明:

1.24 版本之前的行为

  • 自动创建 Secret:在 Kubernetes 1.20 及更早版本中,每创建一个 Service Account,系统会自动生成一个关联的 Secret。该 Secret 包含一个永不过期的 token,并通过投射卷(Projected Volume)挂载到 Pod 的 /var/run/secrets/kubernetes.io/serviceaccount 目录下,供 Pod 访问 Kubernetes API 时使用

  • 1.21~1.23 版本的过渡:在 1.21 到 1.23 版本中,虽然仍会为 SA 自动生成 Secret,但 Pod 不再直接使用 Secret 中的 token,而是由 kubelet 通过 TokenRequest API 动态申请一个有效期为 1 小时的临时 token。此 token 会被自动刷新,旧 token 会在过期后失效

1.24 版本之后的变更

  • 不再自动创建 Secret:从 1.24 版本开始,Kubernetes 彻底移除了为 SA 自动生成 Secret 的功能。所有 token 均需通过 TokenRequest API 动态生成,且默认有效期为 1 小时

  • 动态 token 的特性:动态生成的 token 具有短期有效性,且在 Pod 删除后立即失效。这种设计增强了安全性,但可能导致需要长期 token 的场景(如跨集群操作)出现问题

二、K8s服务账户ServiceAccount应用场景

K8s服务账户ServiceAccount主要应用场景如下:

  • 1)授权给应用程序指定的权限,让其可以访问集群中的资源

  • 2)生成受限的kubeconfig,供不同的用户使用

  • 3)生成临时或永久token,可以登录Kubernetes的Dashboard

三、K8s服务账户ServiceAccount资源定义

3.1 命令格式定义

使用 kubectl create 命令直接创建 ServiceAccount:


# 在default命名空间下进行创建

kubectl create serviceaccount sa-demo  

3.2 yaml格式定义


# 编写yaml文件

vim sa.yaml  

apiVersion: v1  

kind: ServiceAccount  

metadata:  

  name: sa-demo  # ServiceAccount 名称  

  namespace: default  # 所属命名空间,默认可不写  

# 应用yaml文件

kubectl apply -f sa.yaml  

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容