我们在生产中有一个Kafka集群,没有任何安全性。我们计划在代理端启用安全性(SASL/OAUTHBEARER(。但看起来,一旦我们打开经纪人端的安全性,所有不安全的客户端都会立即被删除。为了在没有任何停机的情况下从不安全集群平稳过渡到安全集群,我们希望Kafka客户端首先启用安全性。一旦我们所有的客户都迁移了,我们就可以在代理级别启用安全性。然而,我找不到一种安全的客户可以与不安全的经纪人交谈的方式。有人这样做过吗?关于顺利过渡到生产安全,有什么想法吗?
在Kafka 2.0中,允许以下协议组合:
+------------------+-------+-----------+
| | SSL | Kerberos |
+------------------+-------+-----------+
| PLAINTEXT | No | No |
| SSL | Yes | No |
| SASL_PLAINTEXT | No | Yes |
| SASL_SSL | Yes | Yes |
+------------------+-------+-----------+
这些组合适用于代理到代理和代理到客户端,但这里的密钥配置是security.inter.broker.protocol
,对于代理到代理以及代理到客户端不必相同。这意味着我们可以在Kafka集群中实现安全,而不需要任何停机时间。
启用Kerberos
- 步骤1:禁用代理到代理的安全性
security.inter.broker.protocol=PLAINTEXT
- 步骤2:在
server.properties
中为代理到客户端启用Kerberos - 第3步:滚动重新启动
- 步骤4:为代理到代理启用Kerberos
security.inter.broker.protocol=SASL_PLAINTEXT
启用SSL
- 步骤1:禁用代理到代理的安全性
security.inter.broker.protocol=PLAINTEXT
- 步骤2:在
server.properties
中为代理到客户端启用SSL - 第3步:滚动重新启动
- 第4步:为代理到代理启用SSL
security.inter.broker.protocol=SSL
在server.properites中设置以下属性将允许不安全的客户端连接到端口9097,并允许安全客户端连接到港口9096。
listeners=SASL_PLAINTEXT://:9096,PLAINTEXT://:9097