所有Kubernetes集群都有两类用户:由Kubernetes管理的服务帐户和普通用户。
普通用户由外部独立服务管理。 管理员分发私钥,用户存储如Keystone或者用户名和密码列表的文件。 普通用户不能通过API调用添加到群集中。
相反,服务帐户是由Kubernetes API管理的用户。 它们绑定到特定的名称空间,并由API服务器自动创建或通过API调用手动创建。 服务帐户绑定到一系列存储为秘密的凭证,这些凭证安装在容器中,允许群集内进程与Kubernetes API对话。
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
使用必要条件
--experimental-bootstrap-token-auth
--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服务器通信。 帐户可以使用PodSpec
的serviceAccountName
字段与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)
,并分配给组系统:serviceaccounts
和system:serviceaccounts:(NAMESPACE)
。
end 还要更多内容,请前往Authenticating
参考
Authenticating