搜索

3.3. 使用 TLS 安全性配置 Kafka 存储

download PDF

您可以将 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。

流程

  1. 在 OpenShift Web 控制台中,点 Installed Operators,选择 AMQ Streams Operator 详情,然后选择 Kafka 选项卡。
  2. Create Kafka 为 Service Registry 存储置备新的 Kafka 集群。
  3. 配置 authorizationtls 字段,以将 TLS 身份验证用于 Kafka 集群,例如:

    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 主题,请跳过下一步。

  4. 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
  5. 创建 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
  6. Workloads,然后 Secrets 来查找 AMQ Streams 为 Service Registry 创建的两个 secret 来连接到 Kafka 集群:

    • my-cluster-cluster-ca-cert - 包含 Kafka 集群的 PKCS12 信任存储
    • my-user - 包含用户的密钥存储

      注意

      secret 的名称可能会因集群或用户名而异。

  7. 如果手动创建 secret,它们必须包含以下键值对:

    • my-cluster-ca-cert

      • ca.p12 - 信任存储,格式为 PKCS12
      • ca.password - truststore password
    • my-user

      • user.p12 - 密钥存储(以 PKCS12 格式)
      • user.password - keystore password
  8. 配置以下示例配置,以部署 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 资源中找到。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.