当前位置: 首页 > 知识库问答 >
问题:

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

寿元白
2023-03-14

我试图用SSL (TLS)在节点间以及节点和客户端之间配置Kafka节点,但是遇到了配置问题。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

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

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

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

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

org . Apache . Kafka . common . config . config exception:只能设置inter.broker.listener.name和security.inter.broker.protocol中的一个。

在这个问题上,我花了几个小时。我已经将我的设置与网络上应该演示具有SSL配置的Kafka的几个示例进行了比较。

知道吗?

共有1个答案

龚联
2023-03-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

这样做的关键是不要配置KAFKA _ SECURITY _ INTER _ BROKER _ PROTOCOL,因为它与KAFKA _ INTER _ BROKER _ LISTENER _ NAME密钥是互斥的。

在多个听众的情况下,似乎需要KAFKA_LISTENER_SECURITY_PROTOCOL_MAP和KAFKA_INTER_BROKER_LISTENER_NAME的结合。

 类似资料:
  • 我试图连接到一个Kafka集群通过SASL_SSL协议与jaas配置如下: 上面的配置与Spring-Cloud-stream官方git repo上提供的示例配置是内联的。 在库的git repo上提出的类似问题说,它在最新版本中已经修复,但似乎没有。得到以下错误: SpringBootVersion: 2.2.8和Spring-Cloud-stream-依赖版本-Horsham。SR6. 这让我

  • 我正在尝试为Kafka Connect REST API(2.11-2.1.0)配置SSL。 问题所在 我尝试了两种配置(工人配置): 带有前缀 < li >并且不带< code>listeners.https.前缀 两种配置都启动正常,并在尝试连接到https://localhost:9000时显示以下异常: 在日志中,我看到SslContextWorks是使用任何密钥库创建的,但使用密码: 因

  • 我试图配置SASL/PLAIN与SSL在我们的Kafka环境。SSL部分已经完成,但是我在启动动物园管理员时遇到了以下错误。 有人为动物园管理员和经纪人配置了SASL/PLAIN和SSL吗? 服务器代理配置 动物园管理员配置 JAAS动物园管理员配置文件 JAAS代理配置文件 启动错误 代理启动命令 环境变量 第1学期 在2号航站楼

  • 我的设置: JDK 11.0.6 Spring护套2.2.4.释放 Springkafka 2.4.1 我已经在PLAINTEXT中验证了我的Zookeeper/Kafka/client应用程序,一切正常。我还用Kafka客户端工具验证了我的密钥库/信任库。 我正在使用KafkaAdmin bean配置我的主题,它似乎在SSL连接上失败了: 我的两个JKS文件位于项目的src/main/resou

  • 我正在尝试用Kafka客户端设置一个Spring Boot应用程序以使用SSL。我有我的密钥库。jks和信任库。jk存储在文件系统(docker容器上)上,因为:https://github.com/spring-projects/spring-kafka/issues/710 以下是我的application.yml: 但是当我启动应用程序(在docker容器中)时,它说: 我检查了容器,.jk

  • 我试图在我的Spring应用程序中设置一个带有SSL加密的Ignite集群。我的目标是在几个节点上建立一个复制缓存。 我们将应用程序部署到Tomcat8中,并在Tomcat启动时为密钥和信任库设置环境变量。