如何覆盖Schema Registry主节点访问的主机名端口 解决跨K8s集群访问失败
Schema Registry跨K8s集群部署转发请求失败解决方案
你遇到的报错根因是Confluent Schema Registry的跨实例转发逻辑默认会读取每个实例注册到Kafka元数据中的host.name和内部监听端口来拼接转发地址,你主节点配置的是Pod内部IP和默认8081端口,这两个地址跨K8s集群不可达,所以从节点转发请求超时。
配置修改步骤
不需要改动现有业务配置,只需要在主Schema Registry的配置文件中新增两个专门用于跨实例通信的配置项即可:
# 配置跨实例访问时主节点对外暴露的可达IP/域名,填主集群NodePort服务对应的跨集群可访问地址 schema.registry.inter.instance.host.name=<主集群节点跨集群可达IP或自定义域名> # 配置跨实例访问时主节点对外暴露的端口,填你给主Schema Registry设置的NodePort端口 schema.registry.inter.instance.port=<主Schema Registry的NodePort端口,例如30081>
注意事项
- 上述两个配置项在你使用的6.0.0版本原生支持,优先级高于默认的
host.name和内部监听端口,修改后不会影响主集群内部的Schema Registry通信 - 配置修改后需要重启主Schema Registry实例,新的访问地址会同步到Kafka的元数据中,从节点后续转发请求时会自动使用新的对外地址
- 请提前确认从集群的网络策略、防火墙规则已放通到上述配置的主节点地址+端口的访问权限
如果你的集群部署了多个主实例(leader eligibility为true的实例),需要给每个主实例单独配置对应自己对外暴露的访问地址和端口。
内容的提问来源于stack exchange,提问作者tboon
相关产品推荐
相关产品推荐

