容器编排之Kubernetes认证与授权

容器编排之Kubernetes认证与授权

mintzhaomintzhao
前一篇文章详细介绍了怎么安装Kubernetes集群,本篇文章主要介绍如何使用kubernetes进行认证与授权。

在kubernetes中,认证与授权是两个不同的过程。可以这么理解,认证是API请求层的过滤器,授权是资源访问的拦路虎。这两个过程是非关联的,你可以放任所有的API请求通过,也可以禁止访问任何资源,二者并不冲突。通俗的讲,认证就是验证用户名密码,授权就是检查该用户是否拥有权限访问请求的资源,仅此而已。

我们知道,kubernetes集群的所有操作基本上都是通过kube-apiserver这个组件进行的,它提供HTTP RESTful形式的API供集群内外客户端调用。需要注意的是:认证授权过程只存在HTTPS形式的API中。也就是说,如果客户端使用HTTP连接到kube-apiserver,那么是不会进行认证授权的。所以说,可以这么设置,在集群内部组件间通信使用HTTP,集群外部就使用HTTPS,这样既增加了安全性,也不至于太复杂。

kubernetes提供了很多认证方法和授权策略,这里我们只能简单的介绍所有的方法策略的内容和使用场景,大家需要根据自己特定的业务需求自由选择合适的方法策略。

认证

kubernetes1.6版本现在支持以下这些认证方法:

  1. 客户端证书:这种方式也叫作TLS双向认证,也就是服务器客户端互相验证证书的正确性,在都正确的情况下协调通信加密方案
  2. 静态Token文件:用token唯一标识请求者,只要apiserver存在该token,则认为认证通过,但是如果需要新增Token,则需要重启kube-apiserver组件,实际使用不可取
  3. Bootstrap Tokens:这是1.6版本提供的新的解决方案,还处于alpha版本。对于它还不是很了解,暂时略过不谈
  4. 静态Password文件:类似静态Token文件,是使用用户名密码方式标识请求者,新增也需要重启kube-apiserver组件,不可取
  5. Service Account Tokens:主要用于运行在集群里的pod与apiserver通信时进行认证,基本是由集群自动创建管理的,我还未在实际使用中用到该特性,不好讲明白,等我运用到了再详细解释
  6. OpenID认证:这种认证方式其实与现在的第三方登陆方式并无二致,参考OAuth2.0原理即可
  7. Webhook Token:提供调用第三方认证方法的接口,只要该接口满足kubernetes定义好的输入输出,即可用于请求认证,适用于已有认证方案的团队
  8. Keystone Password:keystone是openstack里用于身份认证的组件,kubernetes现在简单的实现了基于用户名密码的认证方式,可能离实际使用还是有一段距离
  9. 匿名请求:当允许匿名请求的时候,没有被其他认证方法拒绝的请求都会被认为是匿名请求,同时拥有用户名system:anonymous,和组system:unauthenticated
  10. 自定义方法:当你觉得上面所有的方法都不够用,或者说不适用于你自身的业务需求的时候,你可以自定义认证方法

以上就是kubernetes提供的认证方法,可以配合使用,使API请求更加安全。

授权

授权主要是用于对集群资源的访问控制,通过检查请求包含的相关属性值,与相对应的访问策略相比较,API请求必须满足某些策略才能被处理。现在集群支持的授权策略有:
  1. AlwaysDeny:阻止所有请求,仅用于测试
  2. AlwaysAllow:允许所有请求,当你不需要授权控制的时候使用
  3. ABAC:基于属性的访问控制,在apiserver本地的某一个文件里写入策略规则,如果满足其中一条,就算授权通过。现阶段如果想新增规则,那么必须重启apiserver,在生产环境中使用几率较小,但未来可能会使用API动态管理
  4. RBAC:基于角色的访问控制,这是1.6版本主推的授权策略,可以使用API自定义角色和集群角色,并将角色和特定的用户,用户组,Service Account关联起来,可以用来实现多租户隔离功能(基于namespace资源)
  5. Webhook:使用第三方授权组件,对于已有访问控制组件可以使用该方法使kubernetes与原组件无缝衔接。没有的话就不要用了。
注:虽然可以同时提供多个授权策略,但结果是合并的。

写在最后

这篇文章简单介绍了kubernetes的认证与授权,在生产环境中推荐使用客户端证书Bootstrap Tokens方式进行认证处理,Service Account Token是特殊的一类,如果想在pod里访问apiserver,则必须使用。而对于授权,RBAC是最好的选择,当然可以选择使用AlwaysAllow禁用授权控制。

而且我没有介绍每种方法策略的使用方法,因为我觉得最好的老师是官方文档,大家可以自行去查阅。自己理解的才最深刻!

参考资料:
「真诚赞赏,手留余香」
还没有人赞赏,快来当第一个赞赏的人吧!
文章被以下专栏收录
还没有评论