helm部署kafka鉴权以及ACL

发布时间 2023-10-26 09:51:49作者: 坚强的小蚂蚁

官方文档
https://github.com/bitnami/charts/tree/main/bitnami/kafka

https://blog.csdn.net/u011618288/article/details/129105777 (包含zookeeper与broker认证、鉴权流程)

一. 修改values.yaml文件

按通用部署方案拉下来kafka安装包,修改values.yaml文件,开启scram鉴权,ACL以及nodePort外部访问

第17行
storageClass: "nfs-client"改为nfs
第210行
authorizerClassName: "kafka.security.authorizer.AclAuthorizer"
第213行
allowEveryoneIfNoAclFound: false
第233行
clientProtocol: "sasl"
236-237
externalClientProtocol: "sasl"
interBrokerProtocol: "sasl"
246行
interBrokerMechanism: scram-sha-256
257-258行,添加client用户
clientUsers

- consumer
- producer

265行
clientPasswords:

 - "12345"
 - "12345"

273行
interBrokerPassword: "admin"

429行
replicaCount: 3

508行
requests:
  memory: 500m

937行左右
size: 1Gi  #kafka的存储大小

1737行, zookeeper存储
persistence:
  enabled: true
  storageClass: ""
  accessModes:
    -ReadWriteOnce
  size: 1Gi

1696行
zookeeper
  replicaCount: 3
  

开启nodeport对外暴露服务
678行
type: NodePort

691行
nodePorts:
  client: ""
  external: "30906"

742行
externalAccess
  enabled: true

750行
autoDiscovery:
  enabled: true

766行
image:
  registry: docker.io
  repository: bitnami/kubectl
  tag: 1.23.5-debian-10-r30  #默认镜像版本拉不到

791行
servcie:
  type: NodePort

829行,几个节点对应几个端口
nodePorts:

  - 30901
  - 30902
  - 30903

837行
useHostIPs: true

如果想在kafka容器中添加额外的配置文件,比如下面的admin.conf。方法如下

创建secret

apiVersion: v1
kind: Secret
metadata:
  name: admin-conf
  namespace: kafka-test
type: Opaque
stringData:
  admin.conf: |-
    security.protocol=SASL_PLAINTEXT
    sasl.mechanism=SCRAM-SHA-256
    sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin";
625-637行添加额外配置文件(已在外面values.yaml中添加)
extraVolumes: 
  - name: admin-conf
    secret:
      secretName: admin-conf
extraVolumeMounts: 
  - name: admin-conf
    mountPath: /opt/bitnami/kafka/config/admin.conf
    subPath: admin.conf

二. 创建配置文件及测试

在kafka容器中执行下面操作

/opt/bitnami/kafka/config中创建admin.conf
cat >admin.conf<<EOF
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin";
EOF

查看所有用户
/opt/bitnami/kafka/bin/kafka-configs.sh --zookeeper localhost:2181 --describe --entity-type users
会报zookeeper权限的报警和错误,没关系。是因为没配置zookeeper权限,不影响
https://blog.csdn.net/qq_38206656/article/details/105218030
 


创建topic
 /opt/bitnami/kafka/bin/kafka-topics.sh --create  --bootstrap-server  10.255.61.25:30922  --replication-factor 1 --partitions 1 --topic mytest1 --command-config /opt/bitnami/kafka/config/admin.conf

使用svc中同一个IP的不同nodePort端口,也可以创建topic
 /opt/bitnami/kafka/bin/kafka-topics.sh --create  --bootstrap-server  10.255.61.25:39024 --replication-factor 1 --partitions 1 --topic mytest3 --command-config /opt/bitnami/kafka/config/admin.conf

创建mytest测试用户
/opt/bitnami/kafka/bin//kafka-configs.sh --bootstrap-server 10.255.61.25:39024 --alter --add-config 'SCRAM-SHA-256=[password=123456]' --entity-type users --entity-name mytest --command-config /opt/bitnami/kafka/config/admin.conf


查看topic
/opt/bitnami/kafka/bin/kafka-topics.sh --list  --bootstrap-server  10.255.61.25:30922  --command-config /opt/bitnami/kafka/config/admin.conf

授权
1)给mytest用户配置mytest1这个主题的消息发送权限
/opt/bitnami/kafka/bin/kafka-acls.sh --bootstrap-server '10.255.61.28:9092' --add --allow-principal User:"mytest" --producer --topic 'mytest1' --command-config /opt/bitnami/kafka/config/admin.conf
注意:不能使用正则匹配多个topic,比如test*

2)给mytest用户配置使用所有消费组消费mytest1消息的权限
/opt/bitnami/kafka/bin/kafka-acls.sh --bootstrap-server '10.255.61.28:9092' --add --allow-principal User:"mytest" --consumer --topic 'mytest1' --group '*' --command-config /opt/bitnami/kafka/config/admin.conf


查看权限授权列表
/opt/bitnami/kafka/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=kafka-test1-zookeeper:2181 --list
目前查看到mytest用户对mytest1这个topic有所有权限

创建mytest.conf(里面貌似不能有注释内容)
cat>mytest.conf<<EOF
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="mytest" password="123456";
EOF

修改consumer.properties和producer.properties(不要这一步也行)
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
bootstrap.servers=10.255.61.25:30922,10.255.61.25:39024,10.255.61.25:48051

生产消息测试(有时候报错,可以尝试换个IP或者端口)
/opt/bitnami/kafka/bin/kafka-console-producer.sh --broker-list 10.255.61.25:30922 --topic mytest1 --producer.config /opt/bitnami/kafka/config/mytest.conf

消费消息测试
/opt/bitnami/kafka/bin/kafka-console-consumer.sh --bootstrap-server 10.255.61.25:30922 --topic mytest1 --consumer.config /opt/bitnami/kafka/config/mytest.conf --from-beginning

三. 验证创建者和消费者

1.生产消息

image-20230815095238988

image-20230815111034272

2.消费消息

image-20230815110907471