16-Pod 身份与认证机制
Pod 身份与认证机制概念引入在文章 14 中你学了 RBAC——“谁能做什么”。但有个问题被跳过了API Server 怎么知道你是谁RBAC文章 14 → 授权Authorization→ 你有权限做这个操作吗 Pod 身份本篇 → 认证Authentication→ 你是谁你是合法的 Pod 吗每个 Pod 从出生就携带一个身份证——ServiceAccount Token。Pod 用这个 Token 访问 API Server。Pod身份绑定Bearer Token 认证通过 RBAC 检查权限ServiceAccountmy-app-saProjected Token自动挂载到 /var/run/secrets/...API Server验证 Token → 识别身份授权判断这个身份能 GET pods 吗学完本篇你将能够查看 Pod 自动挂载的 ServiceAccount Token理解 Pod 如何向 API Server 证明身份区分新版 projected token 和旧版 Secret token 的差异为 Pod 配置自定义 ServiceAccount结合 RBAC 控制 API 访问权限原理讲解Pod 的身份证ServiceAccount Token每个 Pod 创建时K8s 自动做三件事为 Pod 创建一个ServiceAccount Token通过 TokenRequest API将 Token 以projected volume方式挂载到 Pod 内Token 有过期时间kubelet 会自动续期# 进入任何 Pod 都能看到 Tokenls/var/run/secrets/kubernetes.io/serviceaccount/# ca.crt namespace token ← 三个文件Schema从创建 Pod 到认证的全链路API ServerTokenRequest APIkubeletPodAPI ServerTokenRequest APIkubeletPodPod 创建阶段Pod 运行时需要 ServiceAccount TokenTokenRequest(samy-app-sa, audienceapi, expiration3600s)签发 JWT Token挂载到 projected volumeGET /api/v1/namespaces/default/podsAuthorization: Bearer token验证 JWT 签名 过期时间识别 SA 身份system:serviceaccount:default:my-app-saRBAC 检查这个 SA 能 list pods 吗允许/拒绝新 Token vs 旧 Secret Token特性新版 Projected Token1.21旧版 Secret Token过期时间✅ 有1 小时可配置❌ 永不过期自动轮换✅ kubelet 自动续期❌ 需手动重建 Secret绑定 Pod✅ Token 和 Pod 绑定❌ 不绑定Audience✅ 支持限制用途❌ 不支持安全性⭐⭐⭐⭐⭐⭐⭐手动创建 SA 和 TokenapiVersion:v1kind:ServiceAccountmetadata:name:my-readernamespace:default---apiVersion:v1kind:Podmetadata:name:reader-podspec:serviceAccountName:my-reader# 指定 SA不指定则用 defaultcontainers:-name:appimage:nginx:1.27# 手动创建一个 Token用于本地调试kubectl create token my-reader# 指定 audience 和过期时间kubectl create token my-reader--audiencemy-api--duration2hToken 的 JWT 结构Token 是一个 JWTJSON Web Token可以解码查看# 在 Pod 内解码 TokenBASE64 中间那部分cat/var/run/secrets/kubernetes.io/serviceaccount/token|cut-d.-f2|base64-d|python3-mjson.tool{aud:[https://kubernetes.default.svc],exp:1753187200,iat:1753183600,iss:https://kubernetes.default.svc,kubernetes.io:{namespace:default,pod:{name:reader-pod,uid:abc123...},serviceaccount:{name:my-reader,uid:def456...}},sub:system:serviceaccount:default:my-reader}使用 Token 访问 API Server# 在 Pod 内直接访问 API ServerTOKEN$(cat/var/run/secrets/kubernetes.io/serviceaccount/token)APISERVERhttps://kubernetes.default.svccurl-sk-HAuthorization: Bearer$TOKEN$APISERVER/api/v1/namespaces/default/pods动手实验配套实验位于docs/labs/beginner/pod-identity/步骤 1部署实验环境cddocs/labs/beginner/pod-identitybashsetup.sh步骤 2查看 Pod 的默认身份kubectlexecreader-pod --cat/var/run/secrets/kubernetes.io/serviceaccount/token kubectlexecreader-pod --ls/var/run/secrets/kubernetes.io/serviceaccount/步骤 3用 SA Token 访问 API Serverkubectlexecreader-pod --sh-c TOKEN$(cat /var/run/secrets/kubernetes.io/serviceaccount/token) APISERVERhttps://kubernetes.default.svc curl -sk -H Authorization: Bearer $TOKEN $APISERVER/api/v1/namespaces/default/pods # 根据 SA 的 RBAC 权限可能会返回 pods 列表或被拒绝步骤 4解码查看 Token 内容kubectlexecreader-pod --sh-c cat /var/run/secrets/kubernetes.io/serviceaccount/token | cut -d. -f2 | base64 -d 2/dev/null | python3 -m json.tool 2/dev/null || echo 需要 python3 解码 步骤 5创建自定义 Token 并测试权限区别# 创建 Token无任何 RBAC 权限的 SATOKEN$(kubectl create token test-sa--duration1h)# 用这个 Token 尝试访问kubectl get pods--token$TOKEN21# 预期Error from server (Forbidden)步骤 6清理bashteardown.sh自检问题[基础]每个 Pod 默认能访问 API Server 吗能做什么操作[理解]为什么新版的 Projected Token 比旧的 Secret-based Token 更安全[应用]你发现 Pod 里的恶意容器正在用 SA Token 调用 API Server。除了删 Pod你能做什么来在架构层面减少这种风险查看答案能访问。每个 Pod 默认挂载了defaultServiceAccount 的 Token。但defaultSA 通常几乎没有任何 RBAC 权限——所以 Pod 能连上 API Server但验证身份后几乎所有操作都被拒绝。可以通过 RBAC 授予特定权限如文章 14 中的 readonly-sa。旧 Secret Token永不过期、不绑定 Pod、不支持 audience 限制——如果 Token 泄露攻击者可以永久使用它。新版 Projected Token① 1 小时后自动过期kubelet 自动续期泄露的 Token 很快失效② Token 绑定到特定 Podkubernetes.io.pod.uid其他 Pod 无法使用③ 支持audience字段——给外部的 Token 不能用于访问 API Server。① 遵循最小权限原则不要给 default SA 任何 RBAC 权限② 为每个应用创建专用 SA只给必要的权限③ 关闭不需要的automountServiceAccountTokenspec.automountServiceAccountToken: false④ 使用 NetworkPolicy 限制 Pod 到 API Server 的流量⑤ 启用审计日志监控异常的 API 调用。下一步Pod 的身份认证搞清楚了。接下来学习如何扩展 K8s 的 API 定义你自己的资源类型→ 27. Custom Resource 入门 本文来自 K8s Guide —— 开源免费的 Kubernetes 中文学习指南️ 初学者轨道 面试轨道从零基础到拿 Offer 一站式覆盖 每篇文章配套 Kind 实验脚本本地一键运行 本文源码docs/beginner/20-gateway-api.md⭐ 如果对你有帮助欢迎 Star github.com/callmebg/k8s-guide

