12、k8s安全机制
k8s作为一个分布式的微服务管理系统,保证集群安全是一个非常重要的任务。
核心:api-server
我们围绕集群权限的设置,其实就是设置api-server的权限。
创建权限步骤
围绕api-server的权限,分为三个步骤:
1、认证——创建server-account账号
- token:api-server私钥签名的字符串序列号,用于访问api-server,server端的认证。
- ca.crt:ca根证书,用于客户端验证api-server发送的证书。
- namespace:api-server办法的token来使用指定的命名空间。
认证只是确认双方的通信是可信的,在此基础上建立通信连接。
2、鉴权
确定请求对方集群的资源的权限。
RBAC:基于角色的访问控制。
k8s1.6之后,默认的鉴权方式:
- 对集群中的资源(pod,deployment,service)和非资源(元信息和资源状态)都可以进行完整的覆盖,无需重启api-server。
鉴权的主体
(1)角色:
- role:授权指定命名空间的资源控制的权限
- ClusterRole:可以对所有命名空间的资源的控制权
(2)角色绑定:
- RoleBinding:把角色绑定到主体(命名空间)
- ClusterRoleBinding:将集群角色绑定到主体(所有命名空间)
(3)主体的对象:
- uer:用户
- namespace:命名空间
- group:用户组
- serviceAccount:服务账号
3、准入控制
每一个对于api-server的请求都会有一个准入控制器插件的列表,发送到api-server的请求都会进过准入控制器插件的检查,检查不通过,请求会被拒绝。
官方自带请求控制器:
LimitRaner:
resourcequota:
namespacelifecycle:命名空间的回收机制
实操
创建一个用户,访问指定的命名空间,权限的设置和修改
1、准备一个账号和三个密钥文件
2、生成证书
签发证书
cfssl gencert -ca=ca.crt -ca-key=ca.key -profile=kubernetes /opt/yaml/anquan/lucky-csr.json | cfssljson -bare lucky
3、设置认证配置文件
4、设置鉴权配置文件
如果想要给用户添加使用namespace的权限,需要额外添加。
5、传参运行认证配置文件
使用上下文文件
- 注意:上面的cp是错误的,正确的是cp lucky.kubeconfig /home/lucky/.kube/config
最后运行鉴权yaml文件即可实现lucky用户的k8s权限