openLDAP服务搭建与使用
LDAP介绍
LDAP
LDAP是一种基于轻量目录访问协议,全称是Lightweight Directory Access Protocol,是由一个为查询、浏览和搜索而优化的数据库构成,它成树状结构组织数据,类似文件目录一样。
LDAP单点登录认证主要是改变原有的认证策略,使得需要的软件都通过LDAP服务器进行认证,在统一身份认证后,用户的所有信息都存储在AD Server中,终端用户在需要使用公司内部服务的时候,都需要通过AD服务器进行认证。
整个LDAP登录流程由以下4个步骤组成:
- 连接到LDAP服务器。
- 绑定到LDAP服务器。
- 在LDAP服务器上执行所需要的操作。
- 释放LDAP服务器的连接。
LDAP场景说明:
企业内部需要认证的服务很多,员工需要记住很多的密码, 即使对这些服务进行相同的密码设置,也存在很大的安全隐患。比如我们公司,有jira、confulence、gitlab、北森等系统,
使用场景是提高用户在同一个企业的多个站点(域名)之间的无缝浏览体验,例如企业内部可能有多个处理不同业务的系统(OA,邮箱,财务等),用户只要在一个系统上保持登录状态,即可无需再次登录访问其他内部系统。
openLDAP 是 LDAP 开源的一种实现
openLDAP 部署
在k8s中部署
部署文件如下
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 
 | kind: Deployment
 apiVersion: apps/v1
 metadata:
 name: ldap-server
 namespace: tool
 labels:
 app: ldap-server
 annotations:
 kubesphere.io/alias-name: LDAP
 kubesphere.io/description: 认证中心
 spec:
 replicas: 1
 selector:
 matchLabels:
 app: ldap-server
 template:
 metadata:
 labels:
 app: ldap-server
 spec:
 volumes:
 - name: volume-8aprj6
 persistentVolumeClaim:
 claimName: ldap-config-pvc
 - name: volume-hj6df3
 persistentVolumeClaim:
 claimName: ldap-data-pvc
 containers:
 - name: container-ad1z7z
 image: 'osixia-openldap:1.5.0'
 ports:
 - name: tcp-389
 containerPort: 389
 protocol: TCP
 - name: tcp-636
 containerPort: 636
 protocol: TCP
 env:
 - name: LDAP_ORGANISATION
 value: kwl
 - name: LDAP_DOMAIN
 value: kwl.com
 - name: LDAP_ADMIN_PASSWORD
 value: kwl123456
 - name: LDAP_CONFIG_PASSWORD
 value: kwl123456
 - name: LDAP_BACKEND
 value: mdb
 resources:
 limits:
 cpu: 500m
 memory: 500Mi
 requests:
 cpu: 100m
 memory: 100Mi
 volumeMounts:
 - name: volume-8aprj6
 mountPath: /etc/ldap/slapd.d
 - name: volume-hj6df3
 mountPath: /var/lib/ldap
 terminationMessagePath: /dev/termination-log
 terminationMessagePolicy: File
 imagePullPolicy: IfNotPresent
 restartPolicy: Always
 terminationGracePeriodSeconds: 30
 dnsPolicy: ClusterFirst
 serviceAccountName: default
 serviceAccount: default
 securityContext: {}
 imagePullSecrets:
 - name: local-harbor
 affinity: {}
 schedulerName: default-scheduler
 strategy:
 type: RollingUpdate
 rollingUpdate:
 maxUnavailable: 25%
 maxSurge: 25%
 revisionHistoryLimit: 10
 progressDeadlineSeconds: 600
 
 
 kind: Deployment
 apiVersion: apps/v1
 metadata:
 name: ldap-phpldapadmin
 namespace: tool
 labels:
 app: ldap-phpldapadmin
 annotations:
 kubesphere.io/alias-name: LDAP
 kubesphere.io/description: LDAP在线工具
 spec:
 replicas: 1
 selector:
 matchLabels:
 app: ldap-phpldapadmin
 template:
 metadata:
 labels:
 app: ldap-phpldapadmin
 spec:
 containers:
 - name: container-jojizv
 image: 'osixia-phpldapadmin:stable'
 ports:
 - name: tcp-443
 containerPort: 443
 protocol: TCP
 - name: tcp-80
 containerPort: 80
 protocol: TCP
 env:
 - name: PHPLDAPADMIN_HTTPS
 value: 'false'
 - name: PHPLDAPADMIN_LDAP_HOSTS
 value: 10.233.11.157
 resources:
 limits:
 cpu: 500m
 memory: 500Mi
 requests:
 cpu: 10m
 memory: 10Mi
 terminationMessagePath: /dev/termination-log
 terminationMessagePolicy: File
 imagePullPolicy: IfNotPresent
 securityContext:
 privileged: true
 restartPolicy: Always
 terminationGracePeriodSeconds: 30
 dnsPolicy: ClusterFirst
 serviceAccountName: default
 serviceAccount: default
 securityContext: {}
 imagePullSecrets:
 - name: local-harbor
 affinity: {}
 schedulerName: default-scheduler
 strategy:
 type: RollingUpdate
 rollingUpdate:
 maxUnavailable: 25%
 maxSurge: 25%
 revisionHistoryLimit: 10
 progressDeadlineSeconds: 600
 
 
 kind: Service
 apiVersion: v1
 metadata:
 name: ldap-server-svc
 namespace: tool
 labels:
 app: ldap-server-svc
 spec:
 ports:
 - name: tcp-389
 protocol: TCP
 port: 389
 targetPort: 389
 nodePort: 30944
 - name: tcp-636
 protocol: TCP
 port: 636
 targetPort: 636
 nodePort: 31282
 selector:
 app: ldap-server
 clusterIP: 10.233.11.157
 type: NodePort
 sessionAffinity: ClientIP
 externalTrafficPolicy: Cluster
 
 
 
 kind: Service
 apiVersion: v1
 metadata:
 name: ldap-phpldapadmin-svc
 namespace: tool
 labels:
 app: ldap-phpldapadmin-svc
 spec:
 ports:
 - name: tcp-80
 protocol: TCP
 port: 80
 targetPort: 80
 nodePort: 30581
 selector:
 app: ldap-phpldapadmin
 clusterIP: 10.233.51.71
 type: NodePort
 sessionAffinity: ClientIP
 externalTrafficPolicy: Cluster
 
 
 kind: PersistentVolumeClaim
 apiVersion: v1
 metadata:
 name: ldap-data-pvc
 namespace: tool
 labels:
 app: ldap-data-pvc
 spec:
 accessModes:
 - ReadWriteOnce
 resources:
 requests:
 storage: 10Gi
 volumeName: pvc-fb0aeff5-b4d5-4266-9801-4135ce1f4b0e
 storageClassName: local
 volumeMode: Filesystem
 
 
 kind: PersistentVolumeClaim
 apiVersion: v1
 metadata:
 name: ldap-config-pvc
 namespace: tool
 labels:
 app: ldap-config-pvc
 spec:
 accessModes:
 - ReadWriteOnce
 resources:
 requests:
 storage: 5Gi
 volumeName: pvc-040ff76c-7bdf-436b-984f-9897efa0bd16
 storageClassName: local
 volumeMode: Filesystem
 
 | 
openLDAP 使用
由于我们部署了phpldapadmin服务,我们直接通过phpldapadmin的网页来操作LDAP
访问集群节点IP+30581访问phpldapadmin
由于我们配置了LDAP服务环境变量,所以登录admim的账户密码为cn=admin,dc=kwl,dc=com/kwl123456
创建OpenLDAP基础域
创建OpenLDAP组
创建OpenLDAP用户(注意如果要用LDAP用于的邮箱进行登录,需要为用户新建Email额外字段和内容)
创建参考
使用wikijs验证LDAP登录
上面我们新建了LDAP用户zhan san, Email地址为zhansan@kwl.com, 密码为123456
进入wikijs的系统配置页面,选择身份验证配置,新建LDAP配置
这里我配置的是通过邮箱来作为账户登录,详细配置如下
| 配置参数 | 配置值 | 备注 | 
| LDAP URL | ldap://10.233.11.157:389 | LDAP 服务地址 | 
| Admin Bind DN | cn=admin,dc=kwl,dc=com | LDAP 管理员登录DN | 
| Admin password | kwl123456 |  | 
| Search Base | ou=user,dc=kwl,dc=com | LDAP 登录用户查询起始域 | 
| Search Filter | (mail=) | 这里我们判断的是填入的信息是否和邮箱匹配 | 
配置好之后,在wikijs使用LDAP登录项成功登录zhan san(zhansan@kwl.com/123456)用户则配置成功
参考
https://cloud.tencent.com/developer/article/1349446?from=information.detail.phpLDAPadmin
https://docs.requarks.io/auth/ldap
https://github.com/osixia/docker-openldap/tree/master/example/kubernetes