在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可以導入數據,導入格式在上面有講