ldap集群搭建

操作步骤

  1. 3.0之前的步骤ldap-master   和ldap-slave  都要执行
  2. 3.0之后的步骤看小标题分别执行
  3. 参考链接



1.0 节点信息

节点 角色 系统版本
192.168.1.1 ldap-master CentOS 7.9.2009
192.168.1.2 ldap-slave01 CentOS 7.9.2009
192.168.1.3 ldap-slave02 CentOS 7.9.2009



1.1 服务器的基础操作

### 安装yum源
yum  install  wget  -y 
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release  -y

### 停止firewall
systemctl stop firewalld.service 
systemctl disable firewalld.service
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
cat /etc/selinux/config

### 修改主机名
hostnamectl set-hostname ldap-master   # master 节点修改
hostnamectl set-hostname ldap-slave01  # slave01 节点修改
hostnamectl set-hostname ldap-slave02  # slave02 节点修改



1.2 安装ldap

yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel  -y
systemctl enable --now slapd  && slapd -VV



1.3 ldap 参数解释

### 以苹果的案例
dn:cn=honglv,ou=bei,ou=xi,ou=dong,dc=ljheee
LDAP树形数据库如下:
dn :一条记录的详细位置 ---> 类似于,一棵树详细地址 or 类似于文件的路径
dc :一条记录所属区域    (哪一颗树) 相当于MYSQL的DB
ou :一条记录所属组织    (哪一个分支)  苹果所经过的所有“分叉
cn/uid:一条记录的名字/ID   (哪一个苹果名字)
LDAP目录树的最顶部就是根,也就是所谓的“基准DN"。


olcSuffix - 数据库后缀,它是LDAP服务器提供信息的域名。简单来说,更改为自己的域名
olcRootPW - 上述RootDN的LDAP管理员密码

我这里的dn为: k8scc.com
管理员账户为: admin.k8scc.com
olcSuffix是: k8scc.com
olcRootPW是: 由slappasswd -s 123456 这条命令生成



2.0 生成管理员密码

注意: 每次生产的密码都不一样

[root@ldap-master package]# slappasswd -s 123456 
{SSHA}j3cV4w4ZjCkdYW7u1QGmNW9w4s0Ruz+HUm



2.1 修改base数据库

### olcRootPW找个密码就是2.0 小节生成的

cat > db.ldif <<EOF
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=k8scc,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=k8scc,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}j3cV4w4ZjCkdYW7u1QGmNW9w4s0Ruz+HUm
EOF

### 执行修改生效
ldapmodify -Y EXTERNAL -H ldapi:/// -f db.ldif



2.2 修改监控的配置

cat > monitor.ldif <<EOF
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth" read by dn.base="cn=admin,dc=k8scc,dc=com" read by * none
EOF

### 执行修改生效
ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif



2.3 导入基础配置

### 复制 ldap 数据库文件
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG 

### 2.6  导入基本数据
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif



2.3.0 禁止匿名用户

cat > disable_anamouse.ldif << "EOF"
dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anon

dn: cn=config
changetype: modify
add: olcRequires
olcRequires: authc

dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcRequires
olcRequires: authc
EOF

ldapadd -Y EXTERNAL -H ldapi:/// -f disable_anamouse.ldif



2.3.1 配置LDAP Manager

cat > base.ldif <<EOF
dn: dc=k8scc,dc=com
dc: k8scc
objectClass: top
objectClass: domain

dn: cn=admin,dc=k8scc,dc=com
objectClass: organizationalRole
cn: Manager
description: LDAP Manager

dn: ou=People,dc=k8scc,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=k8scc,dc=com
objectClass: organizationalUnit
ou: Group
EOF

###  这里的-w 后面的参数 123456 是2.0小节自己输入的密码,slappasswd -s 123456 
ldapadd -x -w 123456 -D "cn=admin,dc=k8scc,dc=com" -f base.ldif  



2.3.3 启动member模块

cat > memberof_conf.ldif <<EOF
#开启memberof支持
dn: cn=module{0},cn=config
cn: modulle{0}
objectClass: olcModuleList
objectclass: top
olcModuleload: memberof.la
olcModulePath: /usr/lib64/openldap

#新增用户支持memberof配置
dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf
EOF

cat >refint1.ldif << EOF
dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint
EOF


cat> refint2.ldif<< EOF
dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof uniqueMember  manager owner
EOF


ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_conf.ldif 
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f  refint1.ldif 
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f  refint2.ldif 



2.3.4 启用密码策略模块

cat> add_ppolicy_module.ldif<< EOF
dn: cn=module,cn=config
cn: module 
objectClass: olcModuleList
olcModulePath: /usr/lib64/openldap
olcModuleLoad: ppolicy.la
EOF

ldapadd -Y EXTERNAL -Q -H ldapi:/// -f add_ppolicy_module.ldif



2.4 配置日志

cat > loglevel.ldif << EOF
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
EOF

### 执行修改生效
ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.ldif

### 重启服务
echo 'local4.* /var/log/slapd.log' >> /etc/rsyslog.conf
systemctl restart rsyslog
systemctl restart slapd



3.0 master节点执行: 开启同步模块

cat >syncprov_mod.ldif <<EOF
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la
EOF

### 执行生效
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov_mod.ldif



3.1 master节点执行: 为每个目录开启同步

cat >syncprov.ldif <<EOF
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 100
EOF

### 执行生效
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov.ldif



3.3 slave: 节点执行配置slave同步

cat >syncrepl.ldif <<EOF
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001
  provider=ldap://192.168.1.1:389/
  bindmethod=simple
  binddn="uid=admin,dc=k8scc,dc=com"
  credentials=123456
  searchbase="dc=k8scc,dc=com"
  scope=sub
  schemachecking=on
  type=refreshAndPersist
  attrs="*,+"
  retry="30 5 300 3"
  interval=00:00:05:00
EOF

### 执行生效
ldapmodify -Y EXTERNAL  -H ldapi:/// -f syncrepl.ldif



4.0 在master节点上执行: 创建测试用户,测试数据同步

### 在master节点上执行
### 创建账户repltest
cat > ldaptest.ldif << EOF
dn: uid=repltest,ou=People,dc=k8scc,dc=com
uid: repltest
cn: repltest
sn: repltest
mail: repltest@k8scc.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: 123456
shadowLastChange: 17763
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1099
gidNumber: 1099
homeDirectory: /home/repltest
EOF

### 创建账户
ldapadd -x -w 123456-D "cn=admin,dc=k8scc,dc=com" -f ldaptest.ldif





4.1 slave节点: 数据是否同步成功

### 在slave节点搜索数据
ldapsearch -x cn=repltest -b dc=k8scc,dc=com


[root@ldap-slave01 ldap]# ldapsearch -x cn=repltest -b dc=k8scc,dc=com
# extended LDIF
#
# LDAPv3
# base <dc=k8scc,dc=com> with scope subtree
# filter: cn=repltest
# requesting: ALL
#

# repltest, People, k8scc.com
dn: uid=repltest,ou=People,dc=k8scc,dc=com
uid: repltest
cn: repltest
sn: repltest
mail: repltest@k8scc.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: bGltaWtlamk=
shadowLastChange: 17763
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1099
gidNumber: 1099
homeDirectory: /home/repltest

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1


### 查看同步日志
tail -f 30 /var/log/slapd.log



4.2 可不创建 ,按照自己需求创建, 设置只读用户

cat >readOnly.ldif <<EOF
dn: cn=read,dc=k8scc,dc=com
cn: read
objectClass: simpleSecurityObject
objectClass: organizationalRole
description: LDAP read only user
userPassword: "自己设置明文密码"
<EOF
<br>

cat >readonly-user-acl.ldif <<EOF
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange 
 by dn="cn=admin,dc=k8scc,dc=com" write 
 by anonymous auth 
 by self write 
 by dn="cn=read,dc=k8scc,dc=com" read 
 by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=k8scc,dc=com" write by * read
<EOF



4.3 取消 普通用户的读取限制

cat >setOlcSizeLimit.ldif  <<EOF
dn: cn=config
changetype: modify
add: olcSizeLimit
olcSizeLimit: unlimited
EOF



5.0 卸载ldap

### 卸载
systemctl stop slapd
systemctl disable slapd

# 卸载
yum -y remove openldap-servers openldap-clients

# 删除残留文件
rm -rf /var/lib/ldap

# 删除ldap用户
userdel ldap

# 删除openldap目录
rm -rf /etc/openldap

# 如果需要重新安装需要先执行,不然无法执行
mkdir /etc/openldap/certs
/usr/libexec/openldap/create-certdb.sh
/usr/libexec/openldap/generate-server-cert.sh
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel  -y
systemctl enable --now slapd  && slapd -VV
systemctl start slap



6.0 docker-compose快速安装openldap

### 生产docker-compose文件
cat >docker-compose.yaml<<EOF
version: "3.5"
services:
  ldap:
    image: osixia/openldap
    container_name: ldap
    hostname: ldap
    privileged: true
    user: root
    ports:
      - 389:389
      - 636:636
    environment:
      - LDAP_ORGANISATION=k9s
      - LDAP_DOMAIN=k9s.cn
      - LDAP_ADMIN_USERNAME=admin
      - LDAP_ADMIN_PASSWORD=123456
      - LDAP_READONLY_USER_USERNAME=readonly
      - LDAP_READONLY_USER_PASSWORD=readonly
      - SET_CONTAINER_TIMEZONE=true
      - CONTAINER_TIMEZONE=Asia/Shanghai
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./ldap:/var/lib/ldap:Z
      - ./slapd.d:/etc/ldap/slapd.d:Z
    restart: always
    tty: true
EOF

### 启动服务
docker-compose  up  -d 



6.1.0 jenkins集成ldap

### 安装jenkins

cat >docker-compose.yaml<<EOF
version: '3'
services:                                      # 集合
  docker_jenkins:
    user: root                                 # 为了避免一些权限问题 在这我使用了root
    restart: always                            # 重启方式
    image: jenkins/jenkins:lts                 # 指定服务所使用的镜像 在这里我选择了 LTS (长期支持)
    container_name: jenkins                    # 容器名称
    ports:                                     # 对外暴露的端口定义
      - 8082:8080                              # 访问Jenkins服务端口
      - 50000:50000
    volumes:                                   # 卷挂载路径
      - /var/vol_dockers/jenkins_home/:/var/jenkins_home  # 这是我们一开始创建的目录挂载到容器内的jenkins_home目录
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker                # 这是为了我们可以在容器内使用docker命令
      - /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
EOF

### 启动服务
docker-compose  up  -d 



6.1.0 安装插件

### 1. 需要安装Role-based Authorization插件
### 2. 需要安装Openldap插件

image.png
image.png

6.1.1 使用LdapAdmin工具创建用户和组

创建ou=group, gorup下面再创ou=jenkins,jenkins下面创建三个组
创建ou=people, people 创建四个用户, 把用户分别加入不通的组, 并设置用户的密码,我这里设置的用户名密码都是123456
image.png


6.1.2 配置jenkins

image.png
image.png
image.png



6.1.3 测试登录jenkins

image.png

posted @ 2023-03-14 16:51  レモン  阅读(249)  评论(0编辑  收藏  举报
Title