我正试图通过舵图在kubernetes上设置OpenLDAP。
它正确地部署,并且我能够通过端口389 (未加密的)访问服务器,既可以本地访问容器内的服务器,也可以访问集群中的phpldapadmin等其他容器(通过URL: openldap.ldap.svc.cluster.local)。
但是,我无法使用tls访问它。在容器中,如果运行以下命令:ldapsearch -x -ZZ,则在日志中得到如下信息:
5e2e6f05 conn=1035 fd=15 ACCEPT from IP=127.0.0.1:44820 (IP=0.0.0.0:389)
5e2e6f05 conn=1035 op=0 EXT oid=1.3.6.1.4.1.1466.20037
5e2e6f05 conn=1035 op=0 STARTTLS
5e2e6f05 conn=1035 op=0 RESULT oid= err=0 text=
TLS: can't accept: (unknown error code).
5e2e6f05 conn=1035 fd=15 closed (TLS negotiation failure)同样,在openLDAP容器本身的本地,如果我尝试ldapsearch -x -H ldaps://localhost -b "dc=domain,dc=com",就会得到:
5e2e6a87 conn=1138 fd=15 ACCEPT from IP=127.0.0.1:45638 (IP=0.0.0.0:636)
TLS: can't accept: (unknown error code).
5e2e6a87 conn=1138 fd=15 closed (TLS negotiation failure)我不知道下一步要检查什么来调试它。我看到的一个问题是,在docker容器中,应该使用--hostname参数来运行它,但我不认为舵机图会这样做,我也不知道是否需要设置主机名。也许它不喜欢这样的事实,我是通过主机名localhost访问,而不是ldap.domain.com,即证书的域名。如果是这样的话,我仍然不确定如何将主机名设置为ldap,假设这就是我需要做的。
我安装了这个图表:https://github.com/helm/charts/tree/master/stable/openldap
,它基于这个码头映像:https://github.com/osixia/docker-openldap
并为舵图设置下列参数:
existingSecret: openldap-admin-pass
tls.enabled: true
tls.secret: ldap-tls
persistence.enabled: true
persistence.accessMode: ReadWriteMany
persistence.existingClaim: openldap-vol我还更改了配置映射,以便使LDAP_DOMAIN = domain.com
证书本身由证书管理器从“让我们加密”生成。证书的域名是ldap.domain.com。它是使用来自cloudflare的DNS验证进行签名的,是一个有效的证书。
服务器启动日志不显示任何错误,它看起来像是正确导入了TLS配置和证书:https://pastebin.com/raw/q9iEZCGN
会很感激你的帮助。谢谢。
发布于 2020-01-29 23:25:49
我在这里找到了解决方案:https://github.com/osixia/docker-openldap/issues/105
必须在openLDAP容器上设置一个环境变量: LDAP_TLS_VERIFY_CLIENT=try
否则,它将期望客户端也拥有自己的证书。
https://unix.stackexchange.com/questions/564290
复制相似问题