无法使用 SSL 在 Kafka 中找出 inter.broker.listener.name 的设置

Chr*_*oph 10 ssl apache-kafka

我正在尝试使用 SSL (TLS) 节点间以及节点和客户端之间配置 Kafka 节点,但遇到了配置问题。卡夫卡版本是 2.3.0。我的相关设置是:

      - KAFKA_BROKER_ID=1
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_LISTENERS=LISTENER_INTERNAL://kafka1:9092,LISTENER_EXTERNAL://kafka1:29092
      - KAFKA_ADVERTISED_LISTENERS=LISTENER_INTERNAL://kafka1:9092,LISTENER_EXTERNAL://localhost:29091
      - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=LISTENER_INTERNAL:SSL,LISTENER_EXTERNAL:SSL
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
      - KAFKA_AUTO_CREATE_TOPICS_ENABLE=false
      - KAFKA_SSL_TRUSTSTORE_LOCATION=/var/private/ssl/server.truststore.jks
      - KAFKA_SSL_TRUSTSTORE_PASSWORD=changeit
      - KAFKA_SSL_KEYSTORE_LOCATION=/var/private/ssl/server.keystore.jks
      - KAFKA_SSL_KEYSTORE_PASSWORD=changeit
      - KAFKA_SSL_KEY_PASSWORD=changeit
      - KAFKA_SECURITY_INTER_BROKER_PROTOCOL=SSL
      - KAFKA_SSL_CLIENT_AUTH=required
Run Code Online (Sandbox Code Playgroud)

仅供参考,为简单起见,我从实例化 Kafka 容器的 docker-compose 文件中复制了设置。环境变量 1:1 映射到 server.properties 中的属性。在容器启动期间,这些设置将应用于 server.properties 文件。

当我开始使用此配置时,我收到以下错误消息:

java.lang.IllegalArgumentException:要求失败:inter.broker.listener.name 必须是advertised.listeners 中定义的侦听器名称。基于当前配置的监听器的有效选项是 LISTENER_INTERNAL,LISTENER_EXTERNAL

当我将inter.broker.listener.name属性设置为INTERNAL_LISTENERSSLnull或空字符串时,我收到以下错误消息:

org.apache.kafka.common.config.ConfigException:只应设置 inter.broker.listener.name 和 security.inter.broker.protocol 之一。

我在这个问题上花了几个小时。我将我的设置与网上那些应该用 SSL 配置演示 Kafka 的几个例子进行了比较。

任何的想法?

Chr*_*oph 14

我终于想出了如何拥有多个 SSL 侦听器。我会在这里记录这个以防其他人遇到同样的问题,因为多个 SSL 侦听器的工作示例似乎很少甚至不存在。以下是我的工作配置(仅显示从 docker-compose 传递的相关属性):

ALLOW_PLAINTEXT_LISTENER=no
KAFKA_LISTENERS=ISSL://kafka1:9092,OSSL://kafka1:29092
KAFKA_ADVERTISED_LISTENERS=ISSL://kafka1:9092,OSSL://localhost:29092
KAFKA_INTER_BROKER_LISTENER_NAME=ISSL
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=ISSL:SSL,OSSL:SSL
KAFKA_SSL_CLIENT_AUTH=required
Run Code Online (Sandbox Code Playgroud)

关键是不要配置KAFKA_SECURITY_INTER_BROKER_PROTOCOL,因为它与KAFKA_INTER_BROKER_LISTENER_NAME键是互斥的。

在多个侦听器的情况下,似乎需要KAFKA_LISTENER_SECURITY_PROTOCOL_MAPKAFKA_INTER_BROKER_LISTENER_NAME的组合。