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 ns
kubectl create ns nstest
// 2 新建pod
// 2.1 新建命名空间下名为nginx的pod
kubectl run nginx --image=nginx -n nstest
// 2.2 查询命名空间下的pod
kubectl 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 mary
cd mary
...
// 5.2 在新的用户中查询pod
kubectl get pods -n nstest
3.1.4.1 rbac-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: nstest
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
3.1.4.2 rbac-rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
namespace: nstest
name: read-pods
subjects:
- kind: User
name: mary
apiGroup: rbac.authorization.k8s.io
roleRef:
- kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
4 准入控制
就是准入控制器的列表,如果列表有请求内容就通过,没有就拒绝。