在 KubeSphere 上部署 OpenLDAP 并进行对接使用

news2024/12/31 3:40:19

在 KubeSphere 上部署 OpenLDAP 并进行对接-进阶

  • 背景
  • 前置条件
  • KubeSphere 中部署 LDAP
    • 部署 LDAP 应用
    • ApacheDirectoryStudio 验证 LDAP
      • 下载部署 ApacheDirectoryStudio
      • ApacheDirectoryStudio 测试 LDAP
      • 创建 Ldap Search ,KS 对接时可选择使用
  • KubeSphere 对接 LDAP
    • Harbor 的对接界面是酱紫
    • KubeSphere 的对接方式是酱紫
    • KubeSphere 配置验证
  • 测试使用 OpenLDAP
  • 批量导出导入用户数据到 KubeSphere
    • 导入账号到 KubeSphere
    • 为导入账号关联平台角色
    • 已有企业空间/创建企业空间
    • 将用户关联企业空间角色
    • 将用户和上述方法进行批量化脚本即可

背景

在实际使用中,会有一些用户,在不同场景中经常碰到 OpenLDAP 对接问题

  • 能否对接 ldap;
  • 对接方式都有什么,有界面吗?
  • 能否按自己要求来对接指定账户,而非全部账户都能访问;
  • 能否批量导入账户?
  • 默认角色如何绑定?

在这里可以简单操作一下,以便来抛砖引玉,主要思路为:在 KubeSphere 中直接拉起一个 LDAP Server,用 ApacheDirectoryStudio 来验证,然后使用 KubeSphere 进行 ldap 对接验证

前置条件

您需要部署一个 Kubernetes 集群,并在集群中安装 KubeSphere。有关详细信息,请参阅在 Linux 上安装和在 Kubernetes 上安装。

KubeSphere 中部署 LDAP

这里通过应用应用为用户提供完整的业务功能,由一个或多个特定功能的组件组成。,来部署 OpenLDAP

部署 LDAP 应用

在这里插入图片描述
创建无状态服务(演示使用)
在这里插入图片描述
这里使用的镜像为:bitnami/openldap:latest

docker pull bitnami/openldap:latest
# 参考 the OpenLDAP server instance 可以配置 env 在后面使用
$ docker run --detach --rm --name openldap \
  --network my-network \
  --env LDAP_ADMIN_USERNAME=admin \
  --env LDAP_ADMIN_PASSWORD=adminpassword \
  --env LDAP_USERS=customuser \
  --env LDAP_PASSWORDS=custompassword \
  bitnami/openldap:latest

在这里插入图片描述
配置 Resources 的 Request 和 Limit ,并使用默认端口
在这里插入图片描述
上面所说的环境变量,可以进行批量引用(KS很多功能,明亮简洁又好用)
在这里插入图片描述
外部访问,这里使用模式为:NodePort
在这里插入图片描述
服务如下,通过 1389 对应的 NodePort 30598 来访问。
在这里插入图片描述

ApacheDirectoryStudio 验证 LDAP

通过 ApacheDirectoryStudio 来直接验证,确认 OpenLDAP server instance 无问题后,再进行 KubeSphere 的对接。首先先下载 Mac 版 ApacheDirectoryStudio 。

下载部署 ApacheDirectoryStudio

ApacheDirectoryStudio-2.0.0.v20210717-M17-macosx.cocoa.x86_64.dmg
在这里插入图片描述
在这里插入图片描述

安装部署后 ApacheDirectoryStudio 如下
在这里插入图片描述

ApacheDirectoryStudio 测试 LDAP

创建 CONNECTIONS
在这里插入图片描述

Connection Name: LDAP4KS-admin

NetWork Parameter
HostName: 192.168.100.2
Port: 30598
Connection timeout(s): 30
Encryption method: no encryption

在这里插入图片描述
Authentication

Authentication Method: Simple authentication
#参考上面时设置的 the OpenLDAP server instance 可以配置 env 在后面使用
Authentication Parameter:
Bind DB or User: cn=admin,dc=example,dc=org
Bind password: adminpassword

