找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1709

积分

1

好友

242

主题
发表于 3 天前 | 查看: 8| 回复: 0

Kubernetes集群中,Pod作为工作负载的基本单元,除了运行业务应用容器外,还经常需要访问各类资源,例如Kubernetes API、ConfigMap、Secret、自定义CRD,甚至云厂商API或内部系统。那么,Pod是凭借何种身份进行访问的呢?核心机制在于ServiceAccount与Token的结合。

01 Kubernetes 中的身份体系概览

Kubernetes身份体系主要包含三类常见身份:

图片

Pod从不以User身份访问API,它只能依赖ServiceAccount进行身份认证。

02 什么是 ServiceAccount?

ServiceAccount(SA)是Kubernetes专为Pod设计的“机器身份”:

  • 属于Namespace级别资源
  • 用于Pod访问Kubernetes API
  • 可绑定RBAC权限规则
  • 通常同一类Pod共享一个SA

每个Namespace默认都会创建一个名为default的ServiceAccount。如果Pod未显式指定serviceAccountName,则会自动使用该默认SA。

03 Pod 是如何拿到身份的?——Token 注入机制

当Pod绑定ServiceAccount后,Kubernetes会自动完成以下三步:

① 创建 Token(JWT)

  • 由kube-apiserver签发
  • 本质是一个符合JWT标准的令牌

② 自动挂载到 Pod

Token默认挂载路径为:

/var/run/secrets/kubernetes.io/serviceaccount/

该目录包含三个关键文件:

  • token:身份凭证JWT
  • ca.crt:API Server的CA证书
  • namespace:当前Pod所在命名空间

③ Pod 使用 Token 访问 API

应用只需在请求头中设置:

Authorization: Bearer <token>

即可调用Kubernetes API。整个过程对应用开发者基本透明。

04 ServiceAccount 与 RBAC 的关系

ServiceAccount仅代表身份,本身不具备任何权限。权限完全由RBAC(基于角色的访问控制)绑定关系决定:

ServiceAccount → Role / ClusterRole → API 权限

示例逻辑:

  • Pod使用SA:app-sa
  • app-sa绑定某个Role
  • Role定义具体操作权限(如get、list、watch)
  • 最终决定Pod能访问哪些资源

简而言之:ServiceAccount = 身份,RBAC = 权限

05 Token 的两种形态(关键区分)

① 旧版:Secret-based Token(逐渐废弃)

特点:

  • Token存储在Secret资源中
  • 永不过期,存在安全风险
  • 早期Kubernetes集群常见

② 新版:Bound ServiceAccount Token(推荐)

Kubernetes 1.24及以上版本默认启用:

  • Token不再持久化保存于Secret
  • 由kubelet按需动态生成
  • 具备过期时间,增强安全性
  • 绑定特定Pod、SA及Audience

优势:

  • 安全性更高,支持自动轮转
  • 无需管理长期凭证
  • 已成为生产环境的标准做法

06 Pod 访问 Kubernetes API 的完整流程

完整身份认证与鉴权链路如下:

Pod 
↓ 读取 /var/run/secrets/kubernetes.io/serviceaccount/token 
↓ 向 kube-apiserver 发起请求 
↓ API Server 验证 Token 有效性 
↓ 识别关联的 ServiceAccount 
↓ 依据 RBAC 规则进行鉴权 
↓ 允许或拒绝访问

07 最佳实践与常见误区

最佳实践

  • 避免使用默认的default ServiceAccount
  • 为每个应用创建独立的ServiceAccount
  • 遵循最小权限原则(Least Privilege)
  • 使用新版Bound Token(尤其Kubernetes 1.24+)
  • 对无需访问API的Pod禁用SA挂载:
    automountServiceAccountToken: false

常见误区

  • 所有Pod共用同一个默认SA
  • 为SA绑定过高权限(如cluster-admin
  • 在容器镜像中硬编码Token
  • 将ServiceAccount误用作“用户”账户

08 小结:ServiceAccount 是 Pod 的“身份证”

核心要点总结:

① Pod 访问 API 必须使用 ServiceAccount

这是Kubernetes设计的强制身份机制。

② Token 是身份凭证,权限由 RBAC 决定

明确区分身份认证与权限鉴权。

③ 新版 Token 更安全,已成主流

生产环境应优先采用Bound ServiceAccount Token。

④ ServiceAccount 是安全边界的重要一环

它是实现零信任架构和最小权限原则的基础组件。




上一篇:VS Code 1.96更新深度解析:强化AI智能体管理,告别免费代码补全
下一篇:云服务器带宽Mbps与MB/s换算指南:网速单位详解与下载速度计算
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 18:59 , Processed in 0.256519 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表