kubernetes Authenticating(认证)

kubernetes 用户体系

所有Kubernetes集群都有两类用户:由Kubernetes管理的服务帐户和普通用户。

普通用户由外部独立服务管理。 管理员分发私钥,用户存储如Keystone或者用户名和密码列表的文件。 普通用户不能通过API调用添加到群集中。

相反,服务帐户是由Kubernetes API管理的用户。 它们绑定到特定的名称空间,并由API服务器自动创建或通过API调用手动创建。 服务帐户绑定到一系列存储为秘密的凭证,这些凭证安装在容器中,允许群集内进程与Kubernetes API对话。

kubernetes 认证策略

Kubernetes使用客户端证书,bearer tokens,身份验证代理或HTTP基本身份验证来通过身份验证插件对API请求进行身份验证。 由于向API服务器发出HTTP请求,插件会尝试将以下属性与请求关联:

用户名:标识最终用户的字符串。 常用值可能是kube-admin或[email protected]
UID:标识最终用户并尝试比用户名更一致和唯一的字符串。
组:一组将用户与一组常用用户关联的字符串。
额外字段:包含附加信息的字符串列表的字符串映射授权人可能会觉得有用。

X509 Client Certs
客户端证书身份验证通过将--client-ca-file = SOMEFILE选项传递给API服务器来启用。 引用的文件必须包含一个或多个证书颁发机构,用于验证呈现给API服务器的客户端证书。 如果提供并验证客户端证书,则使用主题的公用名称作为请求的用户名。 从Kubernetes 1.4开始,客户端证书还可以使用证书的组织字段来指示用户的组成员身份。 要为用户包含多个组成员身份,请在证书中包含多个组织字段。
例如

openssl req -new -key jbeda.pem -out jbeda-csr.pem -subj "/CN=jbeda/O=app1/O=app2"
//该命令行生成了jbeda-csr.pem证书,该证书是给用户jbeda进行颁发证书,该用户属于两个组织app1和app2

Static Token File

当在命令行上提供--token-auth-file = SOMEFILE选项时,API服务器从文件读取承载令牌。 目前,令牌持续无限期,并且无需重新启动API服务器即可更改令牌列表。

令牌文件是一个至少包含3列的csv文件:令牌,用户名,用户uid,后跟可选组名。 请注意,如果您有多个组,则该列必须使用双引号,例如

token,user,uid,"group1,group2,group3"

该认证策略只要是放在HTTP的HEADERS里
例如

Authorization: Bearer 31ada4fd-adec-460c-809a-9e56ceb75269

Bootstrap Tokens
为了允许为新集群提供简化的引导,Kubernetes包括一个名为Bootstrap Token的动态管理的Bearer标记类型。 这些令牌作为秘密存储在kube-system命名空间中,在那里可以动态管理和创建它们。 控制器管理器包含一个TokenCleaner控制器,可在引导令牌过期时删除引导令牌。
该类令牌必须符合正则表达式[a-z0-9]{6}.[a-z0-9]{16},并且由两个部分组成
token ID 和token secret,这种方式也是放在HEADERS里,例如

Authorization: Bearer 781292.db7bc3a58fc5f07e

使用必要条件

  1. 在api-server启动参数加--experimental-bootstrap-token-auth
  2. 在Controller Manager 启动参数添加--controllers=*,tokencleaner

Static Password File
该认证策略启用的方式--basic-auth-file=SOMEFILE,一旦启用密码就不能修改
是cvs文件,组成:password, user name, user id

password,user,uid,"group1,group2,group3"

使用

Authorization:Basic BASE64ENCODED(USER:PASSWORD)

Service Account Tokens

服务帐户是使用签名的承载令牌来验证请求的自动启用的验证器。 该插件需要两个可选标志:

--service-account-key-file包含用于签署持票人令牌的PEM编码密钥的文件。 如果未指定,则将使用API服务器的TLS私钥。
--service-account-lookup如果启用,将从API中删除的令牌将被撤销。

服务帐户通常由API服务器自动创建,并通过ServiceAccount准入控制器与集群中运行的Pod相关联。 承载令牌被安装到众所周知的位置,并允许群集内进程与API服务器通信。 帐户可以使用PodSpecserviceAccountName字段与Pod进行显式关联。

apiVersion: apps/v1 # this apiVersion is relevant as of Kubernetes 1.9
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default
spec:
  replicas: 3
  template:
    metadata:
    # ...
    spec:
      serviceAccountName: bob-the-bot
      containers:
      - name: nginx
        image: nginx:1.7.9

可以通过kubectl create serviceaccount (NAME)创建serviceaccount

服务帐户使用用户名系统进行身份验证:serviceaccount:(NAMESPACE):( SERVICEACCOUNT),并分配给组系统:serviceaccountssystem:serviceaccounts:(NAMESPACE)

end 还要更多内容,请前往Authenticating
参考
Authenticating

你可能感兴趣的:(kubetnetes)