一. 前言

Kubernetes集群有两类用户:由Kubernetes管理的Service Accounts (服务账户)和(Users Accounts) 普通账户/用户;前者由Kubernetes进行管理,主要用于pod;后者由外部应用进行管理,主要是人。
在安全方面,Kubernetes通过一系列机制来实现集群的安全控制,其中包括API Server的认证授权、准入控制机制及保护敏感信息的Secret机制等。
Kubernetes集群中所有资源的访问和变更都是通过Kubernetes API Server的REST API来实现的,所以集群安全的关键点就在于如何识别并认证客户端身份(Authentication),以及随后访问权限的授权(Authorization)这两个关键问题,本篇主要梳理下客户端身份认证的相关知识点。

二. 认证流程

Kubernetes集群提供了3种级别的客户端身份认证方式,其中最严格的是HTTPS证书认证,即基于CA根证书签名的双向数字证书认证方式,认证流程如下图:
在这里插入图片描述

一般企业内部系统,无需向CA机构申请证书,自行产生自签名的CA根证书即可,后续的客户端证书&服务端证书都由此根CA签名。

三. 用户和用户组的识别

在上一篇的二进制部署中,产生了大量的X509证书用户客户端和服务端的身份认证,在Kubernetes集群中,证书内容中的通用名称(common name)CN被当作请求的用户名,O当作用户组,如下图
证书请求文件:
在这里插入图片描述

证书内容:
在这里插入图片描述

四. 权限的分配

看下图,k8s中资源及对应的权限是通过角色定义的,用户(用户组&服务账号)的权限通过绑定相应的角色实现。
在这里插入图片描述

五. 默认用户&用户组

按照k8s的系统架构,如果用户/用户组没有绑定相应的角色,是没有对应资源的权限的,但是,k8s中默认绑定了一些用户和组,如果证书中CN&O正好是这些默认值,那么默认拥有相关权限,见下图:
在这里插入图片描述

Logo

开源、云原生的融合云平台

更多推荐