当设置产品Kubernetes集群的时候,认证和受权是两个很重要的基本需求。在这篇文章中,让咱们来浏览一些细节,这些细节能够帮助Kubernetes环境作好方案。html
好比说,你如今已经引起了经过输入yaml文件到kubectl(kubectl create-f pod.yaml)建立POD的命令。这个命令被发送到有安全保障的api-server端口(http://),而后身份验证流就开始生效了。注意,若是你正在为api-server使用不安全的端口(http://),那么验证就没法应用。(http://)理想状况下生产环境设置中应该避免不安全端口(http://)。api
如下是这篇文章中会提到的在Kubernetes中可以使用的验证途径。安全
客户证书验证url
为了使用这个方案,api-server须要用-client-ca-file=<PATH_TO_CA_CERTIFICATE_FILE>选项来开启。版本控制
CA_CERTIFICATE_FILE确定包括一个或者多个认证中心,能够被用来验证呈现给api-server的客户端证书。客户端证书的/CN将做为用户名。server
基于令牌的身份验证htm
为了使用这个方案,api-server须要用-token-auth-file=<PATH_TO_TOKEN_FILE>选项来开启。TOKEN_FILE是个csv文件,每一个用户入口都有下列格式:token,user,userid,group。对象
Group的名字是随意的。token
令牌文件的例子:资源
生成tokens的一个很是简单的方法就是运行如下命令:
基于令牌的身份验证面临的挑战就是,令牌是无期限的,并且对令牌清单作任何的修改都须要从新启动api-server。
基本认证
为了使用这个方案,api-server须要使用-basic-auth-file=<PATH_TO_HTTP_AUTH>选项来开启。HTTP_AUTH_FILE是个csv文件,每一个用户入口都有下列格式:password,user name,userid。目前,对AUTH_FILE的任意修都须要从新启动api-server。
Open ID
Open ID支持也是可用的,可是还在试验阶段。
Keystone
Keystone支持也是可用的,可是还在试验阶段。若是你想要将keystone跟LDAP或者动态目录服务整合到一块儿,那么就要使用keystone认证方法。为了使用这个方案,api-server须要用-experimental-keystone-url=<KEYSTONE_URL>选项来开启服务。
验证成功以后,下一步就是找出对于验证用户来讲,哪些操做是容许的。目前来说,Kubernetes支持4种验证策略方案。api-server须要使用-authorization-mode=<AUTHORIZATION_POLICY_NAME>选项来开启。
始终否定
这个策略否定全部的请求。
始终容许
这个策略容许全部的请求。
基于属性的访问控制
ABAC容许灵活的用户特定受权策略。当使用-authorization-policy-file=<PATH_TO_ABAC_POLICY_FILE>选项开启api-sever的时候,ABAC的策略文件须要指定。目前,对策略文件有任何的修改都须要重启api-server。
ABAC策略文件样本以下所示:
在以上例子中,策略文件中的每一行都是JSON对象,且指定一个策略。这是从Kubernetes文档页面上对策略对象的简要描述。
版本控制特性——容许多版本和策略的转换格式。
api版本,字符串类型:有效值就是“abac.authorization.kubernetes.io/v1beta1”。
kind,字符串类型:有效值是“policy”。
规格属性——是一个用如下属性的映射:
面向对象匹配属性:
用户,字符串:用户字符串不是从-token-auth-file,就是从证书文件的普通名字(CN)而来。若是你指定用户,那么它就确定跟通过身份验证的用户匹配。*跟全部请求都匹配。
group,字符串:若是你指定group,那么它确定跟groups中通过身份验证的用户相匹配。*跟全部请求都匹配。
资源匹配属性
apiGroup,字符串类型:API group,好比拓展版本。*跟全部APIgroup相匹配。
命名空间,字符串类型:命名空间字符串。*跟全部的资源请求相匹配。
资源,字符串类型:资源,好比pods。*匹配全部的资源请求。
非资源匹配属性:
nonResourcePath,字符串类型:跟全部的非资源请求路径相匹配(好比/version,/apis)。*跟匹配全部非资源请求。/foo/*跟/foo/,以及它的子路径。
只读,布尔型:当为真,也就意味着策略只应用于获取,列出和监测操做。
Webhook
调出一个外部RESTful受权服务。
身份验证和受权机制的选择取决于你的要求。然而在个人经验看来,我发现基于证书的身份验证方法,基于身份验证方法的keystone(LDAP),基于身份验证策略的ABAC,这三种方法的灵活结合提供了所需的功能,来培养Kubernetes环境。
想要了解更多关于认证和受权的信息,建议浏览一下两个连接:
认证:http://kubernetes.io/docs/admin/authentication/
受权:http://kubernetes.io/docs/admin/authorization
原文连接:http://cloudgeekz.com/1045/kubernetes-authentication-and-authorization.html#rd?sukey=3997c0719f1515203c1d484623e7ce856d8c5abebd3e3bf44f7761a8579fb1f1c4bb5e509f603c1481f70266e9e3071a
(转载请先联系咱们,尊重知识产权人人有责:)