一款kubernetes muti dashboard ldap登录工具
source link: http://dockone.io/article/10427
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
工具由来
为什么要写这样的一个工具呢?这是因为我司有多个 kubernetes
集群(8+),且都是云托管服务无法接触到Apiserver配置,这就给我们带来一个痛点, 开发、sre需要登录k8s dashbaord且不同部门和角色间需要不同的授权 ,原先都是通过 sa token
进行登录dashboard,但随着k8s集群的增长,每增加一个集群,就需要告知使用方对应dashboard访问地址以及对应的token,这不管是提供方还是使用方都让人感觉非常的痛苦。那是否有一款工具能 提供统一地址统一登录多集群dashboard的方案 呢?经过一番搜索后,发现并没有,市面上大多数是单集群集成 LDAP
的方案,主要是以 DEX
为主,但光单集群的统一登录授权方案就让人感觉非常的困难。难道就没有简单方便的工具供我们使用吗?好吧,那我就来打造这样一款工具吧。
Dashboard LDAP集成方案:
- https://k2r2bai.com/2019/09/29/ironman2020/day14/
- https://blog.inkubate.io/acces ... tials
以上两篇文档是成LDAP的方案,个人感觉还不错,供有需要的人参考!
如何打造
好吧既然没有,那就自动动手打造一个!
目标: 简单使用 !!!通过访问同一地址,使用LDAP登录且可切换不同集群的dashboard,同时对应不同的集群权限可单独配置!
有了上面的目标,那如何来实现呢?
实现方式其实很简单,首先写一个登录界面与公司的AD进行打通获取用户与组,然后将用户或者组与k8s集群中的 service account
进行关联就实现了对应的rbac与登录token,最后在登录后实现一个反向代理服务即可完成。
是不是非常的简单!!!
实现技术栈:golang(gin、client-go、viper、ldap) + Kubernetes Dashboard
如何部署
前提条件
在使用此工具前,需要有以下一些条件约束:
1. 已在各k8s集群部署 dashboard
且能被此工具访问到
2. 已有 ldap
且有管理权限能进行访问操作
3. 各集群中有对应的 service account
可进行映射,如需对不同用户和组需要有不同的操作权限,则对sa进行rbac授权即可,下面会详细说明。
4. 此工具需要操作各集群的api,故需要获取每个集群的 apiserver地址
、 ca.crt
以及 token
进行配置,至于每个集群的 ca.crt
和 token
如果获取,后面会进行说明
ldap说明
我司 ldap
目录规则如下:
|--域 |--|---公司 |--|----|----分公司 |--|----|-----|----部门 |--|----|-----|-----|-----用户
对应的 Distinguished Name
显示如下:
CN=Peng Xu,OU=部门,OU=分公司,OU=公司,DC=corp,DC=xxx,DC=com
这里我会获取第一个 OU
作为 group
,如果你的需求和我不一样,可以给我提 issue 进行适配
ldap 详细说明请参考: https://blog.poychang.net/ldap-introduction
configmap.yaml 配置说明
yaml ldap: addr: ldap://192.168.3.81:389 adminUser: xxxxx adminPwd: xxxxxx baseDN: dc=corp,dc=patsnap,dc=com filter: (&(objectClass=person)(sAMAccountName=%s)) attributes: user_dn orgUnitName: OU=
全局用户/用户组与SA的映射
rbac:
DevOps team:
sa: ops-admin
ns: kube-system
xupeng:
sa: inno-admin
ns: default
clusters:
#集群别名,在登录下拉框中显示的key,这个别名需要和secret.sh中的ca.crt和token的键名一一对应
local:
#apiserver地址,能够被当前工具访问到
apiServer: apiserver-dev.jiunile.com
port: 6443
#kubernetes dashboard地址,能够被当前工具访问到
dashboard: dashboard-dev.jiunile.com
#集群说明,在登录下拉框中显示的名称
desc: Dev Cluster
#针对单独集群细分
#rbac:
# DevOps team:
# sa: admin
# ns: kube-system
# xupeng:
# sa: ops-admin
# ns: default
cnrelease:
apiServer: apiserver-cn-release.jiunile.com
port: 443
dashboard: dashboard-cn-release.jiunile.com
desc: CN Release Cluster
usrelease:
apiServer: apiserver-us-release.jiunile.com
port: 443
dashboard: dashboard-us-release.jiunile.com
desc: US Release Cluster
euprod:
apiServer: apiserver-eu-prod.jiunile.com
port: 443
dashboard: dashboard-eu-prod.jiunile.com
desc: EU Prod Cluster
部署
1. 修改并部署deploy/configmap.yaml
2. 将各集群获取的 ca.crt
和 token
写入到对应的deploy/token下
sh deploy/secret.sh
注意: secret.sh 中的 xx_token/xxx_ca.crt
中的 xx
对应于 configmap.yaml
中的 集群别名,必须要一一对应
- 部署
deploy/deployment.yaml
访问
http://{nodeip}:31000
[]( http://www.youtube.com/watch?v=ILiviSLbSq8 "kubernetes muti dashboard ldap login")
视频下载地址:gitlab地址:
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK