原创:80后程序员的世界观(微信公众号ID:zhuangmeilicom),欢迎分享,转载请保留出处。
- 需求提出
在开发我司kubernetes云平台的时候,由于整个业务层面是针对不同租户的,所以就要求我们的平台支持多租户,也就是多用户。而云平台是由很多的服务和组件所组成的,所以就要求几乎所有的服务和组件都要做多用户的支持,并且不同租户在不同服务或组件的权限不同。这对我们来说是一个极大的挑战,相信大家也在开发中碰到类似的问题。
- 方案和思路
我们的云平台使用微服务架构。
我们的做法是实现了一个SSO服务。所有的用户操作都通过这个服务进行。这个服务提供了rest api, 它的功能包括:
(1)新用户的注册和注销
只有管理员才有这个权限
(2)用户权限的认证和鉴权
其他服务都可以调用SSO服务的rest api进行用户权限的认证和鉴权。
- 改造方案
其他的服务要支持多租户,只要整合SSO即可。
整合SSO机制之后,服务之间的认证就通过token来进行。所以,被改造服务(比如服务A)需要从http header里取出token,然后用此token调用SSO的rest api,SSO会:
(1)首先验证token是否合法,如果合法,则解出username
(2)根据username得到此用户的权限(也可以包含本用户在当前服务A的权限,在于你如何设计)
这样服务A就可以根据当前用户的权限并进行后续的操作了。
服务B,C,D也可以用类似的方式支持多租户。
这样整个云平台就可以支持多租户了。
作者简介:研华科技软件主管,聚焦linux内核技术和k8s云平台架构设计。我会在这里分享kubernetes云平台的架构设计。也会分享我们针对某些开源组件的优劣评估和性能测试以及优化过程。欢迎大家一起探讨云原生技术。