在the OpenLDAP server instance 可以配置 env 在后面使用
–env LDAP_ADMIN_USERNAME=admin
–env LDAP_ADMIN_PASSWORD=adminpassword
–env LDAP_USERS=customuser
–env LDAP_PASSWORDS=custompassword \

在这里插入图片描述
Browser Options

# 这里可以通过 FetchBase DNs 获取 Base DN: dc=example,dc=org

在这里插入图片描述
在这里插入图片描述
这里有一个小细节,如果对接认证账户不是 admin,在 ApacheDirectoryStudio 中添加 Entry 时会显示无权限添加,所以 Studio 对接时可以选择使用 admin ,查询对接时可以使用其它账户。

创建 Ldap Search ,KS 对接时可选择使用

这里举例展示,userSearchFilter的结果集,可以根据自己业务需求,将符合条件的用户,显示这个 Ldap Search 中,这里只是在 filter中 添加一个条件为:(uid=customuser001)

dc=example,dc=org  -  Filter: (uid=customuser001)
#在 KubeSphere 对接中,这里显示为:
userSearchFilter: (uid=customuser001)

KubeSphere 对接 LDAP

Harbor 的对接界面是酱紫

在这里插入图片描述

KubeSphere 的对接方式是酱紫

上述 Harbor 对接 ldap 界面功能,这里同样可以实现

暂时没有界面,CRD ClusterConfiguration 中的 ks-installer:

kubectl -n kubesphere-system edit cc ks-installer

内容如下,请参阅官方文档

spec:
  alerting:
    enabled: true
  auditing:
    enabled: true
  authentication:
    jwtSecret: ""
    maximumClockSkew: 10s
    multipleLogin: true
    oauthOptions:
      accessTokenInactivityTimeout: 30m
      accessTokenMaxAge: 1h
      identityProviders:
      - mappingMethod: auto
        name: LDAP
        provider:
          host: ldap.middleware.svc:1389 #这里我填写的为 KS 集群内部访问方式
          loginAttribute: uid
          mailAttribute: mail
          managerDN: cn=admin,dc=example,dc=org
          managerPassword: adminpassword
          userSearchBase: dc=example,dc=org
          userSearchFilter: (uid=customuser001) #这里配置userSearchFilter可根业务灵活配置
        type: LDAPIdentityProvider

排错或者查看日志情况

#在 cc 里配置好,等待 ks-installer 自动更新;或者手动重启 ks-apiserver
#编辑ks-installer
kubectl edit cc -n kubesphere-system ks-installer
#重启ks-installer
kubectl rollout restart -n kubesphere-system deploy ks-installer
#重启ks-apiserver
kubectl rollout restart -n kubesphere-system deploy ks-apiserver
#查看ks-apiserver日志
kubectl -n kubesphere-system logs ks-apiserver-xxxxxxxxx

KubeSphere 配置验证

http://192.168.100.2:30880/kapis/config.kubesphere.io/v1alpha2/configs/oauth
验证配置内容已经正确更新
在这里插入图片描述

如果 mappingMethod 设置为 lookup,可以运行以下命令并添加标签来进行帐户关联。如果 mappingMethod 是 auto 可以跳过这个部分。

kubectl edit user <KubeSphere username>

labels:
  iam.kubesphere.io/identify-provider: <LDAP service name>
  iam.kubesphere.io/origin-uid: <LDAP username>

测试使用 OpenLDAP

首先我在 OpenLDAP 中 ldap search 结果显示只有一个用户 customuser001
在这里插入图片描述
那么就用 customuser001 这个用户来尝试登录试试

#这个用户是我在 studio 中通过界面添加的一个新用户,customuser001,密码为:custompassword001
customuser001
custompassword001

在这里插入图片描述
切换回管理员,查看账户同步内容
在这里插入图片描述
目前来看,默认同步的账户可以登录,但是没有赋予角色,需要再人为分配下或者设置成默认角色进行导入。

批量导出导入用户数据到 KubeSphere

这里只提供一下思路,批量脚本可自行编写

#可以在 KubeSphere 中提前导入第三方(eg.ldap)账户并关联平台角色、企业空间
cat << EOF | kubectl apply -f -
apiVersion: iam.kubesphere.io/v1alpha2
kind: User
metadata:
  labels:
    iam.kubesphere.io/identify-provider: <IDENTITY_PROVIDER_NAME> #这里指配置名称为:ldap
    iam.kubesphere.io/origin-uid: <UID> #第三方账户的 UID
  name: <USERNAME> # 关联的 KubeSphere 账户名称
spec:
  email: <EMAIL> # 关联的 KubeSphere 账户email
EOF

导入账号到 KubeSphere

#eg.账户数据如下
identify-provider:ldap
origin-uid:customuser002
email:custompasswordaa@ks.com

cat << EOF | kubectl apply -f -
apiVersion: iam.kubesphere.io/v1alpha2
kind: User
metadata:
  labels:
    iam.kubesphere.io/identify-provider: ldap
    iam.kubesphere.io/origin-uid: customuser002
  name: customuser002
spec:
  email: custompasswordaa@ks.com
EOF

root@i-9z8gtfm9:/home/ubuntu# kubectl get user
NAME            EMAIL                     STATUS
admin           admin@kubesphere.io       Active
customuser      customuser@ks.com         Active
customuser001   customusera@example.com   Active
customuser002   custompasswordaa@ks.com   Active
shl             shl@163.com               Active

为导入账号关联平台角色

这里将用户 customuser001 关联成 platform-regular 角色

cat << EOF | kubectl apply -f -
apiVersion: iam.kubesphere.io/v1alpha2
kind: GlobalRoleBinding
metadata:
  labels:
    iam.kubesphere.io/user-ref: customuser001
  name: customuser001-platform-regular
roleRef:
  apiGroup: iam.kubesphere.io
  kind: GlobalRole
  name: platform-regular #查询平台已有的角色
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: customuser001
EOF

执行后,查询结果

root@i-9z8gtfm9:/home/ubuntu# kubectl get globalrolebinding
NAME                             AGE
admin                            139d
anonymous                        139d
authenticated                    139d
customuser001-platform-regular   93s
pre-registration                 139d
shl-platform-regular             139d
root@i-9z8gtfm9:/home/ubuntu# kubectl get globalrolebinding customuser001-platform-regular -oyaml
apiVersion: iam.kubesphere.io/v1alpha2
kind: GlobalRoleBinding
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"iam.kubesphere.io/v1alpha2","kind":"GlobalRoleBinding","metadata":{"annotations":{},"labels":{"iam.kubesphere.io/user-ref":"customuser001"},"name":"customuser001-platform-regular"},"roleRef":{"apiGroup":"iam.kubesphere.io","kind":"GlobalRole","name":"platform-regular"},"subjects":[{"apiGroup":"rbac.authorization.k8s.io","kind":"User","name":"customuser001"}]}
  creationTimestamp: "2023-01-03T08:34:23Z"
  generation: 1
  labels:
    iam.kubesphere.io/user-ref: customuser001
    kubefed.io/managed: "false"
  name: customuser001-platform-regular
  resourceVersion: "3436734"
  uid: 9d7a18a6-b4c9-40f8-8186-7029575e5d2d
roleRef:
  apiGroup: iam.kubesphere.io
  kind: GlobalRole
  name: platform-regular
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: customuser001

在这里插入图片描述

已有企业空间/创建企业空间

#这里注意多集群的企业空间差异
cat << EOF | kubectl apply -f -
apiVersion: tenant.kubesphere.io/v1alpha2
kind: WorkspaceTemplate
metadata:
  name: app
spec:
  # placement: {}
  placement:
    clusters:
    - name: <CLUSTER_NAME>
  template:
    spec:
      manager: <USERNAME>
EOF

将用户关联企业空间角色

cat << EOF | kubectl apply -f -
apiVersion: iam.kubesphere.io/v1alpha2
kind: WorkspaceRoleBinding
metadata:
  labels:
    iam.kubesphere.io/user-ref: <USERNAME>
    kubesphere.io/workspace: <WORKSPACE_NAME>
  name: <USERNAME>-<WORKSPACE_ROLE_NAME>
roleRef:
  apiGroup: iam.kubesphere.io
  kind: WorkspaceRole
  name: <WORKSPACE_ROLE_NAME>
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: <USERNAME>
EOF

将用户和上述方法进行批量化脚本即可

# 更为高级灵活的使用方法,可以升级为定期、定时、触发式、差异化增量/全量同步账户信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【区块链 | EVM】深入理解学习EVM - 深入Solidity数据存储位置:内存

图片来源: Mech Mind on Unsplash 这是深入Solidity数据存储位置系列的另一篇。在今天的文章中,我们将学习EVM内存的布局,它的保留空间,空闲内存指针,如何使用memory引用来读写内存,以及使用内存时的常规最佳做法。 我们将使用 Ethereum Name Service (ENS)中的合约代码…

实模式和保护模式的区别

实模式和保护模式的区别 实模式和保护模式的来历 最早期的8086 CPU只有一种工作方式 ---- 实模式。数据总线为16位&#xff0c;地址总线为20位。实模式下所有寄存器都是16位。 从80286开始就有了保护模式&#xff0c;从80386开始CPU数据总线和地址总线均为32位&#xff0c;而且…

开发板测试手册——SPI FLASH 读写、USB WIFI 模块(2)

目录 1.8 SPI FLASH 读写测试 20 1.9 USB 接口读写测试 21 1.10 网络接口测试 23 1.10.1 网络连通测试 23 1.10.2 网络速度测试 25 2 网络静态 IP 设置 27 3 USB WIFI 模块测试 31 3.1 WIFI STA 功能测试 32 3.2 WIFI AP 功能测试 35 3.3 USB WIFI 驱动编译 39 前 言…

scikit-learn线性模型之线性回归

scikit-learn线性模型之线性回归线性回归参考文献线性回归 有监督学习中主要解决两个问题&#xff0c;一个是分类&#xff0c;另一个是回归。 在回归问题中&#xff0c;我们需要利用我们已知的特征 x1,x2,...,xpx_1,x_2,...,x_px1​,x2​,...,xp​ 去预测我们的目标变量 yyy 。…

隐私计算一体机,金融大数据规模商用的催化剂

一股隐私计算的浪潮正席卷金融行业。 银行通过隐私计算引入外部不动产数据&#xff0c;与行内贷款企业的时点贷款余额、注册资本等数据联合建立企业贷中预警监测模型&#xff0c;提升银行风险监测业务能力&#xff1b;银行利用联邦学习与互联网公司的客户特征数据完成联合建模…

Linux:使用telnet命令提示:Connection refused

我是 ABin-阿斌&#xff1a;写一生代码&#xff0c;创一世佳话&#xff0c;筑一览芳华。如果小伙伴们觉得不错就一键三连吧~ 下一篇&#xff1a;Linux安装telnet命令教程 文章目录一、分析没有xinetd服务&#xff1a;二、讲解&#xff1a; 什么是 telnet 命令具体语法具体参数三…

Node.js--》如何在Node.js中操作MySQL

目录 数据库 MySQL的安装与配置 SQL管理数据库 WHERE子句 AND和OR ORDER BY子句 COUNT(*)函数 在Express项目中操作MySQL 数据库 数据库(database)是用来组织、存储和管理数据的仓库。当今世界是一个充满着数据的互联网世界&#xff0c;充斥着大量的数据。数据的来源有…

算法拾遗二十三之暴力递归到动态规划一

算法拾遗二十三之暴力递归到动态规划一题目一优化Code&#xff08;空间换时间&#xff09;优化二题目二优化一&#xff08;缓存法&#xff09;优化三&#xff08;严格表优化&#xff09;题目一 假设有排成一行的N个位置&#xff0c;记为1~N&#xff0c;N 一定大于或等于 2 开始…

Softing与Portainer合作,为工业物联网提供灵活高效的机器连接管理解决方案

Softing工业自动化成为了Portainer的增值经销商。Portainer.io是一个用于管理容器软件应用的平台&#xff0c;而Softing连接产品与其相结合可以使用户更轻松地管理工业物联网解决方案。 &#xff08;左边&#xff1a;Thomas Hilz&#xff0c;Softing工业自动化常务董事&#xf…

创建odoo15项目

