k8s认证和授权访问和控制
Kubernetes(简称K8s)在处理用户或程序对资源的访问时,主要依赖认证(Authentication)、授权(Authorization) 和 准入控制(Admission Control) 三个阶段。这三者是 K8s 安全机制的核心组成部分,下面我将用系统解释 + 通俗语言 + 实际例子的方式来讲清楚。
一、认证(Authentication)
系统解释:
认证是识别访问者“你是谁”的过程。Kubernetes 支持多种认证方式,检查请求中的身份信息(如 Token、证书、HTTP Basic 等)来判断这个请求来自哪个用户或服务账号。
常见认证方式:方式说明
X.509证书 用于kubectl 与 API server 通信时验证身份
静态Token文件 一个静态文件中列出用户名和Token
OpenID Connect (OIDC) 外部身份认证系统(如 GitHub 登录)
Webhook Token 请求转发到外部服务验证身份
ServiceAccount Token Pod 内部访问 API 的默认认证方式
通俗解释:
就像你进公司前得刷门禁卡,K8s 会问你:“你是谁?凭什么进来?”举个例子:开发人员用 kubectl执行命令访问 K8s API server,会附带他的 token,如果这个 token 无效,API Server 直接拒绝请求。
二、授权(Authorization)
系统解释:
授权是判断“你有没有权限做这件事”。认证之后,系统知道了你是谁,但还得验证你有没有权限做你要做的操作,比如删 Pod、查看 Secret 等。授权模式(K8s 支持以下几种):
模式 说明
RBAC(Role-Based Access Control) 最常用,基于角色控制权限
ABAC(Attribute-Based Access Control) 基于用户属性文件进行控制
Node Authorization 针对 kubelet 节点的特殊授权
Webhook Authorization 请求转发给外部服务判断是否允许
AlwaysAllow / AlwaysDeny 允许所有/拒绝所有,只用于测试
通俗解释:
就像你刷卡进了公司(认证成功),但你想进财务部机房(权限高),保安会查你的权限卡——你没权限,就不让进。
举个例子:
小王是开发组,只被分配了查看部署状态的权限(通过RBAC配置)。他尝试删除一个 Pod,系统提示:Permission Denied。
三、准入控制(Admission Control)
系统解释:
准入控制是在认证和授权之后,决定是否“接纳”请求进入系统的过程。即便你身份没问题、权限也够,系统还会进一步检查请求是否满足某些策略,比如命名空间限制、安全上下文设置、资源配额等。
准入控制器类型:
类型 作用
NamespaceLifecycle 禁止在已删除的命名空间中创建资源
LimitRanger 强制资源使用必须在某个范围内
PodSecurity(v1.25+) 根据安全级别限制Pod
ResourceQuota 强制资源配额限制
ValidatingAdmissionWebhook 调用外部接口验证请求
MutatingAdmissionWebhook 可以修改请求内容(如自动注入Sidecar)
通俗解释:
好比你进了公司(认证)且有权限进机房(授权),但公司政策规定进机房必须穿静电服、不能带水杯(准入控制检查),你得满足这些附加条件才行。
举个例子:
你想创建一个 Pod 占用 10G 内存,而命名空间设置的 ResourceQuota 只允许每个 Pod 使用最多 2G。这个请求就会被准入控制器拦下来。
总结一张图:
请求 -->认证 --> 授权 --> 准入控制 --> 真正执行操作
四、三者之间的对比小结
阶段 目的 典型机制 不通过时会怎样
认证 你是谁? Token、证书、OIDC 等 401Unauthorized
授权 你能干啥? RBAC、ABAC、Webhook 403 Forbidden
准入控制 你干这事合规吗? ResourceQuota、PodSecurity 400 BadRequest 或被拒绝创建

浙公网安备 33010602011771号