helm安装openldap

简介

OpenLDAP是轻型目录访问协议(Lightweight Directory Access Protocol,LDAP)的自由和开源的实现,在其OpenLDAP许可证下发行,并已经被包含在众多流行的Linux发行版中。如果你理解微软的AD,那么他将提供和AD类似的功能。

架构图

openLDAP server配置

cert-manager生成证书

CA证书生成过程可以参考cert-manager中CA部分,此处直接通过CA的issuer创建服务器所需的certificates,其中secretName后面会用到,commonName可以写ldap server的域名

1
2
3
4
5
6
7
8
9
10
11
12
13
$ cat openldap-server-cert.yaml
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
name: hq-opnldap1
namespace: default
spec:
secretName: hq-openldap1
issuerRef:
name: ca-issuer
kind: Issuer
commonName: hqopenldap.com
$ kubectl apply -f openldap-server-cert.yaml

helm安装openldap

1
2
3
4
5
6
7
$ helm repo list
NAME URL
stable http://mirror.azure.cn/kubernetes/charts/
local http://127.0.0.1:8879/charts
ali-incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
ali-stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
jetstack https://charts.jetstack.io

注意:若没有则添加仓库

1
$ helm repo add stable http://mirror.azure.cn/kubernetes/charts/
  • 查找openldap chart,并下载到本地
1
2
3
4
5
6
$ helm search openldap
NAME CHART VERSION APP VERSION DESCRIPTION
stable/openldap 1.2.3 2.4.48 Community developed LDAP software
$ helm fetch stable/openldap
# 解压文件
$ tar -xzvf openldap-1.2.3.tgz
  • 修改chart中的values.yaml文件
1
2
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
$ cd openldap
$ cat values.yaml |grep -v '^ *#'|grep -v '^$'
replicaCount: 1
strategy: {}
image:
repository: osixia/openldap
tag: 1.2.4
pullPolicy: IfNotPresent
existingSecret: ""
tls:
enabled: true
secret: "hq-openldap1" # The name of a kubernetes.io/tls type secret to use for TLS
CA:
enabled: false
secret: "ca-key-pair" # The name of a generic secret to use for custom CA certificate (ca.crt)
extraLabels: {}
podAnnotations: {}
service:
annotations: {}
clusterIP: ""
ldapPort: 389
sslLdapPort: 636 # Only used if tls.enabled is true
externalIPs: []
loadBalancerIP: ""
loadBalancerSourceRanges: []
type: ClusterIP
env:
LDAP_ORGANISATION: "Example Inc."
LDAP_DOMAIN: "stopenldap.com"
LDAP_BACKEND: "hdb"
LDAP_TLS: "true"
LDAP_TLS_ENFORCE: "false"
LDAP_REMOVE_CONFIG_AFTER_SETUP: "true"
adminPassword: admin
configPassword: config
persistence:
enabled: true
accessMode: ReadWriteOnce
size: 2Gi
resources: {}
initResources: {}
nodeSelector:
run: openldap
tolerations: []
affinity: {}
test:
enabled: true
image:
repository: dduportal/bats
tag: 0.4.0

主要修改的地方有:1.tls.enabled: true 启动tls认证

​ 2.tls.secret: hq-openldap1 tls认证证书的secret,为cert-manager生成secertNAME

​ 3.env.LDAP_DOMAIN: "stopenldap.com" ldap DN名称

​ 4.adminPassword: admin admin的密码

​ 5.configPassword: config config的密码

​ 6.persistence.enabled:true 设置持久化存储,默认时候default storageclass

​ 7. persistence.size:2G 持久化存储大小

  • 安装

在当前目录下执行helm install安装

1
$ helm install --name hqopenldap --namespace default .

* 快速安装 *
如果不想本地保存chart,而是直接安装则可执行以下命令,其中env.LDAP_TLS_VERIFY_CLIENT=try表示client可以没有证书。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>$ helm install --name hqopenldap \
>--namespace default \
>--set tls.enabled=true \
>--set tls.secret=hq-openldap1 \
>--set env.LDAP_DOMAIN=stopenldap.com \
>--set adminPassword=admin \
>--set configPassword=config \
>--set persistence.enabled=true \
>--set persistence.size=2Gi \
>--set env.LDAP_TLS_VERIFY_CLIENT=try \
>stable/openldap



检查是否启动成功

```bash
$ kubectl get pod -l app=openldap
NAME READY STATUS RESTARTS AGE
hqopenldap-85d59d49b4-6jl7c 1/1 Running 0 138m

客户端测试

签发客户端所需的证书和私钥

此处所使用的CA issuer和ldap server中所使用的CA需要为同一个,commonName可以自行定义,不同客户取名不同

1
2
3
4
5
6
7
8
9
10
11
12
$ cat client-cert.yaml
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
name: openldap-client1
namespace: default
spec:
secretName: client-test1
issuerRef:
name: ca-issuer
kind: Issuer
commonName: ldapadmin

导出证书文件

由于测试是使用本地安装的LDAP Admin Tool,所有需要把k8s中生成的证书文件拿下来

  • 导出证书
1
$ kubectl get secret/client-test1 -o jsonpath="{['data']['tls\.crt']}"|base64 --decode > ldap.crt
  • 导出私钥
1
$ kubectl get secret/client-test1 -o jsonpath="{['data']['tls\.key']}"|base64 --decode > ldap.key

注意: 由于LDAP Admin Tool使用的私钥为pkcs#8,所以需要将私钥转换下

1
$ openssl pkcs8 -topk8 -inform PEM -in ldap.key -outform pem -nocrypt -out ldap.pem

LDAP Admin Tool连接

  • 导入证书和私钥

Security->manage client certificates->Add Certificate 导入证书

Security->manage client certificates->鼠标选中证书-Set Private Key 导入私钥

  • 连接LDAP server

连接信息中:Base DN: dc=stopenldap,dc=com 参照helm values.yamlenv.LDAP_DOMAIN

​ User DN: cn=admin,dc=stopenldap,dc=com 参照helm values.yamlenv.LDAP_DOMAIN

​ Port: 636

​ Password: admin 参照helm values.yamladminPassword

说明

ldap server启动TLS时,默认需要验证client端的证书,若不想给客户端签发证书,可通过设置server端不验证证书即可,可以通过添加values.yaml中的一个参数设置:env.LDAP_TLS_VERIFY_CLIENT: "try"

never:不验证客户端证书。

allow:检查客户端证书,没有证书或证书错误,都允许连接。

try:检查客户端证书,没有证书(允许连接),证书错误(终止连接)。

demand | hard | true:检查客户端证书,没有证书或证书错误都将立即终止连接。

helm 安装的openldap默认为demand。