kafka在kubernetes上使用sasl.jaas.config配置jaas

7ajki6be  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(1353)

我用的是这个舵图:https://github.com/helm/charts/tree/master/incubator/kafka
以及values.yaml中的这些重写

configurationOverrides:
  advertised.listeners: |-
    EXTERNAL://kafka-${KAFKA_BROKER_ID}.host-removed:$((31090 + ${KAFKA_BROKER_ID}))
  listener.security.protocol.map: |-
    PLAINTEXT:SASL_PLAINTEXT,EXTERNAL:SASL_PLAINTEXT
  sasl.enabled.mechanisms: SCRAM-SHA-256
  auto.create.topics.enable: false
  inter.broker.listener.name: PLAINTEXT
  sasl.mechanism.inter.broker.protocol: SCRAM-SHA-256
  listener.name.EXTERNAL.scram-sha-256.sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username="user" password="password";

根据本文件:https://kafka.apache.org/documentation/#security_jaas_broker
(快速总结)

Brokers may also configure JAAS using the broker configuration property sasl.jaas.config. The property name must be prefixed with the listener prefix including the SASL mechanism, i.e. listener.name.{listenerName}.{saslMechanism}.sasl.jaas.config. Only one login module may be specified in the config value. If multiple mechanisms are configured on a listener, configs must be provided for each mechanism using the listener and mechanism prefix

listener.name.sasl_ssl.scram-sha-256.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
    username="admin" \
    password="admin-secret";

问题是,当我开始Kafka我得到以下错误:

java.lang.IllegalArgumentException: Could not find a 'KafkaServer' or 'plaintext.KafkaServer' entry in the JAAS configuration. System property 'java.security.auth.login.config' is not set

根据优先顺序,如果没有设置上述配置,则应该使用静态jass文件。

If JAAS configuration is defined at different levels, the order of precedence used is:

代理配置属性listener.name.{listenername}.{saslmechanism}.sasl.jaas.config
{listenername}.kafkaserver静态jaas配置的部分
静态jaas配置的kafkaserver部分
helm图表不支持配置这个jaas文件的方法,所以使用这个属性似乎是理想的方法,我只是对什么配置不正确感到困惑。
注意:如果我禁用所有sasl并只使用纯文本,集群就可以正常工作,但在实际环境中这不是很好。

w8f9ii69

w8f9ii691#

我们定义了两个侦听器: PLAINTEXT 以及 EXTERNAL . 您已将两者Map到 SASL_PLAINTEXT .
这真的是你想做的吗?还是你想要 PLAINTEXT 不需要sasl而只需要明文?
如果您真的希望两者都是sasl,那么它们都需要jaas配置。在您的问题中,我只看到外部的jaas配置:

listener.name.EXTERNAL.scram-sha-256.sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username="user" password="password";

正如你所描绘的 PLAINTEXT 对于saslèu纯文本,它还需要jaas配置。您可以使用指定,例如:

listener.name.PLAINTEXT.scram-sha-256.sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username="user" password="password";

如果你想要你的 PLAINTEXT 监听器实际上是没有sasl的纯文本,那么您需要更新监听器Map:

listener.security.protocol.map: |-
  PLAINTEXT:PLAINTEXT,EXTERNAL:SASL_PLAINTEXT

相关问题