相关新闻

GD32H7定时器输出比较与PWM模式详解:从原理到实战配置

GD32H7定时器输出比较与PWM模式详解:从原理到实战配置

1. 项目概述:从定时器到精准控制在嵌入式开发,尤其是电机控制、电源管理、LED调光这些领域,精准的时序控制是核心。你可能会遇到这样的需求:需要在一个精确的时刻翻转一个引脚的电平,或者生成一个频率和占空比都可调的…

2026/8/2 2:34:37 阅读更多
Python游戏存档系统开发实战:从数据模型到版本兼容性

Python游戏存档系统开发实战:从数据模型到版本兼容性

最近在开发一个游戏存档管理工具时,遇到了一个非常棘手的问题:如何高效、安全地处理游戏存档数据,特别是那些涉及复杂状态(如“极度困难”难度、“出道曲”成就、“珍爱”道具、“低卡位”资源)的存档。网上资料要么过…

2026/8/2 2:34:36 阅读更多
游戏模组制作实战:从脚本修改到武器配置的完整指南

游戏模组制作实战:从脚本修改到武器配置的完整指南

在游戏开发或模组制作领域,为经典游戏创作新的剧本、关卡或角色,是许多资深玩家和技术爱好者深入探索游戏机制、实现个人创意的常见方式。这个过程不仅需要对游戏引擎和资源文件有深刻理解,还需要具备一定的脚本编写、关卡设计和平衡性调整能…

