相信大家在使用 kubeadm init 时,会发现在 /etc/kubernetes/pki 目录下生成一大堆证书文件;还有一些 k8s 插件在部署时,会创建 RBAC,这些都是为了 kubernetes 的安全而产生的。

  • K8S 安全控制框架主要有 3 个阶段进行控制,每一个阶段都支持插件方式,通过 API Server 配置来启用插件。
  1. Authentication(鉴权):鉴定访问集群的身份
  2. Authorization(授权):在确认身份的基础上,给定符合身份的权限
  3. Admission Control(准入控制):安检

以上用一个形象的例子来解释:一个访客要进入某某大厦,保安会问询是来干嘛的,找人/面试/工作,确认后会带你进入大厦,帮你刷门禁或者会给你一个临时访客卡,告诉你这个卡只能去哪里,不能去哪里。为了保证大厦的安全性,增加了红外线扫描,将会对你做全身的安检扫描,看你所做的行为是否合法。

  • 客户端想要访问 K8S 集群 API Server ,一般需要证书、Token或者用户名+密码;如果 pod 访问,需要 ServiceAccount

在用户操作集群过程中,如果被 3 个阶段的某一个给拦截,会输出表示没有该权限。

鉴权(Authentication)

用来判断访问者的身份,共支持 3 种身份

HTTPS 证书认证:基于 CA 证书签名的数字证书认证(kubectl 操作使用)

HTTP Token 认证:通过 Token 值来识别用户(程序访问时使用)

HTTP Base 认证:用户名+密码的方式认证(基本没在用)

授权(Authorization)

RBAC(Role-Based Access Control,基于角色的访问控制):负责完成授权工作

RBAC 根据API 请求属性,决定运行还是拒绝

比较常见的授权维度

  • user:用户名
  • group:用户分组
  • 资源:例如 pod/deployment…
  • 资源操作方法:get、list、delete、watch、set、update、create、patch
  • namespace:命名空间
  • apiGroups:API 组

准入控制(Admission Control)

Admission Control 实际上是一个准入控制器插件列表,发送到 API Server 的请求都需要经过这个列表中的每个准入控制器插件的检查,检查不通过,则拒绝请求。

关于 apiGroups 的说明

在之后的使用过程中,肯定会遇到使用 apiGroups ,因为当指定要给用户使用某资源的权限时,有的资源是在不同的分组的。apiGroups: [""],如果 apiGroups 为空,则代表核心组。

核心组中的资源有,namespace / node / pod等。

这里要说明的就是这么查看什么资源属于什么 api 组,在使用 yaml 文件创建和更改资源配置时,都要指定 apiVersion,这两者之间是有关系的,如 namespace / node / pod 这些资源 apiVersion 为 v1,deployments / daemonset / statefulsets 这些资源的 apiVersion 为 apps/v1。这就是因为它们所属的 apiGroup 不同,前者属于核心组,后者属于 apps 组。间接的可以理解为 带斜杠的就不属于核心组,如:apps/v1,batch/v1,networking.k8s.io/v1 等等。

查看方法如下:NAME 字段可作为填写 resources,APIVERSION 作为判断所属 apiGroup。

$ kubectl api-resources
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
...
namespaces                        ns           v1                                     false        Namespace
nodes                             no           v1                                     false        Node
persistentvolumeclaims            pvc          v1                                     true         PersistentVolumeClaim
persistentvolumes                 pv           v1                                     false        PersistentVolume
pods                              po           v1                                     true         Pod
...
daemonsets                        ds           apps/v1                                true         DaemonSet
deployments                       deploy       apps/v1                                true         Deployment
replicasets                       rs           apps/v1                                true         ReplicaSet
statefulsets                      sts          apps/v1                                true         StatefulSet
...
cronjobs                          cj           batch/v1                               true         CronJob
jobs                                           batch/v1                               true         Job
clusterrolebindings                            rbac.authorization.k8s.io/v1           false        ClusterRoleBinding
clusterroles                                   rbac.authorization.k8s.io/v1           false        ClusterRole
rolebindings                                   rbac.authorization.k8s.io/v1           true         RoleBinding
roles                                          rbac.authorization.k8s.io/v1           true         Role
...
storageclasses                    sc           storage.k8s.io/v1                      false        StorageClass
...

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0