如何覆盖架构注册表主机访问主机名和端口

How to override schema registry master accessing hostname and port

我在不同的 k8s 集群上设置了 2 个模式注册表,并使用节点端口服务在 2 个集群之间进行通信。 我按照此处的步骤进行了多数据中心模式注册:https://docs.confluent.io/platform/6.0.0/schema-registry/multidc.html.

当辅助模式注册表(leader.eligibility: false)尝试将新模式注册转发到主模式注册表时,它使用最终失败的主模式注册表的内部 IP。我如何才能告诉我的辅助模式注册表使用可访问的主机名和端口号来连接主模式注册表?

我使用图像 confluentinc/cp-schema-registry:6.0.0.

主模式注册表配置:

host.name=10.X.X.X (internal IP of schema registry pod)
kafkastore.group.id=my-schema-registry
kafkastore.bootstrap.servers=PLAINTEXT://my-cluster-kafka-bootstrap:9092 (Primary Kafka Broker Internal Hostname)
avro.compatibility.level=NONE
schema.compatibility.level=NONE

辅助架构注册表配置:

host.name=10.X.X.X (internal IP of schema registry pod)
kafkastore.group.id=my-schema-registry
kafkastore.bootstrap.servers=PLAINTEXT://10.X.X.X:30292 (Primary Kafka Broker IP)
avro.compatibility.level=NONE
schema.compatibility.level=NONE
leader.eligibility=false

转发注册请求时模式注册表日志中出现错误。

ERROR Failed to send HTTP request to endpoint: http://10.X.X.X:8081/subjects/XXX/versions (io.confluent.kafka.schemaregistry.client.rest.RestService)
java.net.SocketTimeoutException: connect timed out
   at ... 

注意:无法从另一个集群访问内部端口 8081,因此我使用 NodePort 服务为不同集群上的两个模式注册表公开了不同的端口号。这就是我想覆盖从辅助模式注册表访问主服务器的端口号的原因。

经过一些研究,无法覆盖辅助模式注册表中的哪个端点或领导端点。但是我们可以覆盖主模式注册表上的端点详细信息,将在转发请求时与辅助模式注册表共享。

要覆盖主机名,请使用 host.name

要覆盖端口,请在 listeners 下添加新端口号。

参考https://docs.confluent.io/platform/current/schema-registry/installation/config.html#

listeners: http://0.0.0.0:30300,http://0.0.0.0:8081
host.name: <k8s IP address>

*30300 - NodePort 中使用的端口号

我需要在架构注册表要求的侦听器列表中保留 8081。