在本文中,我们将介绍一个开源工具,该工具可以可视化 Kafka 中的访问控制列表,以帮助您大致了解 Kafka 群集中的访问是如何配置的。
使用访问控制列表 (ACL) 限制 Kafka 群集中的访问是保护数据的好方法,但很难很快概述谁可以访问哪些内容。我们将使用Strimzi在 Kubernetes 上设置 Kafka 群集,并部署kafka-acl 查看器,以便将 ACL 可视化为图形。Strimzi 利用 Kubernetes自定义资源和操作员模式,以便我们能够以与 Kubernetes 相同的声明性方式与 Kafka 合作。
斯特里姆齐安装
为了开始,你需要一个Kubernetes集群来运行Strimzi和kafka-acl查看器。在开发过程中,我通常使用 ,但任何库伯内斯群集都会做得很好。如果使用 Minikube,需要注意的一点是,Strimzi 在群集中需要比默认 2GB 多一点的 RAM。为避免出现问题,请确保在启动群集时配置至少 4GB 的 RAM Minikube。
开始-- 内存=4g
当群集启动并运行时,请继续创建自己的命名空间以运行内容。
xxxxxxx
帖子的其余部分及其示例将假定您使用的是名为 kafka
的命名空间。
现在,您已准备好从 Github 应用 Strimzi 安装,请注意管道, sed
以在上面创建的正确命名空间中创建所有内容。
xxxxxxx
seds/命名空间: .*/命名空间: 卡夫卡/ |
-f--n卡夫卡
这将创建 Strimzi 部署,负责管理 Kafka 安装、群集角色、群集角色绑定以及用于配置和管理群集的 CRD(自定义资源定义)。
下一步是实际创建我们的 Kafka 群集,这是通过这些 CRD 之一,Kafka 自定义资源来完成的。为了启用 ACL 的使用,我们需要某种身份验证,以便客户端具有关联访问权限的标识。幸运的是,Strimzi 使设置 TLS 身份验证变得非常简单。Strimzi 会自动为客户端颁发证书,并将其存储为 Kubernetes 机密,以便轻松访问应用程序部署。稍后,让我们提出卡夫卡集群。
以下Kafka资源将创建一个带有一个节点和 TLS 身份验证的持久卡夫卡群集strimzi.io/v1beta1
类型: 卡夫卡
元:
名称:我的群集
命名空间:卡夫卡
规范:
卡 夫 卡:
版本: 2.4.0
副本: 1
听众:
Tls:
认证:
类型: tls
授权:
类型: 简单
配置:
偏移量.主题.复制.因子: 1
事务.状态.log.复制.因子: 1
事务.state.log.min.isr: 1
log.message.format.version:”2.4″
存储:
类型: jbod
卷:
– ID: 0
类型:持久声明
尺寸: 100Gi
删除索赔: 错误
动物园管理员:
副本: 1
存储:
类型:持久声明
尺寸: 100Gi
删除索赔: 错误
实体操作员:
主题操作者: |
用户操作者: |
EOF 的数据朗=”文本/x-sh”|
xxxxxxx
猫-f-
类型: 卡夫卡
元:
名称:我的群集
命名空间:卡夫卡
规范:
卡 夫 卡:
2.4.0
1
12
tls:
13
身份验证:
14
类型: tls
15
授权:
16
类型: 简单
17
配置:
18
1
19
1
20
1
21
"2.4"
22
存储:
23
类型: jbod
24
卷:
25
-0
26
类型:持久声明
27
尺寸: 100Gi
28
假
30
1
31
存储:
32
类型:持久声明
33
尺寸: 100Gi
34
假
35
实体操作员:
36
主题操作者: |
37
用户操作者: |
应用卡夫卡资源时,Strimzi 群集操作员将根据配置启动 Kafka 群集。这将需要几分钟时间,具体取决于群集的速度。以下命令可用于等待一切准备就绪。
壳
xxxxxxx
1
1
--对于=条件=--超时=-n卡夫卡
KafkaTopic资源的示例。
壳
Ⅹ
1
猫-f-
2
3
种类: 卡夫卡Topic
4
元:
5
名称:销售
6
命名空间:卡夫卡
7
标签:
8
strimzi.io/cluster:我的集群
9
规范:
10
10
11
12
Eof
在 Kubernetes 群集中应用此选项将导致 Strimzi 主题运算符拾取它并在 Kafka 群集中创建主题。该主题将给出与库伯内斯资源相同的名称。strimzi.io/cluster
如果命名空间中有多个 Kafka 群集,则标签指定应在其中创建哪个 Kafka 群集。本节 spec
定义特定于主题的配置,例如分区数以及如何复制分区。由于我们在 Kafka 群集中只运行单个节点,因此我们只能运行一个副本。
Kafka 用户及其访问权限以类似方式描述KafkaUser资源,下面是此类资源的示例。
壳
xxxxxxx
1
21
1
猫-f-
2
apiVersion: kafka.strimzi.io/v1beta1
3
种类: 卡夫卡瑟
4
元:
5
名称: 装运-api
6
命名空间:卡夫卡
7
标签:
8
strimzi.io/cluster:我的集群
10
认证:
11
类型: tls
12
授权:
13
类型: 简单
14
acl:
15
-资源:
16
类型:主题
17
名称:发货
18
19
操作:写入
20
"*"
21
Eof
此资源将由 Strimzi 用户操作员接收,该操作员将颁发由 Kafka 群集节点信任的证书颁发机构签名的客户端证书。证书和私钥将存储在与用户同名的 Kubernets 机密中,该密钥还包含颁发群集节点证书的证书颁发机构的公钥。这允许客户端使用相互 TLS 与 Kafka 群集连接和进行身份验证。然后,客户端由其证书标识,群集可以授权它根据 ACL 访问群集中的资源。
本节中列出的 ACL acls
也由用户操作员应用于 Kafka 群集。 此特定示例授予用户执行在"写入"操作下对装运主题分组的 API 调用的访问权限。有关 Kafka 访问模型的详细信息,请参阅此处:使用 ACL 授权 – Confluent 平台。
这些 Kubernetes 资源已经为群集访问模型提供了一个不错的、可搜索的定义,但很难获得概述。让我们来解决这个问题!
部署卡夫卡-acl 查看器
kafka-acl查看器是一个小型的开源应用程序,写在Go。它使用Shopify/sarama连接到卡夫卡,直接从群集获取有关 ACL 和主题的信息com/visjs/vis-network"rel="无跟随"目标="_blank"=visjs/vis-网络。
在部署应用程序之前,我们需要设置 KafkaUser,对 Kafka 群集进行适当的访问。
壳
xxxxxxx
1
27
1
2
apiVersion: kafka.strimzi.io/v1beta1
3
种类: 卡夫卡瑟
4
元:
5
名称: 卡夫卡-阿克-查看器
6
命名空间:卡夫卡
7
标签:
8
strimzi.io/cluster:我的集群
9
规范:
10
认证:
12
授权:
13
类型: 简单
14
acl:
15
• 读取 ACL
16
-资源:
17
类型:群集
18
操作:描述
19
"*"
• 阅读所有主题
21
-资源:
22
类型:主题
23
"*"
24
模式类型:文本
25
操作:描述
26
"*"
27
Eof
kafka-acl 查看器应用程序将直接与群集联系,以列出群集中的活动 ACL 和主题第二部分允许应用程序对群集中的所有主题执行"描述",以读取元数据和偏移主题等内容。它不授予应用程序读取主题上的数据的访问权限,这将需要读取操作。您可以使用 ACL和"汇入平台"引用授权,以便准确查看不同操作允许的 API 调用。
应用 ACL 后可以部署 kafka-acl 查看器,这是相当标准的 Kubernetes 部署。
壳
xxxxxxx
1
53
1
猫-f-
2
apiVersion: 应用程序/v1
3
类型:部署
4
元:
5
名称: 卡夫卡-阿克-查看器
6
命名空间:卡夫卡
7
标签:
8
应用程序:卡夫卡-阿克-查看器
10
选择:
11
匹配标签:
12
应用程序:卡夫卡-阿克-查看器
13
模板:
14
元数据:
15
标签:
16
应用程序:卡夫卡-阿克-查看器
17
规格:
18
19
-名称:卡夫卡-阿克-查看器
20
图片:比约恩基林/卡夫卡-阿克-查看器:v0.5-阿尔法
21
端口:
22
-8080
23
卷安装:
24
-名称:卡夫卡-阿克-查看器-证书
25
"/卡夫卡-客户端-证书"
26
27
-名称:卡夫卡-集群-证书
28
"/卡夫卡-卡-凯茨"
29
真
30
env:
31
-名称:KAFKA_URL
32
"我的集群-卡夫卡-引导:9093"
33
-名称:CA_FILE
34
35
-名称:CERT_FILE
36
"/卡夫卡-客户端证书/用户.crt"
37
-名称: KEY_FILE
38
"/卡夫卡-客户端证书/用户.key"
39
-名称: FETCH_INTERVAL
40
"10s"
41
卷:
42
43
秘密:
44
秘密名称:卡夫卡-阿克-查看器
45
项目:
46
-密钥:用户.crt
47
路径: 用户.crt
48
-键:用户.键
49
路径:用户.键
50
-名称:卡夫卡-集群-证书
52
秘密名称:我的群集群集-ca-cert
53
Eof
正如你可以看到证书和私钥是常规Kubernetes的秘密,我们作为文件安装在我们的窗格中,应用程序可以访问它们。
当应用程序启动并运行时,访问它的最简单方法是使用 kubectl port-forward -n kafka deploy/kafka-acl-viewer 8080
。如果你打算更长期地使用它,你可能想要设置某种入口。如果现在打开本地主机:8080,您应该会看到群集中当前访问的视图。蓝色框是 Kafka 资源,如主题和群集本身,绿色框是用户。它们之间的箭头表示不同类型的操作,选择其中一个资源或用户以查看连接到该类型的操作。
尝试创建更多 KafkaUsers 和 KafkaTopics,并在刷新页面时观看图形展开。或者,您可以导入用于测试的示例设置,该设置在kafka-acl 查看器回购中可用我已经开始尝试过滤图形的方法,但我对结果还不太满意。
随意尝试卡夫卡-acl查看器在您的卡夫卡集群,反馈和拉请求总是欢迎!
Comments are closed.