3.3. 使用 TLS 安全性配置 Kafka 存储
您可以将 AMQ Streams Operator 和 Service Registry Operator 配置为使用加密的传输层安全(TLS)连接。
先决条件
- 已使用 OperatorHub 或命令行安装 Service Registry Operator。
- 已安装 AMQ Streams Operator,或者可以从 OpenShift 集群访问 Kafka。
本节假定 AMQ Streams Operator 可用,但您可以使用任何 Kafka 部署。在这种情况下,您必须手动创建 Service Registry Operator 期望的 Openshift secret。
流程
- 在 OpenShift Web 控制台中,点 Installed Operators,选择 AMQ Streams Operator 详情,然后选择 Kafka 选项卡。
- 点 Create Kafka 为 Service Registry 存储置备新的 Kafka 集群。
将
authorization
和tls
字段配置为对 Kafka 集群使用 TLS 身份验证,例如:apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster namespace: registry-example-kafkasql-tls # Change or remove the explicit namespace spec: kafka: config: offsets.topic.replication.factor: 3 transaction.state.log.replication.factor: 3 transaction.state.log.min.isr: 2 log.message.format.version: '2.7' inter.broker.protocol.version: '2.7' version: 2.7.0 storage: type: ephemeral replicas: 3 listeners: - name: tls port: 9093 type: internal tls: true authentication: type: tls authorization: type: simple entityOperator: topicOperator: {} userOperator: {} zookeeper: storage: type: ephemeral replicas: 3
由 Service Registry 自动创建的默认 Kafka 主题名称为
kafkasql-journal
。您可以通过设置环境变量来覆盖此行为或默认主题名称。默认值如下:-
REGISTRY_KAFKASQL_TOPIC_AUTO_CREATE=true
-
REGISTRY_KAFKASQL_TOPIC=kafkasql-journal
如果您决定不手动创建 Kafka 主题,请跳过下一步。
-
点 Kafka Topic 选项卡,然后 Create Kafka Topic 来创建
kafkasql-journal
主题:apiVersion: kafka.strimzi.io/v1beta1 kind: KafkaTopic metadata: name: kafkasql-journal labels: strimzi.io/cluster: my-cluster namespace: registry-example-kafkasql-tls spec: partitions: 2 replicas: 1 config: cleanup.policy: compact
创建 Kafka User 资源来为 Service Registry 用户配置身份验证和授权。您可以在
metadata
部分中指定用户名,也可以使用默认的my-user
。apiVersion: kafka.strimzi.io/v1beta1 kind: KafkaUser metadata: name: my-user labels: strimzi.io/cluster: my-cluster namespace: registry-example-kafkasql-tls spec: authentication: type: tls authorization: acls: - operation: All resource: name: '*' patternType: literal type: topic - operation: All resource: name: '*' patternType: literal type: cluster - operation: All resource: name: '*' patternType: literal type: transactionalId - operation: All resource: name: '*' patternType: literal type: group type: simple
注意这个简单示例假定 admin 权限,并自动创建 Kafka 主题。您必须为 Service Registry 所需的主题和资源配置
授权
部分。以下示例显示了手动创建 Kafka 主题时所需的最小配置:
... authorization: acls: - operations: - Read - Write resource: name: kafkasql-journal patternType: literal type: topic - operations: - Read - Write resource: name: apicurio-registry- patternType: prefix type: group type: simple
点 Workloads,然后 Secret 找到 AMQ Streams 为 Service Registry 创建的两个 secret 以连接到 Kafka 集群:
-
my-cluster-cluster-ca-cert
- 包含 Kafka 集群的 PKCS12 信任存储 my-user
- 包含用户的密钥存储注意secret 的名称可能会因集群或用户名而异。
-
如果手动创建 secret,则必须包含以下键值对:
my-cluster-ca-cert
-
ca.p12
- truststore 以 PKCS12 格式 -
ca.password
- truststore password
-
my-user
-
user.p12
- PKCS12 格式的密钥存储 -
user.password
- keystore password
-
配置以下示例配置来部署 Service Registry。
apiVersion: registry.apicur.io/v1 kind: ApicurioRegistry metadata: name: example-apicurioregistry-kafkasql-tls spec: configuration: persistence: "kafkasql" kafkasql: bootstrapServers: "my-cluster-kafka-bootstrap.registry-example-kafkasql-tls.svc:9093" security: tls: keystoreSecretName: my-user truststoreSecretName: my-cluster-cluster-ca-cert
您必须使用与普通不安全用例不同的 bootstrapServers
地址。该地址必须支持 TLS 连接,并在 type: tls
字段的指定的 Kafka 资源中找到。