27

一款kubernetes muti dashboard ldap登录工具

 3 years ago
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.
qQ36Rnr.png!web

工具由来

为什么要写这样的一个工具呢?这是因为我司有多个 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.crttoken 如果获取,后面会进行说明

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.crttoken 写入到对应的deploy/token下

3. 执行 deploy 下的 secret.sh 脚本 sh deploy/secret.sh

注意: secret.sh 中的 xx_token/xxx_ca.crt 中的 xx 对应于 configmap.yaml 中的 集群别名,必须要一一对应

  1. 部署 deploy/deployment.yaml

访问

http://{nodeip}:31000

[ jAJZnmB.jpg!web

]( http://www.youtube.com/watch?v=ILiviSLbSq8 "kubernetes muti dashboard ldap login")

视频下载地址:gitlab地址:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK