在k8s里部署LDAP服务
LDAP服务由ldapadmin和ldapserver两个无状态服务组成
ldapadmin服务(通过该服务的外部接口能访问LDAP服务,服务端)
容器配置:
镜像名称:osixia/phpldapadmin:latest (首先在本地pull该镜像,再上传到环境上)
CPU请求:0.5Core
CPU上限:1Core
内存请求:1GiB
内存上限:2GiB
挂载路径:/var/lib/ldap(持久化数据)
键值对:
PHPLDAPADMIN_LDAP_HOSTS:ldapserver
PHPLDAPADMIN_HTTPS:false
访问配置:
访问类型:集群内访问
访问端口:HTTP协议/80容器端口
访问类型:集群外访问
访问端口:HTTP协议/80容器端口/32000节点端口
ldapserver服务(重要)
容器配置:
镜像名称:osixia/openldap:latest (首先在本地pull该镜像,再上传到环境上)
CPU请求:0.5Core
CPU上限:1Core
内存请求:1GiB
内存上限:2GiB
挂载路径:/var/lib/ldap(持久化数据)
访问配置:
ldapserver (要与ldapadmin里的PHPLDAPADMIN_LDAP_HOSTS的值一样!!)
访问类型:集群内访问
访问端口1:TCP协议/389容器端口
访问端口2:UDP协议/389容器端口
ldapservernodeport
访问类型:外部访问
访问端口1:TCP协议/389容器端口/30089
ldap服务器设置
服务器地址:ldapserver的外部访问IP (要有内部的访问权限才能从外网进去访问LDAP服务器) 解决方法:从内部打开一个端口,然后通过外部ip:port进行访问
端口:外部访问的端口号这里为30089
账号:cn=admin,dc=example,dc=org
密码:admin
BaseDN:dc=example,dc=org
账号字段:cn
姓名字段:sn
邮箱字段:mail
往LDAP数据库添加数据:
进入LDAP服务👉import
代码格式:
创建base:
# Entry 1: dc=example,dc=org
dn: dc=example,dc=org
dc: example
o: Example Inc.
objectclass: top
objectclass: dcObject
objectclass: organization
新增成员:
dn: cn=aaa,dc=example,dc=org
cn: aaa
mail: email
objectclass: top
objectclass: inetOrgPerson
sn:: 5rWZ5ZWGdGVzdA==
uid:: 5rWZ5ZWGdGVzdA==
userpassword: 123456
也可以直接从另一个LDAP里export数据,复制黏贴,注意要修改BaseDN
从后端mongo数据库查看LDAP用户
首先远程连接环境ip
查看mongo的pod
kubectl get pod | grep 'mongo'
进入pod服务:kubectl exec -it infra-mongo-mongo-v1-0-0 mongo
re.status() 查找到master节点上的mongo服务,只有master节点上的可以操作 (哨兵模式)
关键字段:PRIMARY,就是master节点的mongo:infra-mongo-mongo-v1-0-0
接下来进入这个pod进行数据库操作
show dbs 列出数据库
LDAP配置信息存在console-web
LDAP用户信息存在cauth_v2里,所以我们要use cauth_v2
这样就查到所有的users的信息了,要查LDAP,就加过滤条件就行
删除里面的数据:
db.users.remove({条件信息})
举例为tenants:
db.users.save({信息}) 修改数据信息
db.users.find({"_id" : {$regex:"username-*"}}) 查询语句匹配regex:正则表达式,$and多个条件,$or同,$options不区分大小写
db.users.find({"_id" : {$regex:"username-*"}}).limit(10).skip(100).sort({"gtime": -1, "ctime": 1}) 返回结果为10,略过第100项,gtime降序,ctime升序
在Docker上部署LDAP服务
首先在你自己的环境里docker pull 两个镜像
docker pull osixia/openldap (openldap构建ldap服务)
docker pull osixia/phpldapadmin (admin是用来管理ldap数据库的)
运行镜像(参数也可以不填,都为默认)
docker run -p 30389:389 -p 30636:636 \
--name myfirstldap \
--network bridge \
--hostname openldap \
--env LDAP_ORGANISATION="mylitboy" \
--env LDAP_DOMAIN="mylitboy.com" \
--env LDAP_ADMIN_PASSWORD="ldap123" \
--detach osixia/openldap
配置LDAP组织者:--env LDAP_ORGANISATION="firstldap"
配置LDAP域:--env LDAP_DOMAIN="firstldap.org" (这里也就是dc=firstldap,dc=org)
配置LDAP密码:--env LDAP_ADMIN_PASSWORD="admin123"
默认登录用户名:admin
(389端口是用来从外部进入ldap访问数据的,像我这样是把389映射到30389上了,外部就通过port30389来读取数据)
docker ps 查看一下是否运行起来了
docker stop <id> \ docker rm <id> 停止,删除这个镜像
openldap运行起来之后,来启动ldapadmin进行管理
docker run -d --privileged -p 10086:80 \
--name myphpldapadmin \
--env PHPLDAPADMIN_HTTPS=false \
--env PHPLDAPADMIN_LDAP_HOSTS=172.17.0.4 \
--detach osixia/phpldapadmin
配置的Ldap地址:--env PHPLDAPADMIN_LDAP_HOSTS=172.17.0.4 (这个ip用docker inspect --format '{{ .NetworkSettings.IPAddress }}' <id>来获取就是之前启动的openldap)
配置不开启HTTPS:--env PHPLDAPADMIN_HTTPS=false(默认是true,就是https访问,远程读取时会有些麻烦,没特殊需要建议http)
(如果选择https方式,一定要映射443端口,我这里http所以可以是80,对应的10086就是之后访问ldap服务的port了)
docker ps查看一下是否启动成功
然后通过172.17.0.4:10086来访问服务 (都要看你自己的配置来)
成功的页面是这样的:
点击login登录
账号: cn=admin,dc=firstldap,dc=org (看之前openldap的配置)
密码: admin123
登录后是这样的,通过import可以导入数据,导入格式在上面有讲