第九章 k8s集群安全机制 - 认证(1)
1. 认证机制基础定位
K8s集群安全机制分为「认证、鉴权、准入控制」三个核心步骤,本小节重点讲解第一步:认证,即验证请求方是否为合法身份。
2. 常见认证方式
2.1 Token认证
- Token是经过特殊编码的长字符串,复杂度越高安全性越强,本质仍为字符串类型。
- 每个Token唯一对应一个用户,存储在etcd的指定文件中。
- 用户发起API调用时,需在请求头中携带对应的Token值。
- API Server收到请求后会校验Token对应的用户身份,若Token为空或不存在于存储文件中,直接拒绝请求。
2.2 HTTP Basic认证
- 将用户名和密码通过Base64编码后,放置在请求头的认证域中发送给服务端。
- 服务端收到请求后解码,校验用户名和密码的对应关系是否合法。
- 相比Token认证,安全性更高。
2.3 双向HTTPS证书认证
- 基于CA证书签发的客户端身份认证方式,属于金融级安全方案,是当前安全领域的顶尖实现,常见于银行ATM转账等对安全性要求极高的场景。
- 核心依赖CA架构:CA作为第三方信任机构,客户端和服务器端都需向CA申请证书,通信时双方互换证书完成身份验证。
HTTPS认证分类
单向HTTPS认证
- 仅客户端验证服务器端的资质,日常访问百度等公开网站均属于单向HTTPS场景。
- 完整通信流程:
- 客户端发起请求,携带自身支持的TLS版本和随机数。
- 服务器端选择双方都支持的TLS版本,返回公钥/证书。
- 客户端验证证书的可信度,若不可信则浏览器会弹出安全风险提示。
- 客户端发送自身支持的对称加密算法列表。
- 服务器端从列表中选择一种对称加密算法返回给客户端。
- 客户端生成随机对称密钥,通过服务器端的公钥加密后发送给服务端。
- 服务器端使用私钥解密,得到对称加密密钥。
- 后续所有通信均使用该对称密钥和选定的对称加密算法进行加密传输。
双向HTTPS认证
- 客户端和服务器端需要互相验证身份,安全性远高于单向HTTPS。
- 典型应用场景:ATM机与银行数据中心的通信。
- 银行卡中存储了用户的公钥和CA证书,插入ATM机后,ATM机读取银行卡中的公钥发送给银行数据中心,数据中心同时返回自身的公钥。
- 双方验证对方身份合法后,才会执行后续取款操作:用户输入取款金额,数据中心完成扣款后ATM机吐钞,避免第三方攻击导致的资金损失。
- K8s的API Server采用双向HTTPS证书认证实现安全通信。
3. K8s集群组件访问API Server规则
K8s集群的内置组件和插件均需要访问API Server,包括kubelet、kube-controller-manager、kube-scheduler、kube-proxy、CoreDNS、Ingress Controller等。
注意:K8s默认组件即使以Pod形式运行,其安全机制仍按组件级通信规则计算,不会因为运行形态是Pod就改变认证逻辑。
3.1 加密访问判定规则
无需加密的场景
- 仅适用于基于kubeadm安装的集群:kube-controller-manager、kube-scheduler与API Server部署在同一台Master节点,通过127.0.0.1回环接口访问API Server的非安全端口,无需加密。
- 注意:若为二进制/源码包方式安装的集群,上述三个组件不一定与API Server在同一台机器,必须通过安全端口加密访问。
必须加密的场景
以下三类组件/工具必须通过HTTPS加密访问API Server:
- kubelet:运行在Node节点,与Master节点不在同一台机器。
- kube-proxy:运行在每个Node节点,无法保证与API Server同机。
- kubectl:命令行管理工具,可部署在任意能访问API Server公网地址的机器,不一定在Master节点。
3.2 证书签发规则
K8s集群的证书签发分为两种方式:
手动签发
- 需要人工执行命令完成证书签发动作。
- 除kubelet外的所有组件如果需要使用证书,原则上都需要手动签发。
自动签发
- 仅kubelet支持自动签发证书。
- 原因:节点执行
kubeadm join命令加入集群时,kubeadm已经完成了节点身份的校验,信任该节点的合法性,因此自动为其签发证书。每个Node节点都需要执行kubeadm join命令才能加入集群组建集群。 - 认知误区澄清:很多使用kubeadm安装集群的用户从未手动签发证书,误以为K8s原生支持自动签发,实际上master组件的证书是kubeadm工具代为完成签发的,并非K8s本身的能力,类似“富豪家的孩子认为大米天生是熟饭,实际是有人提前完成了煮饭的工作”,不要混淆工具自动化能力和原生能力的区别。
AI 总结
本小节系统讲解了Kubernetes集群认证机制的核心内容:首先介绍了Token、HTTP Basic、双向HTTPS证书三种常见认证方式的原理与差异;其次详细拆解了HTTPS单向/双向认证的完整流程,结合ATM机场景说明了双向认证的金融级安全特性;然后明确了K8s集群各组件访问API Server的加密判定规则,区分了kubeadm安装集群下同机组件无需加密、跨机组件必须加密的差异;最后讲解了证书的手动/自动签发逻辑,澄清了kubeadm代为完成证书签发的常见认知误区,为后续深入学习K8s集群安全机制奠定了理论基础。