Kubernetes 集群安全机制
1.Api-server
Kubernetes api-server 安全访问机制当我们访问 K8S 集群时,都需要经过 apiserver【 apiserver 做统一协调】,每个请求到达 apiserver 需要经过三个安全关卡:
① 认证
② 鉴权
③ 准入控制
- 访问过程中,需要证书、token、或者用户名和密码
- 如果访问 pod 需要 serviceAccount
1、认证
对外不暴露 8080 端口,只能内部访问,对外使用的端口 6443
客户端身份认证常用方式
- https 证书认证,基于 ca 证书
- http token 认证,通过 token 来识别用户
- http 基本认证,用户名 + 密码认证
2、鉴权
基于 RBAC 进行鉴权操作
基于角色访问控制
3、准入控制
就是准入控制器的列表,如果列表有请求内容就通过,没有的话 就拒绝
2.TLS
Kubernetes 认证方式之客户端证书(TLS)
客户端证书(TLS)认证方式,也叫 HTTPS 双向认证。一般我们访问一个 https 网站,认证是单向的,只有客户端回验证服务端的身份,服务端不会管客户端身份如何
3.RBAC 介绍
Kubernetes 授权方式之 RBAC 基于角色的访问控制,为某个角色设置访问内容,然后用户分配该角色后,就拥有该角色的访问权限k8s 中有默认的几个角色
- role:特定命名空间访问权限
- ClusterRole:所有命名空间的访问权限
角色绑定
- roleBinding:角色绑定到主体
- ClusterRoleBinding:集群角色绑定到主体
主体
- user:用户
- group:用户组
- serviceAccount:服务账号
4.RBAC 鉴权
1、创建命名空间
1 | 查看已经存在的命名空间 |
2、命名空间内创建 Pod
如果不创建命名空间,Pod 默认在 default
1 | kubectl run nginx --image=nginx -n webServer |
3、创建角色
通过 rbac-role.yaml 进行创建
tips: 这个角色只对 pod 有 get 和 list 权限
1 | cat > rbac-role.yaml << EOF |
通过 yaml 创建 role
1 | 创建 |
4、创建角色绑定
通过 rbac-rolebinding.yaml 的方式,来创建我们的角色绑定
1 | cat > rbac-rolebinding.yaml << EOF |