K8s:RBAC

K8s RBAC

1、作用
1、对不同namespace进行权限划分
2、鉴权、认证、准入控制。
2、鉴权流程
1、身份验证
	1.1、apiserver对kubectl或者客户端、dashboard进行鉴权
	1.2、检验:头部报文、证书、客户端证书、账号密码、token身份信息
	1.3、身份信息是否合法(不合法就报错401终止请求)
	
2、鉴权
	2.1、有没有执行动作权限:delete、get、
	2.2、如果没有权限(直接报错403终止请求)
	2.3、这一步的主要目的就是给不同的用户赋予不同的权限、权限的划分(只能看到自己namespace的pod)

3、准入控制(pod和ns级别的限制是否在准许范围之内)
	3.1、上面两个步骤都通过之后、
	3.2、只能看、不能删、
	3.3、检查控制器的权限、有没有配置LimitRange、
		比如kubelet有权限操作、通过LimitRange限制了最小值、创建操作成功、pod违反了限制条件、就会报错、禁止操作、拒绝创建,主要目的就是看有没有pod和ns级别的限制。


这几个步骤成功之后就实现交给deployment、replica-set、statefulset控制器等等开始创建pod
3、鉴权类型
鉴权模块:

	RBAC
	ABAC(基本不用)
	node
	webhook:http回调、发生事件时候进行通知回调。(需要添加证书、类似于Jenkins成功失败通知)

4、修改配置文件
find /  -name kube-apiserver.service
修改service配置文件、去定义使用什么鉴权类型
5、创建流程
user—————>关联role—————>关联权限——————(get、delete、update、)

关联关系: user和role和role-binding都必须在同一个ns

注意:绑定role角色的时候有两种方式: Role和ClusterRole

6、RBAC资源对象
四种资源对象:
Role				一组资源对象、用于定义访问k8s名称空间中的资源对象(就是namespace)
RoleBinding			
ClusterRole			定义一个用户、授权多个名称空间、包括集群资源(PV全局资源)
ClusterRoleBinding	
Role:
角色(Role)定义了一组允许的操作(verbs)对特定资源(resources)的权限。这些权限是针对某个特定的命名空间的。

RoleBinding:
角色绑定(RoleBinding)将角色与用户、服务账户或用户组关联起来,从而授予他们角色中定义的权限。

ClusterRole
创建集群角色(ClusterRole)(如果需要跨命名空间的权限)

ClusterRoleBinding
集群角色绑定(ClusterRoleBinding)将集群角色与用户、服务账户或用户组关联起来,授予它们集群角色中定义的权限。
7、绑定流程图

8、实战(授权一个用户+ns)
###查看资源

1、创建一个用户(magedu)
        kubectl create  serviceaccount  magedu(用户)  -n  magedu
		
		###查看创建的用户kubectl  get  sa  -n magedu

2、创建Role
	3.1、定义资源类型(什么类型的role)
	3.2、定于权限规则(只读和读写权限)(针对pod的和deployment)
				yaml文件
	3.3、查看 	kubectl  describe	role	magedu-role	 -n  magedu

3、role-binding(将规则和role绑定)
	3.1、目的:将规则和账号进行绑定
	3.2、

4、创建一个token
	5.1、定义toeken名称、
	5.2、属于哪个ns、
	5.3、在哪个账号上创建token

5、登录dashboard、查看(传递变量可以查看每个ns、权限不够没法看)


9、权限分配
1、希望看到service资源
kubectl api-resources

注意及重点:修改pod权限、pod和pods/exec权限划分明细点
10、做成kubeconfig认证文件
主要:

(1)签发证书
		1.1、编写json文件、签发证书(证书相关信息)magedu-csr.json
				注意:环境里面要有cfssl命令
		1.2、签发证书:指定公钥、CA的私钥、config文件、描述、指定信息文件csr、
				然后管道传递使用cfssljson命令查看证书信息
				find /   -name  ca-config.json
		1.3签发完成之后、主要就是公钥和私钥
(2)生成kubeconfig文件
		2.1、生产kubeconfig文件
			加入公钥、开启base64加密、apiserver地址、指定kubeconfig文件放到什么目录、

(3)设置客户端认证参数
	3.1、  设置证书、指定认证私钥和公钥、再加密、再加上一步骤生成的kubeconfig文件

(4)设置上下文参数(多集群使用上下文参数)
	4.1、设置集群名称、用户名、ns、kubeconfig文件
	4.2、执行完之后就有了、这个文件

实操:详细步骤

# ls magedu*
magedu-csr.json  magedu-key.pem  magedu-role-bind.yaml  magedu-role.yaml  magedu.csr  magedu.pem

2.3:生成普通用户kubeconfig文件:
# kubectl config set-cluster cluster1 --certificate-authority=/etc/kubernetes/ssl/ca.pem --embed-certs=true --server=https://172.31.7.188:6443 --kubeconfig=magedu.kubeconfig #--embed-certs=true为嵌入证书信息

2.4:设置客户端认证参数:
# cp *.pem /etc/kubernetes/ssl/
# kubectl config set-credentials magedu \
--client-certificate=/etc/kubernetes/ssl/magedu.pem \
--client-key=/etc/kubernetes/ssl/magedu-key.pem \
--embed-certs=true \
--kubeconfig=magedu.kubeconfig


2.5:设置上下文参数(多集群使用上下文区分)
https://kubernetes.io/zh/docs/concepts/configuration/organize-cluster-access-kubeconfig/

# kubectl config set-context cluster1 \
--cluster=cluster1 \
--user=magedu \
--namespace=magedu \
--kubeconfig=magedu.kubeconfig


2.5: 设置默认上下文
# kubectl config use-context cluster1 --kubeconfig=magedu.kubeconfig

2.7:获取token:
# kubectl  get secrets  -n magedu | grep magedu
# kubectl  describe   secrets magedu-token-8d897  -n  magedu
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IlYwMDNHdWJwTmtoaTJUMFRPTVlwV3RiVWFWczJYRHJCNkFkMGRtQWFqRTgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJtYWdlZHUiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoibWFnZWR1LXRva2VuLThkODk3Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Im1hZ2VkdSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjBlZmNiNGI0LWM3YTUtNGJkZS1iZjk4LTFiNTkwNThjOTFjNiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDptYWdlZHU6bWFnZWR1In0.SJHLgshKcGtIf-ycivn_4SWVRdWw4SuWymBVaA8YJXHPd5PYnwERVNtfUPX88nv-wXkCuZY7fIjGYkoYj6AJEhSPoG15fcmUPaojYeyjkQYghan3CBsZR8C12buSB6t5zCCt22GdG_ScZymxLU7n3Z0PhOzTLzgpXRs1Poqz4DOYylqZyLmW_BPgoNhtQYKlBH6OFzDe8v3JytnaaJUObVZCRxtI6x4iKLt2Evhs8XKfczqqesgoo61qTqtbU4jzlXuHeW7cUMhWoipUc-BkEdV6OtKWOetecxu5uB-44eTRHa1FBjnRMv9SEGj0hxTJCQ08ZNlP0Kc01JZlKXBGdQ


2.8:将token写入用户kube-config文件:


3.9:dashboard登录测试:
https://172.31.7.111:30002/#/login
11、总结
总结:1、最终权限由role去控制
	 2、cluster_role也是一样
	 3、创建相应的角色(Role或ClusterRole)和ServiceAccount,并将角色绑定到ServiceAccount上,以便在Kubernetes集群中控制资源访问权限。
posted @ 2024-08-16 18:21  姬高波  阅读(41)  评论(0)    收藏  举报