2026/8/2 3:14:38 阅读更多
【计算机工具类-CI和CD工具Skills】aws-serverless 技能

【计算机工具类-CI和CD工具Skills】aws-serverless 技能

在AWS上构建生产就绪的无服务器应用程序的专门技能。涵盖Lambda函数、API Gateway、DynamoDB、SQS/SNS事件驱动模式、SAM/CDK部署和冷启动优化。 技能概述 aws-serverless 技能提供了在AWS上构建生产就绪的无服务器应用程序的专家模式和最佳实践。它涵盖了Lambda函数、API Ga…

2026/8/2 3:14:38 阅读更多
密码正则验证全链路实践:从安全原理到前后端实现

密码正则验证全链路实践:从安全原理到前后端实现

1. 项目概述:为什么密码验证远不止“8位”这么简单?“密码必须包含大小写字母、数字、特殊字符,且至少8位”——这个规则,几乎每个上网冲浪的人都见过。乍一看,它像是一道简单的数学题,组合一下字符集&…

2026/8/2 3:14:38 阅读更多
Java后端集成EasyNVR视频平台:SpringBoot对接API实战与优化

Java后端集成EasyNVR视频平台:SpringBoot对接API实战与优化

1. 项目概述与背景最近在做一个安防监控相关的项目,需要把分散在不同地点的网络摄像头视频流集中管理起来,并且要能通过我们自己的后台系统进行实时预览、录像回放和设备控制。市面上成熟的视频平台不少,但要么太贵,要么二次开发接…

2026/8/2 3:14:38 阅读更多
Jetson Orin Nano存储扩容实战:将/home迁移至reComputer

Jetson Orin Nano存储扩容实战:将/home迁移至reComputer

1. 项目缘起:为什么要把Orin Nano的/home挪到reComputer上?最近在折腾Jetson Orin Nano Developer Kit,这玩意儿性能是真不错,但有个老问题又冒出来了:内置的eMMC存储空间实在不够看。我装了几个开发环境,比…

2026/8/2 3:14:38 阅读更多
3分钟搞定!QQ空间历史说说完整备份终极指南

3分钟搞定!QQ空间历史说说完整备份终极指南

3分钟搞定!QQ空间历史说说完整备份终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想过,那些年发过的QQ空间说说,那些记录青春的文字…

2026/8/2 0:04:01 阅读更多
3分钟搞定!QQ空间历史说说完整备份终极指南

3分钟搞定!QQ空间历史说说完整备份终极指南

3分钟搞定!QQ空间历史说说完整备份终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想过,那些年发过的QQ空间说说,那些记录青春的文字…

2026/8/2 0:04:01 阅读更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是应用材料(Applied Materials)公司生产的一款用于半导体设备的I/O信号分配电路板。该型号(0100-02186)的核心特点如下:专用于Endura等半导体工艺腔室。集成信号路由与分配功能。连接控制…

2026/8/2 2:51:21 阅读更多
Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机是日本日清(Nissei)品牌的一款工业用三相异步电机,适用于自动化设备及通用机械驱动。该型号(FFMN-32L-10-T0 40AX)的核心特点如下:三相交流异步电动机。额定…

2026/8/2 2:52:49 阅读更多