Docker部署Kafka Connect连接SQL Server Windows认证报错求助
解决Docker中Kafka Connect jTDS Windows认证的Kerberos Realm错误
针对你遇到的GSS Failed: Invalid name provided (Mechanism level: KrbException: Cannot locate default realm)错误,核心问题是Docker容器缺少Kerberos域环境的配置,以下是具体解决步骤:
1. 配置Kerberos客户端文件
Docker容器默认没有Kerberos配置,需要手动创建krb5.conf文件来指定域信息:
[libdefaults] default_realm = YOUR_DOMAIN.COM # 替换成你的AD域,必须大写 dns_lookup_kdc = true dns_lookup_realm = true ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] YOUR_DOMAIN.COM = { kdc = dc.your-domain.com # 替换成域控制器的主机名/IP admin_server = dc.your-domain.com } [domain_realm] .your-domain.com = YOUR_DOMAIN.COM your-domain.com = YOUR_DOMAIN.COM
将这个文件挂载到Docker容器的默认Kerberos配置路径,比如在docker-compose.yml中添加:
volumes: - ./krb5.conf:/etc/krb5.conf
2. 修正jTDS连接URL
在Kafka Connect的JDBC配置里,明确指定域和认证方式,避免依赖自动检测:
connection.url=jdbc:jtds:sqlserver://your-sql-server:1433/your-db-name;domain=YOUR_DOMAIN;useNTLMv2=true;authentication=NTLM
注意domain值要和krb5.conf里的default_realm保持一致(大写)。
3. 确保容器网络与域连通
- 检查Docker容器能否ping通域控制器的IP/主机名
- 验证域控制器的KDC端口(默认88/UDP、TCP)是否能访问,可在容器内用
telnet dc.your-domain.com 88测试 - 如果容器处于自定义Docker网络,确保该网络能路由到域网络;必要时可使用
network_mode: host(仅限测试或允许的场景)
4. 同步容器时间与域控制器
Kerberos对时间差敏感(默认允许5分钟以内),需确保容器时间和域控制器一致:
- 挂载主机的时间文件:
- /etc/localtime:/etc/localtime:ro - 或者在容器内配置NTP服务同步域控制器时间
5. 验证Kerberos票据获取(可选)
进入Docker容器,执行以下命令测试Kerberos配置是否生效:
kinit your-domain-user@YOUR_DOMAIN.COM
输入用户密码后,用klist查看是否成功获取TGT票据,若成功则说明Kerberos配置正常。
内容的提问来源于stack exchange,提问作者user284331
相关产品推荐
相关产品推荐

