Kubernetes 安全机制
Kubernetes 安全框架 API 认证三关
访问 K8S 集群的资源需要过三关:认证、鉴权、准入控制
普通用户进行访问的时候,都需要经过 apiserver, apiserver 做统一协调,比如门卫
- 访问过程中,需要证书、token、或者用户名和密码
- 如果访问 pod 需要 serviceAccount
K8S 安全控制框架主要由下面 3 个阶段进行控制,每一个阶段都支持插件方式,通过 API Server 配置来启用插件。
- Authentication(认证)
- Authorization(授权)
- Admission Control(准入控制)
查看ServiceAccount
1 |
|
认证
对外不暴露 8080 端口,只能内部访问,对外使用的端口 6443
客户端身份认证常用方式
- https 证书认证,基于 ca 证书。
- http token 认证,通过 token 来识别用户。
- http 基本认证,用户名 + 密码认证。
授权
RBAC(Role-Based Access Control,基于角色的访问控制):负责完成授权(Authorization)工作。
准入控制
Adminssion Control 实际上是一个准入控制器插件列表,发送到 API Server 的请求都需要经过这个列表中的每个准入控制器。
插件的检查,检查不通过,则拒绝请求。
1.11 版本以上推荐使用的插件:
1 |
|
RBAC 核心概念
RBAC(Role-Based Access Control,基于角色的访问控制),允许通过 Kubernetes API 动态配置策略。
k8s 中有默认的几个角色
- Role:授权特定命名空间的访问权限
- ClusterRole:授权所有命名空间的访问权限
角色绑定
- RoleBinding:将角色绑定到主体(即subject)
- ClusterRoleBinding:将集群角色绑定到主体
主体(subject)
- User:用户
- Group:用户组
- ServiceAccount:服务账号
RBAC 实现鉴权
1、创建命名空间
首先查看已经存在的命名空间
1 |
|
然后我们创建一个自己的命名空间 roledemo。
为什么要创建命名空间?因为如果不创建命名空间的话,默认是在 default 下。
1 |
|
2、命名空间创建Pod
1 |
|
3、创建角色
1 |
|
tip:这个角色只对 pod 有 get、list 权限
然后通过 yaml 创建我们的role
1 |
|
4、创建角色绑定
1 |
|
然后创建我们的角色绑定
1 |
|
5、使用证书识别身份
我们首先得有一个 rbac-user.sh 证书脚本
这里包含了很多证书文件,在TSL目录下,需要复制过来
通过下面命令执行我们的脚本
1 |
|
最后我们进行测试
1 |
|
Kubernetes 安全机制
https://flepeng.github.io/042-云原生-02-kubernetes-31-核心概念-Kubernetes-安全机制/