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

Chr*_*rds 4 apache-kafka kubernetes kubernetes-helm

我正在使用这个舵图: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";
Run Code Online (Sandbox Code Playgroud)

基于此文档: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";
Run Code Online (Sandbox Code Playgroud)

问题是,当我启动 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
Run Code Online (Sandbox Code Playgroud)

根据优先顺序,如果没有设置上面的配置,它应该使用静态 jas 文件。

If JAAS configuration is defined at different levels, the order of precedence used is:
Run Code Online (Sandbox Code Playgroud)
  • 代理配置属性 listener.name.{listenerName}.{saslMechanism}.sasl.jaas.config
  • {listenerName}.KafkaServer 静态 JAAS 配置部分
  • 静态 JAAS 配置的 KafkaServer 部分

helm chart 不支持配置此 jaas 文件的方法,因此使用此属性似乎是所需的方法,我只是对配置不正确的内容感到困惑。

注意:如果我禁用所有 SASL 并仅使用纯文本,则集群可以正常工作,但这在实际环境中效果不佳。

Mic*_*son 5

我们定义了 2 个侦听器:PLAINTEXTEXTERNAL. 您已将两者都映射到SASL_PLAINTEXT.

这真的是你想做的吗?或者你不想PLAINTEXT要求 SASL 而只是纯文本?

  • 如果您真的希望两者都是 SASL,那么它们都需要 JAAS 配置。在您的问题中,我只看到 EXTERNAL 的 JAAS 配置:

    listener.name.EXTERNAL.scram-sha-256.sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username="user" password="password";
    
    Run Code Online (Sandbox Code Playgroud)

    当您映射PLAINTEXT到 SASL_PLAINTEXT 时,它还需要 JAAS 配置。您可以使用例如:

     listener.name.PLAINTEXT.scram-sha-256.sasl.jaas.config: org.apache.kafka.common.security.scram.ScramLoginModule required username="user" password="password";
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果您希望您的PLAINTEXT侦听器实际上是没有 SASL 的纯文本,那么您需要更新侦听器映射:

    listener.security.protocol.map: |-
      PLAINTEXT:PLAINTEXT,EXTERNAL:SASL_PLAINTEXT
    
    Run Code Online (Sandbox Code Playgroud)