Docker部署的Keycloak无法连接LDAP,容器内LDAP测试正常
你已经通过容器内的ldapwhoami确认了LDAP连通性没问题,但Keycloak配置里就是连不上,我遇到过类似的情况,大概率是这几个原因:
Docker网络模式的坑
如果你的Keycloak容器用的是默认的bridge网络,有时候会出现容器内命令能通,但应用层(比如Keycloak)访问异常的情况。可以试试把容器切换到host网络模式启动,或者确保LDAP服务器所在的网络和Keycloak容器的网络是互通的(比如把容器加入到LDAP所在的自定义Docker网络里)。另外,也可以在容器里用ping ldap.domain.com或者telnet ldap.domain.com 389再确认一遍网络连通性,排除偶发的网络波动。绑定DN格式不匹配
你用ldapwhoami返回的是u:GLB\ldap_srv_user,这是Windows AD风格的身份格式,但Keycloak的LDAP配置里,绑定DN需要填写标准的LDAP DN格式,比如CN=ldap_srv_user,OU=ServiceAccounts,DC=domain,DC=com(具体要根据你的LDAP目录结构调整)。很多人会直接把Windows风格的用户名填进去,导致Keycloak无法正确完成绑定认证,进而出现连接拒绝的错误。Keycloak的LDAP配置细节遗漏
检查Keycloak里的LDAP配置:- 确认绑定类型选的是
simple(和你ldapwhoami用的-x简单绑定对应); - 检查是否勾选了使用LDAP STARTTLS或者启用SSL,如果你的LDAP服务器没开这些,开启的话会导致连接失败;
- 验证用户搜索基准DN、组搜索基准DN这些路径是否正确,有时候路径错误也会被返回成连接拒绝(虽然本质是认证或搜索失败,但错误提示可能混淆)。
- 确认绑定类型选的是
LDAP服务器的访问策略
虽然容器内命令能通,但有些LDAP服务器(尤其是AD)会对绑定来源的客户端有额外限制,比如需要特定的Kerberos票据,或者对应用层的请求有速率限制。可以查看LDAP服务器的日志,看看有没有Keycloak发起的连接请求记录,从服务器端排查拒绝原因。
内容的提问来源于stack exchange,提问作者TheMP

