k8s的安全机制

1、k8s:分布式集群管理工具,就是容器编排

2、安全机制的核心:api-service

(1)api-server作为整个集群内部通信的中介,也是外部控制的入口,所有的安全机制都是围绕api-server来进行设计的
(2)请求api资源:3个条件都通过才可以在k8s集群中创建
①认证
②鉴权(赋权)
③准入机制

3、认证(authentcation)

(1)http token:通过token实现识别合法用户
①token:很长,很复杂的一个字符串,字符串是用来表达客户的一种方式
②每一个token都对应一个用户名,用户名存放在api-server能够访问的文件中
③当客户端发起请求时,http header中包含token
④客户端发起请求——token——apiserver(用户名存储文件)——解码——用户名——访问集群
(2)http base:用户名+密码的验证方式
①用户名和密码都是通过base64的方式进行加密,加密完成的字符串,放在http request的header authorization发送给服务端,服务端收到加密的字符串,解码,获取用户名和密码,验证通过,登录成功
(3)https证书:最严格、最严谨的方式,基于CA根证书签名的客户端身份进行验证

4、认证的访问类型

(1)k8s组件对apiserver的访问(kubelet、kube-proxy)
(2)pod对apiserver的访问(pod coredns、dashborad都是pod,也需要访问api)
(3)客户端访问(kubectl命令)

5、k8s组件对apiserver的访问(kubelet、kube-proxy)

(1)controller-manager-scheduler与apiserver在一台服务器,可以直接使用apiserver的非安全端口访问(8080端口)
(2)kubelet、kube-proxy都是通过apiserver的https证书,进行双向验证,都是用6443端口进行验证

6、签发证书

(1)手动签发:二进制部署就是手动签发证书,(CA签发:把证书匹配到每个对应组件,访问6443即可)
(2)自动签发:kubeadm(kubelet第一访问apiserver使用token,token通过了后,controller-manager会为kubelet生成一个证书,以后都是通过证书访问)kubeadm修改了证书的有效期,默认1年
(3)kubeconfig:kubeconfig文件包含了集群的参数,CA证书、apiserver地址、客户端的参数(客户端的证书和私钥)、集群的名称和用户名
①k8s组件通过启动时指定访问不同的kubeconfig,可以访问不同的集群——apiserver——namespace——资源对象——pod——容器
②kubeconfig既是集群的描述文件,也是一个集群信息的保存文件,包含了集群的访问方式和认证信息
③~/.kube/config:保存的是kubectl的访问认证信息

(4)serviceaccount:serviceaccount就是为了方便pod中的容器访问apiserver
①pod的动作(增删改查)动态的,为每个pod手动生成一个证书不现实,所以k8s使用了service account来进行循环认证,serviceaccount里面包含了统一的认证信息,直接进行apiservice访问
②serviceaccount内部保存的token,service-account-token
③secret保存的是自定义的保密信息
④serviceAccount的保存信息:token、ca.crt、namespace都会被自动的挂载到pod中

7、鉴权

(1)之前的认证过程,只是确认了双方都是可信的,可以互相通信,鉴权是为了确定请求方的访问权限(能做哪些指定的操作)

alwaysDeny

拒绝所有,一般是测试

alwaysAllow

允许所有,用于测试

ABAC

attribute-based-access-control,基于属性的访问控制

webhook

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

RBAC

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

①角色:role—指定命名空间的资源控制权限

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

②集群:clusterrole—可以授权所有命名空间的资源控制权限

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

8、准入控制

(1)准入控制:是apiserver的一个准入控制器的插件列表,不同的插件可以实现不同的准入控制机制,一般情况下,建议使用官方默认的准入控制器
①limitranger、serviceaccount命名空间的配额管理
②resourcequota:命名空间的配额限制

9、实例:实现不同用户管理自定的命名空间

(1)创建用户

(2)上传证书
chmod +x /usr/local/bin/cfssl*

(3)创建根证书

chmod +x user-cert.sh
./user-cert.sh

(4)生成CA的根证书
cfssl gencert -ca=ca.crt -ca-key=ca.key -profile=kubernetes /opt/lucky/lucky-csr.json | cfssljson -bare lucky

(5)鉴权
①创建命名空间lucky-cloud

②创建鉴权文件

chmod +x rbac-kubeconfig.sh
./rbac-kubeconfig.sh 20.0.0.71

③使用上下文参数生成lucky.kubeconfig文件
kubectl config use-context kubernetes --kubeconfig=lucky.kubeconfig

④复制lucky.kubeconfig文件
mkdir /home/lucky/.kube
cp lucky.kubeconfig /home/lucky/.kube/config
chown -R lucky:lucky /home/lucky/.kube/

(6)rbac授权
①绑定角色

②创建pod

③切换用户:实现指定用户只能在指定命名空间查看pod的情况

④测试

⑤自定义修改权限

相关推荐

  1. K8S安全机制

    2024-01-25 18:28:04       60 阅读
  2. K8s-安全机制

    2024-01-25 18:28:04       38 阅读
  3. k8s安全机制

    2024-01-25 18:28:04       53 阅读
  4. K8S安全机制

    2024-01-25 18:28:04       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-25 18:28:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-25 18:28:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-25 18:28:04       82 阅读
  4. Python语言-面向对象

    2024-01-25 18:28:04       91 阅读

热门阅读

  1. Spring-注解开发

    2024-01-25 18:28:04       61 阅读
  2. ChatGPT 和文心一言哪个更好用?

    2024-01-25 18:28:04       60 阅读
  3. Abaqus许可分析方法

    2024-01-25 18:28:04       60 阅读
  4. leetcode-200-岛屿问题

    2024-01-25 18:28:04       62 阅读
  5. Vue3生命周期和Vue2生命周期对比

    2024-01-25 18:28:04       61 阅读
  6. C语言之初级指针

    2024-01-25 18:28:04       59 阅读