Odoo 提供了一种机制来帮助建立一个新模块 python 启动项目名称 scaffold 模块名称 模块创建的文件夹如下两种方式&#xff1a; 1&#xff09;可新建manage.py文件来启动脚手架 import os import sysLIB_PATH os.path.join(os.path.split(os.path.realpath(__file__))[0], .…

【谷粒商城基础篇】基础篇总结

谷粒商城笔记合集 分布式基础篇分布式高级篇高可用集群篇简介&环境搭建项目简介与分布式概念&#xff08;第一、二章&#xff09;基础环境搭建&#xff08;第三章&#xff09;整合SpringCloud整合SpringCloud、SpringCloud alibaba&#xff08;第四、五章&#xff09;前端知…

【kafka-ui】支持kafka with raft的可视化集群管理工具

前言 在早期使用kafka的时候一般使用Kafka Tool或者kafka eagle&#xff0c;前者为桌面软件&#xff0c;后者为浏览器软件。总体来说体验一般&#xff0c;但是还比较够用。 但是从kafka3.3.1开始&#xff0c;已经正式抛弃zookeeper使用自己的仲裁器了&#xff0c;但是上述两种…

什么是网站备案?如何查询网站是否备案?

网站备案是指根据国家法律法规需要网站的开办者向国家有关部门申请的备案.具体分为ICP备案和公安备案。 ICP备案 《互联网信息服务管理办法》指出&#xff0c;互联网信息服务分为经营性和非经营性两类。 国家对经营性互联网信息服务实行许可制度&#xff1b;对非经营…

实验室小分子PEG衍生物之Azido-PEG11-Azide/amine/NHS/COOH 叠氮-十一聚乙二醇-叠氮 1392284-57-9

Azido-PEG11-Azide叠氮-十一聚乙二醇-叠氮 中文名称&#xff1a;叠氮-聚乙二醇(十一甘醇)-叠氮&#xff1b;叠氮-十一聚乙二醇-叠氮 英文名称&#xff1a;Azido-PEG11-Azide 分子式&#xff1a;C24H48N6O11 分子量&#xff1a;596.67 CAS&#xff1a;1392284-57-9 外观&#x…

elasticsearch基础(一)

一、初识elasticsearch 1. 了解ES 1.1 什么是elasticsearch elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch结合kibana、Logstash、Beats&#xff0c;也就是elastic stack&#xff08;ELK&#xff09;。…

apply,call,bind的作用与区别

1.作用 都可以用来改变this,并立即执行函数 首先来看一个构造函数 function User(name) {this.name name;}let lisi new User(李四)console.log(lisi)// {"name": "李四"}使用call和apply改变this 第一个参数传递改变this指针的这个对象 function Us…

云存储生态构建的技术基因和最佳实践

当云计算、大数据、物联网、人工智能等新技术纷至沓来&#xff0c;我们都在时代的洪流中亲历这样的变化——数字科技深入渗透工作生活&#xff0c;从消费娱乐到生活服务&#xff0c;再到产业革新。 智能化时代&#xff0c;企业 IT 趋势的四大转变 不难发现&#xff0c;以上云…

涉及top名校对IB课程的分数要求

在北美、欧洲&#xff0c;有许多著名的大学乐于接收IB学生&#xff0c;有一些大学还为优秀IB毕业生提供奖励学分、越级的鼓励入学政策。全球有分布在近百个国家的一千余所大学与国际文凭组织(IBO)有稳定的协约关系&#xff0c;确保这些大学承认IB文凭。 什么是IB课程?IB课程项…

FFmpeg 结构体以及核心方法介绍

1.FFmpeg整体结构 ffplay、ffprobe、ffmpeg是上层的三个应用程序 libavutil&#xff1a;核心工具库&#xff0c;其他模块一般都会依赖这个模块做一些基本的音视频处理。 libavformat&#xff1a;文件格式协议库&#xff0c;封装了protocol层和demuxer、Muxer层&#xff0c;使…

ATTCK 01

官网环境链接 漏洞信息 下载好后自行解压 分别在VM中依次打开 配置攻击机和三个客户机的网络环境 其中攻击机选择 kali 客户机为 win7 win8 win2k3 kali的设置 &#xff08;VMnet1&#xff09; win7 的设置 (VMnet1用于连接外网 VMnet2用于连接内网&#xff09; win8 …