1 概述
访问集群的三个步骤
- 认证
- 鉴权/授权
- 准入控制
进行访问的时候,过程中都需要经过apiserver,apiserver做统一协调,比如门卫。
- 访问过程中需要证书、token、或者用户名 + 密码。如果访问pod需要serviceAccount。
2 认证:传输安全
传输安全:对外不暴露8080端口,只能内部方位,对外端口使用6443。
2.1 认证方式
客户端认证常用的方式:
- https证书认证,基于ca证书
- http token认证,通过token识别用户
- http基本认证,用户名+密码认证
3 鉴权(授权)
- 基于RBAC进行鉴权操作
- 基于角色访问控制
3.1 RBAC:基于角色的访问控制
3.1.1 角色
- role:特定命名空间访问权限
- ClusterRole:所有命名空间访问权限
3.1.2 角色绑定
- roleBinding:角色绑定到主体
- ClusterRoleBinding:集群角色绑定到主体
3.1.3 主体
- user:用户
- group:用户组
- serviceAccount:服务账号
3.1.4 鉴权演示相关操作
// 1 新建命名空间// 1.1 查看命名空间kubectl get nskubectl create ns nstest// 2 新建pod// 2.1 新建命名空间下名为nginx的podkubectl run nginx --image=nginx -n nstest// 2.2 查询命名空间下的podkubectl get pods -n nstest// 3 创建角色// 3.1 创建rbac-role.yaml 如3.1.4.1// 3.2 执行yaml文件kubectl apply -f rbac-role.yaml// 3.3 查询角色kubectl get role -n nstest// 4 创建角色绑定// 4.1 创建rbac-rolebinding.yaml 如3.1.4.2// 4.2 执行yaml文件kubectl apply -f rbac-rolebinding.yaml// 4.3 查询角色绑定kubectl get rolebinding -n nstest// 5 使用证书识别身份(在二进制中进行演示比较方便)// 5.1 创建证书(TODO)mkdir marycd mary...// 5.2 在新的用户中查询podkubectl get pods -n nstest
3.1.4.1 rbac-role.yaml
apiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata:namespace: nstestname: pod-readerrules:- apiGroups: [""]resources: ["pods"]verbs: ["get", "watch", "list"]
3.1.4.2 rbac-rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata:namespace: nstestname: read-podssubjects:- kind: Username: maryapiGroup: rbac.authorization.k8s.ioroleRef:- kind: Rolename: pod-readerapiGroup: rbac.authorization.k8s.io
4 准入控制
就是准入控制器的列表,如果列表有请求内容就通过,没有就拒绝。
