K8S的安全机制

安全机制:

K8S的安全机制,分布式集群管理工具,就是容器编排

安全机制的核心:API SERVER作为整个集群内部通信的中介,也是外部控制的入口。所有的安全机制都是围绕API SERVER来进行设计

请求API资源:

1、认证

2、鉴权

3、准入机制

三个条件都通过,才可以在K8S集群当中创建

一、认证:Authentcation

HTTP TOKEN:通过token识别合法用户。token是一个很长,很复杂的一个字符串,字符串是用来表达客户的一种方式。

每一个token对应一个用户名,用户名存储在apiserver能够访问的文件中

客户端发起请求时,http header包含touken

客户端发起请求 ----- token ----- apiserver(用户名存储文件) ----- 解码 ----- 用户名 -----访问集群

② http base:用户+密码的验证方式。用户名和密码都是通过base64进行加密。加密完成的字符串,http request的header Atuthorization发送给服务端,服务端收到加密字符串,解码,获取用户和密码,验证通过,登陆成功

③ https 证书:最严格的方式,也是最严谨的方式。基于CA根证书签名的客户端身份进行验证

认证的访问类型:

① K8S组件对api server组件的访问

kubelet kube-proxy:controller  manager  scheduler与api server在一台服务器,可以直接使用api server的非安全端口访问(8080端口)

② pod对api server的访问

pod coredns dashborad都是pod,也需要访问api

③ 客户端 kubectl

kubelet kube-proxy:controller  manager  scheduler与api server在一台服务器,可以直接使用api server的非安全端口访问(8080端口)

kubectl kubelet kube-proxy 都是通过apiserver的https证书,进行双向验证,都是用6443端口进行验证

签发证书:

1、手动签发 

二进制部署就是手动签发证书,CA签发.--.--把证书配到每个对应组件。然后访问6443即可

2、自动签发 

kubeadm,kubelet第一次访问api server使用token,token通过之后,controller manager会为kubelet生成一个证书,以后都是通过证书访问。kubeadm修改了证书的有效期。默认1年

3、kubeconfig

文件包含集群的参数,CA证书,API server地址,客户端的参数(客户端的证书和私钥),集群的名称和用户名。

k8s组件通过启动时指定访问不同的kubeconfig,可以访问不同的集群----- api server ----- namespace ----- 资源对象 ----- pod ----- 容器

kubeconfig即是集群的描述文件,也是一个集群信息的保存文件,包含了集群的访问方式和认证信息。

~/.kube/config 保存的是kubectl的访问认证信息

4、serviceAccount

serviceAccount就是为了方便pod中的容器访问API server。pod的动作(增删改查)动态的,每个pod手动生成一个证书就不现实了

K8S使用了service Account来进行循环认证,service Account里面包含了统一的认证信息,直接进行api server访问。

5、secret保存资源对象

serviceAccount内部,保存的token

service-account-tokensecret保存的是自定义的保密信息

6、serviceAccount

① token

② ca.crt

③ namespace

都会被自动挂载到pod中

二、鉴权

之前的认证过程,只是确认了双方都是可信的,可以相互通信的,鉴权是为了确定请求方的访问权限

能做哪些指定的操作

① AlwaysDeny 拒绝所有(一般是测试用)

② AlwaysAllow 允许所有(用于测试)

③ ABAC 【attribute-based access control】 基于属性的访问控制

④ webhook  外部访问集群内部的鉴权方式

⑤ RBAC 【role-base access control】  基于角色的访问控制,也是k8s现在默认的规则机制。

角色:

role  指定命名空间的资源控制权限

rolebinding  将角色绑定到指定的命名空间

集群

clusterrole  可以授权所有命名空间的资源控制权限

clusterrolebinding  将集群的角色绑定到指定的命名空间

准入控制器:

准入控制是APl server的一个准入控制器的插件列表,不同的插件可以实现不同的准入控制机制。一般情况下建议使用官方默认的准入控制器

① limitranger  命名空间的配额管理

② serviceAccount

③ resourceQuota  命名空间的配置限制

三、实验

实现不同用户管理自己的命名空间

第二块:日常工作中需要注意的点

1、每个项目基本上都一个独立的命名空间,创建控制器时,一定要加上命名空间

2、创建pod时一定要做资源限制 limits

3、命名空间管理,配额资源

12个CPU 10G

5个命名空间

4\既要考虑业务的并发,又要考虑资源的扩缩容

5、进入现场,工作场地,切记不要拍照!!!!!

6、增和查无所谓,但是改和删一定要报备。pod的资源未必都是基于控制器创建的

7、发布,发布之前,开发会把部署好的,写好的yaml文件发给你。

开发用的是开发的环境,命名空间,镜像仓库的地址都不一致。改成匹配的环境

8、工作中基本上都是图形化操作

你可能感兴趣的:(kubernetes,安全,容器)