概述
当我们访问 K8S 集群时,需要经过三个步骤完成具体操作
- 认证
- 鉴权【授权】
- 准入控制
进行访问的时候,都需要经过 apiserver, apiserver 做统一协调,比如门卫
- 访问过程中,需要证书、token、或者用户名和密码
- 如果访问 pod 需要 serviceAccount
认证
对外不暴露 8080 端口,只能内部访问,对外使用的端口 6443
客户端身份认证常用方式
- https 证书认证,基于 ca 证书
- http token 认证,通过 token 来识别用户
- http 基本认证,用户名 + 密码认证
鉴权
基于 RBAC 进行鉴权操作
基于角色访问控制
准入控制
就是准入控制器的列表,如果列表有请求内容就通过,没有的话 就拒绝
RBAC 介绍
基于角色的访问控制,为某个角色设置访问内容,然后用户分配该角色后,就拥有该角色的访问权限
k8s 中有默认的几个角色
- role:特定命名空间访问权限
- ClusterRole:所有命名空间的访问权限
角色绑定
- roleBinding:角色绑定到主体
- ClusterRoleBinding:集群角色绑定到主体
主体
- user:用户
- group:用户组
- serviceAccount:服务账号
RBAC 实现鉴权
- 创建命名空间
创建命名空间
我们可以首先查看已经存在的命名空间
1 | kubectl get namespace |
然后我们创建一个自己的命名空间 roledemo
1 | kubectl create ns roledemo |
命名空间创建 Pod
为什么要创建命名空间?因为如果不创建命名空间的话,默认是在 default 下
1 | kubectl run nginx --image=nginx -n roledemo |
创建角色
我们通过 rbac-role.yaml 进行创建
tip:这个角色只对 pod 有 get、list 权限
然后通过 yaml 创建我们的 role
1 | # 创建 |
创建角色绑定
我们还是通过 role-rolebinding.yaml 的方式,来创建我们的角色绑定
然后创建我们的角色绑定
1 | # 创建角色绑定 |
使用证书识别身份
我们首先得有一个 rbac-user.sh 证书脚本
这里包含了很多证书文件,在 TSL 目录下,需要复制过来
通过下面命令执行我们的脚本
1 | ./rbac-user.sh |
最后我们进行测试
1 | # 用get命令查看 pod 【有权限】 |
发布时间: 2021-01-13
最后更新: 2024-06-24
本文标题: Kubernetes学习之集群安全机制
本文链接: https://blog-yilia.xiaojingge.com/posts/19429128.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
