在这里插入图片描述

Kubernetes 安全框架

Kubernetes(K8s)安全控制框架主要由以下三个阶段进行控制,每一个阶段都支持插件方式,通过API Server配置来启用插件:

  1. Authentication(鉴权):验证用户或系统组件的身份。
  2. Authorization(授权):确定已经鉴权的用户或系统组件是否有权限执行某个操作。
  3. Admission Control(准入控制):在对象被持久化到etcd之前对其进行修改或拒绝。

这些步骤确保只有经过认证和授权的请求才能访问和操作Kubernetes资源。

详细流程

  1. 客户端访问API Server:客户想要访问K8s集群的API Server,一般需要证书、Token或用户名+密码。如果访问Pod,则需要ServiceAccount。

  2. 认证(Authentication)

    • API Server接收到请求后,首先通过插件进行身份验证。
    • 例如,使用Token、证书或用户名+密码来验证。
  3. 授权(Authorization)

    • 鉴权通过后,API Server会检查该用户是否有权限执行所请求的操作。
    • 例如,用户是否有权限创建、删除或修改某个资源。
  4. 准入控制(Admission Control)

    • 最后一步是准入控制插件,这些插件可以对即将持久化的资源进行检查、修改或拒绝。
    • 例如,Pod的安全策略检查。
  5. 资源操作

    • 经过上述三步之后,请求才会被处理,对应的操作才会在集群中执行。

框架图解

  • kubectl, API, UI:这些是访问K8s API Server的工具。
  • /api/v1, /apis, /healthz, /logs, /swagger-ui, /metrics:API Server提供的不同接口。
  • Authentication, Authorization, Admission Control:三个主要安全控制阶段。
  • Pod, Controllers, Service, Storage:实际的K8s资源。
  • Etcd Cluster:K8s的后台存储,用于持久化集群状态。

Kubernetes API Server提供的三种客户身份认证方式:

  1. HTTPS 证书认证

    • 基于CA证书签名的数字证书认证(kubeconfig)
    • 用于确保客户端与服务器之间的通信安全,并验证客户端的身份。
  2. HTTP Token认证

    • 通过一个Token来识别用户(serviceaccount)
    • 适用于自动化进程或应用程序与Kubernetes交互时的身份验证。
  3. HTTP Base认证

    • 用户名+密码的方式认证(1.19版本弃用)
    • 较为简单的认证方式,但安全性相对较低,已在Kubernetes 1.19版本后被弃用。

Kubernetes 安全框架:授权 (Authorization)

基于角色的访问控制(RBAC, Role-Based Access Control)在Kubernetes中的授权过程:

  • RBAC:

    • 基于角色的访问控制,负责完成授权工作。
    • 根据API请求属性,决定允许还是拒绝请求。
  • 比较常见的授权维度

    1. user:用户名
    2. group:用户分组
    3. 资源:例如pod, deployment等
    4. 资源操作方法:get, list, create, update, patch, watch, delete等
    5. 命名空间:资源所在的命名空间
    6. API组:资源所属的API组

通过这些维度,RBAC系统可以精细地控制不同用户或组对集群资源的访问权限。

Kubernetes 安全框架:准入控制 (Admission Control)

准入控制(Admission Control)在Kubernetes中的作用和配置方法:

  • Admission Control

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

    • 启用一个准入控制器:
      kube-apiserver --enable-admission-plugins=NamespaceLifecycle,LimitRanger ...
      
    • 关闭一个准入控制器:
      kube-apiserver --disable-admission-plugins=PodNodeSelector,AlwaysDeny ...
      
  • 查看默认启用的准入控制器

    kubectl exec kube-apiserver-k8s-master -n kube-system -- kube-apiserver -h | grep enable-admission-plugins
    

通过配置和管理准入控制器,可以确保所有进入Kubernetes集群的请求都经过严格的审查和验证。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