k8s中部署kafka单机和zookeeper单机,并开启SASL认证
时间: 2025-07-08 10:35:47 浏览: 3
<think>嗯,用户想在Kubernetes里部署带有SASL认证的单节点Kafka和Zookeeper。首先,我需要回忆一下Kafka和Zookeeper在K8s中的部署方法,以及如何配置SASL认证。
首先,Kafka通常依赖Zookeeper,所以可能需要先部署Zookeeper。单节点的话,可以使用StatefulSet或者Deployment,但考虑到数据持久化,StatefulSet可能更合适。不过用户可能只需要单节点,所以Deployment加持久卷声明(PVC)应该也行。
然后,SASL认证部分,Kafka支持多种机制,比如PLAIN、SCRAM等。需要生成对应的用户和密码,并配置到Kafka和Zookeeper的配置文件中。可能还需要创建Kubernetes的Secret来存储这些凭证,这样安全一些。
接下来,用户提到的引用中有关于Docker Compose启动Kafka和Zookeeper的内容,但用户需要的是K8s部署,所以需要转换这些配置到K8s的YAML文件。比如,Docker Compose中的环境变量和卷挂载,需要对应到K8s的ConfigMap和Secret。
另外,引用中提到SSL证书的存放位置,可能需要用户提供自己的证书,或者使用自签名证书。不过用户的问题是关于SASL认证,可能不需要SSL,但安全起见,可能还是需要配置SSL。不过用户可能只关注SASL,所以暂时先处理SASL部分。
然后,Kafka和Zookeeper的通信也需要配置SASL,所以Zookeeper也需要启用SASL。这可能需要两者都配置JAAS文件,并且设置相应的环境变量。
接下来,编写K8s的配置文件,包括Zookeeper和Kafka的Deployment、Service,以及相关的ConfigMap和Secret。比如,Zookeeper的配置需要启用SASL,Kafka的配置需要连接到Zookeeper并使用SASL认证。
在生成Secret时,需要将JAAS配置文件、用户密码等敏感信息存储为Secret,而不是ConfigMap,因为ConfigMap是明文存储的。例如,使用kubectl create secret generic命令创建包含用户名和密码的Secret。
然后,测试部署后的Kafka是否正常工作,可能需要进入Pod内部使用kafka-console-producer和consumer来测试SASL认证是否生效。例如,配置client.properties文件,包含SASL配置,然后使用命令行工具测试生产和消费消息。
此外,用户可能还关心持久化存储,所以需要为Zookeeper和Kafka配置PVC,确保数据在Pod重启后不丢失。
可能遇到的问题包括:SASL配置错误导致Kafka和Zookeeper无法通信,JAAS文件路径不正确,或者环境变量未正确设置。这时候需要查看Pod的日志,排查错误原因。
总结步骤应该是:准备配置文件(JAAS、server.properties等)→ 创建Secret存储凭证 → 部署Zookeeper和Kafka的Deployment和Service → 验证SASL认证是否生效。</think>### 在Kubernetes中部署带SASL认证的单节点Kafka与Zookeeper
#### 1. 准备工作
- **创建Kubernetes Secret存储凭证**
生成SASL用户名/密码并加密存储:
```bash
kubectl create secret generic kafka-sasl-secret \
--from-literal=zookeeper-user=admin \
--from-literal=zookeeper-password=admin-secret \
--from-literal=kafka-user=user1 \
--from-literal=kafka-password=user1-secret
```
- **生成JAAS配置文件**
Zookeeper的JAAS配置(`zookeeper-jaas.conf`):
```
Server {
org.apache.zookeeper.server.auth.DigestLoginModule required
user_admin="admin-secret";
};
```
Kafka的JAAS配置(`kafka-jaas.conf`):
```
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="user1"
password="user1-secret"
user_user1="user1-secret";
};
```
#### 2. 部署Zookeeper
```yaml
# zookeeper-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: zookeeper
spec:
replicas: 1
selector:
matchLabels:
app: zookeeper
template:
metadata:
labels:
app: zookeeper
spec:
containers:
- name: zookeeper
image: bitnami/zookeeper:latest
env:
- name: ALLOW_ANONYMOUS_LOGIN
value: "no"
- name: ZOO_SASL_ENABLED
value: "true"
- name: ZOO_AUTH_PROVIDER
value: "org.apache.zookeeper.server.auth.SASLAuthenticationProvider"
volumeMounts:
- name: zookeeper-jaas
mountPath: /opt/bitnami/zookeeper/conf/zookeeper-jaas.conf
subPath: zookeeper-jaas.conf
volumes:
- name: zookeeper-jaas
secret:
secretName: kafka-sasl-secret
items:
- key: zookeeper-jaas.conf
path: zookeeper-jaas.conf
---
# zookeeper-service.yaml
apiVersion: v1
kind: Service
metadata:
name: zookeeper
spec:
ports:
- port: 2181
targetPort: 2181
selector:
app: zookeeper
```
#### 3. 部署Kafka
```yaml
# kafka-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka
spec:
replicas: 1
selector:
matchLabels:
app: kafka
template:
metadata:
labels:
app: kafka
spec:
containers:
- name: kafka
image: bitnami/kafka:latest
env:
- name: KAFKA_CFG_SASL_ENABLED_MECHANISMS
value: "PLAIN"
- name: KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL
value: "PLAIN"
- name: KAFKA_CFG_ZOOKEEPER_CONNECT
value: "zookeeper:2181"
- name: KAFKA_OPTS
value: "-Djava.security.auth.login.config=/opt/bitnami/kafka/config/kafka-jaas.conf"
volumeMounts:
- name: kafka-jaas
mountPath: /opt/bitnami/kafka/config/kafka-jaas.conf
subPath: kafka-jaas.conf
volumes:
- name: kafka-jaas
secret:
secretName: kafka-sasl-secret
items:
- key: kafka-jaas.conf
path: kafka-jaas.conf
---
# kafka-service.yaml
apiVersion: v1
kind: Service
metadata:
name: kafka
spec:
ports:
- port: 9092
targetPort: 9092
selector:
app: kafka
```
#### 4. 验证SASL认证
进入Kafka Pod执行以下命令:
```bash
kafka-console-producer --bootstrap-server localhost:9092 \
--topic test \
--producer.config /opt/bitnami/kafka/config/producer.properties
```
在`producer.properties`中配置SASL:
```
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="user1" password="user1-secret";
```
####
阅读全文
相关推荐


















