在 OpenShift 中安装和部署 Apicurio Registry


Red Hat build of Apicurio Registry 2.0

安装和部署 Apicurio Registry 2.0

摘要

本指南说明了如何使用 AMQ Streams 或 PostgreSQL 数据库中的 registry 数据存储选项在 OpenShift 中安装和部署 Apicurio Registry。本指南还介绍了如何保护、配置和管理一个 Apicurio Registry,并提供有关 Apicurio Registry Operator 的参考信息。

前言

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息

第 1 章 Apicurio Registry Operator 快速入门

本章介绍了如何在命令行中快速安装 Apicurio Registry Operator。

这个快速入门示例使用 SQL 数据库存储选项部署 Apicurio Registry:

注意

在生产环境中推荐安装选项使用 OpenShift OperatorHub。推荐的存储选项是 SQL 或 Kafka。

1.1. Quickstart Apicurio Registry Operator 安装

您可以使用下载的一组安装文件和示例,从命令行快速部署 Apicurio Registry Operator,而无需 Operator Lifecycle Manager。

前提条件

流程

  1. 为安装创建一个项目,如 service-registry

    NAMESPACE="service-registry"
    oc new-project "$NAMESPACE"
  2. 应用位于 install/ 文件夹中的 文件:

    cat install/install.yaml | sed "s/apicurio-registry-operator-namespace/$NAMESPACE/g" | oc apply -f -

1.2. Quickstart Apicurio Registry 部署

要创建新的 Apicurio Registry 部署,请使用 SQL 数据库存储选项。这要求将外部 PostgreSQL 存储配置为前提条件。

前提条件

  • 确保已安装 Apicurio Registry Operator。
  • 您可以从 OpenShift 集群访问 PostgreSQL 数据库。

流程

  1. 使用配置了数据库连接创建 ApicurioRegistry 自定义资源(CR),例如:

    SQL 存储的 CR 示例

    apiVersion: registry.apicur.io/v1
    kind: ApicurioRegistry
    metadata:
      name: example-apicurioregistry-sql
    spec:
      configuration:
        persistence: "sql"
        sql:
          dataSource:
            url: "jdbc:postgresql://<service name>.<namespace>.svc:5432/<database name>"
            userName: "postgres"
            password: "<password>" # Optional

  2. 在部署 Operator 的同一命名空间中创建一个 ApicurioRegistry CR

    oc project "$NAMESPACE"
    oc apply -f ./examples/apicurioregistry_sql_cr.yaml

第 2 章 在 OpenShift 上安装 Apicurio Registry

本章论述了如何在 OpenShift Container Platform 上安装 Apicurio Registry:

2.1. 从 OpenShift OperatorHub 安装 Apicurio Registry

您可从 OperatorHub 在 OpenShift 集群上安装 Apicurio Registry Operator。OperatorHub 可通过 OpenShift Container Platform Web 控制台获得,并提供了一个界面,供集群管理员发现和安装 Operator。如需了解更多详细信息,请参阅 OpenShift 文档

注意

您可以根据您的环境安装多个 Apicurio Registry 实例。实例数量取决于存储在 Apicurio Registry 和您选择的存储选项中的工件数和类型。

前提条件

  • 您必须具有集群管理员访问 OpenShift 集群。

流程

  1. 在 OpenShift Container Platform web 控制台中,使用具有集群管理员特权的帐户登录。
  2. 创建一个新的 OpenShift 项目:

    1. 在左侧导航菜单中,单击 HomeProject,然后 创建项目
    2. 输入项目名称,如 my-project,然后单击 Create
  3. 在左侧导航栏中,点 Operators,然后点 OperatorHub
  4. Filter by keyword 文本框中,输入 registry 来查找 Red Hat Integration - Apicurio Registry Operator
  5. 阅读 Operator 的信息,然后点 Install 以显示 Operator 订阅页面。
  6. 选择您的订阅设置,例如:

    • 更新频道 :选择以下之一:

      • 2.0.x :仅包含补丁更新,如 2.0.1 和 2.0.2。例如,在 2.0.x 上安装时会自动忽略 2.1.x。
      • 2.x :包括所有次要和补丁更新,如 2.1.0 和 2.0.1。例如,在 2.0.x 上安装时会自动升级到 2.1.x。
    • Installation Mode: 选择以下之一:

      • 集群中的所有命名空间(默认)
      • 集群中的特定命名空间, 然后 my-project
    • 批准策略 :选择 AutomaticManual
  7. Install,稍等片刻,直到 Operator 准备就绪可用。

第 3 章 在 AMQ Streams 中部署 Apicurio Registry 存储

本章论述了如何在 AMQ Streams 中安装和配置 Apicurio Registry 数据存储。

3.1. 从 OpenShift OperatorHub 安装 AMQ Streams

如果您还没有安装 AMQ Streams,您可以从 OperatorHub 在 OpenShift 集群上安装 AMQ Streams Operator。OperatorHub 可通过 OpenShift Container Platform Web 控制台获得,并提供了一个界面,供集群管理员发现和安装 Operator。如需了解更多详细信息,请参阅 OpenShift 文档

前提条件

流程

  1. 在 OpenShift Container Platform web 控制台中,使用具有集群管理员特权的帐户登录。
  2. 切换到您要在其中安装 AMQ Streams 的 OpenShift 项目。例如,从 Project 下拉菜单中选择 my-project
  3. 在左侧导航栏中,点 Operators,然后点 OperatorHub
  4. Filter by keyword 文本框中,输入 AMQ Streams 来查找 Red Hat Integration - AMQ Streams Operator。
  5. 阅读 Operator 的信息,然后点 Install 以显示 Operator 订阅页面。
  6. 选择您的订阅设置,例如:

    • 更新频道,然后 amq-streams-1.8.x
    • Installation Mode: 选择以下之一:

      • 集群中的所有命名空间(默认)
      • 集群中的特定命名空间 > my-project
    • 批准策略 :选择 AutomaticManual
  7. Install,稍等片刻,直到 Operator 准备就绪可用。

3.2. 使用 OpenShift 上的 Kafka 存储配置 Apicurio Registry

本节介绍如何在 OpenShift 中使用 AMQ Streams 为 Apicurio Registry 配置基于 Kafka 的存储。kafkasql 存储选项使用 Kafka 存储和内存中 H2 数据库。当为 OpenShift 上的 Kafka 集群配置 持久性存储时,这个存储选项适用于生产环境。

您可以在现有 Kafka 集群中安装 Apicurio Registry,或根据您的环境创建新 Kafka 集群。

前提条件

流程

  1. 在 OpenShift Container Platform web 控制台中,使用具有集群管理员特权的帐户登录。
  2. 如果您还没有配置 Kafka 集群,请使用 AMQ Streams 创建新 Kafka 集群。例如,在 OpenShift OperatorHub 中:

    1. Installed Operators,然后点 Red Hat Integration - AMQ Streams
    2. Provided APIs 下,然后点 Create Instance 来创建新的 Kafka 集群。
    3. 根据需要编辑自定义资源定义,然后点 Create

      警告

      默认示例创建带有 3 Zookeeper 节点和 3 Kafka 节点具有 临时存储 的集群。这种临时存储仅适用于开发和测试,不适用于生产环境。如需了解更多详细信息,请参阅 在 OpenShift 中使用 AMQ Streams

  3. 集群就绪后,点 Provided APIs > Kafka > my-cluster > YAML
  4. status 块中,复制 bootstrapServers 值,稍后您将使用它来部署 Apicurio Registry。例如:

    status:
      ...
      conditions:
      ...
      listeners:
        - addresses:
            - host: my-cluster-kafka-bootstrap.my-project.svc
              port: 9092
          bootstrapServers: 'my-cluster-kafka-bootstrap.my-project.svc:9092'
          type: plain
      ...
  5. Installed Operators > Red Hat Integration - Apicurio Registry > ApicurioRegistry > Create ApicurioRegistry
  6. 粘贴到以下自定义资源定义中,但使用之前复制的 bootstrapServers 值:

    apiVersion: registry.apicur.io/v1
    kind: ApicurioRegistry
    metadata:
      name: example-apicurioregistry-kafkasql
    spec:
      configuration:
        persistence: 'kafkasql'
        kafkasql:
          bootstrapServers: 'my-cluster-kafka-bootstrap.my-project.svc:9092'
  7. Create 并等待 OpenShift 上创建 Apicurio Registry 路由。
  8. Networking > Route 访问 Apicurio Registry web 控制台的新路由。例如:

    http://example-apicurioregistry-kafkasql.my-project.my-domain-name.com/

其他资源

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

您可以配置 AMQ Streams Operator 和 Apicurio Registry Operator,以使用加密传输层安全(TLS)连接。

前提条件

  • 您必须使用 OperatorHub 或命令行安装 Apicurio Registry Operator。
  • 您必须安装 AMQ Streams Operator 或具有 Kafka 命令从 OpenShift 集群访问。
注意

本节假定 AMQ Streams Operator 可用,但您可以使用任何 Kafka 部署。在这种情况下,您必须手动创建 Apicurio Registry Operator 期望的 Openshift secret。

流程

  1. 在 OpenShift Web 控制台中,点 Installed Operators,选择 AMQ Streams Operator 详情,然后选择 Kafka 选项卡。
  2. Create Kafka 为 Apicurio Registry 存储置备新的 Kafka 集群。
  3. authorizationtls 字段配置为对 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

    Apicurio Registry 用来存储数据的默认 Kafka 主题名称为 kafkasql-journal。本主题由 Apicurio Registry 自动创建。您可以通过设置适当的环境变量(默认值)来覆盖此行为或默认主题名称:

    • REGISTRY_KAFKASQL_TOPIC_AUTO_CREATE=true
    • REGISTRY_KAFKASQL_TOPIC=kafkasql-journal

    如果您决定不手动创建 Kafka 主题,请跳过下一步。

  4. 点击 Kafka 主题 选项卡,然后创建 Kafka 主题 以创建 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:
        retention.ms: 604800000
        segment.bytes: 1073741824
  5. 创建一个 Kafka User 资源,为 Apicurio 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
    注意

    您必须为 Apicurio Registry 所需的主题和资源配置授权。这是一个简单的许可示例。

  6. Workloads然后点 AMQ Streams 为 Apicurio 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. 配置以下示例配置,以部署 Apicurio Registry。

    apiVersion: registry.apicur.io/v1
    kind: ApicurioRegistry
    metadata:
      name: example-apicurioregistry-kafkasql
    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 资源中找到。

3.4. 使用 SCRAM 安全性配置 Kafka 存储

您可以将 AMQ Streams Operator 和 Apicurio Registry Operator 配置为对 Kafka 集群使用 Salted Challenge Response Authentication Mechanism (SCRAM-SHA-512)。

前提条件

  • 您必须使用 OperatorHub 或命令行安装 Apicurio Registry Operator。
  • 您必须安装 AMQ Streams Operator 或具有 Kafka 命令从 OpenShift 集群访问。
注意

本节假设 AMQ Streams Operator 可用,但您可以使用任何 Kafka 部署。在这种情况下,您必须手动创建 Apicurio Registry Operator 期望的 Openshift secret。

流程

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

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      name: my-cluster
      namespace: registry-example-kafkasql-scram
      # 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: scram-sha-512
        authorization:
          type: simple
      entityOperator:
        topicOperator: {}
        userOperator: {}
      zookeeper:
        storage:
          type: ephemeral
        replicas: 3

    Apicurio Registry 用来存储数据的默认 Kafka 主题名称为 kafkasql-journal。本主题由 Apicurio Registry 自动创建。您可以通过设置适当的环境变量(默认值)来覆盖此行为或默认主题名称:

    • REGISTRY_KAFKASQL_TOPIC_AUTO_CREATE=true
    • REGISTRY_KAFKASQL_TOPIC=kafkasql-journal

    如果您决定不手动创建 Kafka 主题,请跳过下一步。

  4. 点击 Kafka 主题 选项卡,然后创建 Kafka 主题 以创建 kafkasql-journal 主题:

    apiVersion: kafka.strimzi.io/v1beta1
    kind: KafkaTopic
    metadata:
      name: kafkasql-journal
      labels:
        strimzi.io/cluster: my-cluster
      namespace: registry-example-kafkasql-scram
    spec:
      partitions: 2
      replicas: 1
      config:
        retention.ms: 604800000
        segment.bytes: 1073741824
  5. 创建一个 Kafka User 资源,为 Apicurio Registry 用户配置 SCRAM 身份验证和授权。您可以在 metadata 部分中指定用户名,或使用默认的 my-user

    apiVersion: kafka.strimzi.io/v1beta1
    kind: KafkaUser
    metadata:
      name: my-user
      labels:
        strimzi.io/cluster: my-cluster
      namespace: registry-example-kafkasql-scram
    spec:
      authentication:
        type: scram-sha-512
      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
    注意

    您必须为 Apicurio Registry 所需的主题和资源配置授权。这是一个简单的许可示例。

  6. Workloads然后点 AMQ Streams 为 Apicurio 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

      • Password - 用户密码
  8. 配置以下示例设置以部署 Apicurio Registry:

    apiVersion: registry.apicur.io/v1
    kind: ApicurioRegistry
    metadata:
      name: example-apicurioregistry-kafkasql
    spec:
      configuration:
        persistence: "kafkasql"
        kafkasql:
          bootstrapServers: "my-cluster-kafka-bootstrap.registry-example-kafkasql-scram.svc:9093"
          security:
            scram:
              truststoreSecretName: my-cluster-cluster-ca-cert
              user: my-user
              passwordSecretName: my-user
重要

您必须使用与普通不安全的用例不同的 bootstrapServers 地址。地址必须支持 TLS 连接,并在 type: tls 字段下的指定 Kafka 资源中找到。

3.5. 为 Kafka 存储配置 OAuth 身份验证

当在 AMQ Streams 中使用基于 Kafka 的存储时,Apicurio Registry 支持访问需要 OAuth 身份验证的 Kafka 集群。要启用此支持,您必须在 Apicurio Registry 部署中设置一些环境变量。

当设置这些环境变量时,Apicurio Registry 中的 Kafka producer 和使用者应用程序将使用此配置通过 OAuth 对 Kafka 集群进行身份验证。

前提条件

流程

  • 在 Apicurio Registry 部署中设置以下环境变量:

    环境变量描述默认值

    ENABLE_KAFKA_SASL

    在 Kafka 中为 Apicurio Registry 存储启用 SASL OAuth 身份验证。您必须将此变量设置为 true 才能使其他变量生效。

    false

    CLIENT_ID

    用于验证 Kafka 集群的客户端 ID。

    -

    CLIENT_SECRET

    用于验证 Kafka 集群的客户端 secret。

    -

    OAUTH_TOKEN_ENDPOINT_URI

    OAuth 身份服务器的 URL。

    http://localhost:8090

其他资源

第 4 章 在 PostgreSQL 数据库中部署 Apicurio Registry 存储

本章介绍了如何在 PostgreSQL 数据库中安装、配置和管理 Apicurio Registry 数据存储。

4.1. 从 OpenShift OperatorHub 安装 PostgreSQL 数据库

如果您还没有安装 PostgreSQL 数据库 Operator,您可以从 OperatorHub 在 OpenShift 集群上安装 PostgreSQL Operator。OperatorHub 可通过 OpenShift Container Platform Web 控制台获得,并提供了一个界面,供集群管理员发现和安装 Operator。如需了解更多详细信息,请参阅 OpenShift 文档

前提条件

  • 您必须具有集群管理员访问 OpenShift 集群。

流程

  1. 在 OpenShift Container Platform web 控制台中,使用具有集群管理员特权的帐户登录。
  2. 更改到您要在其中安装 PostgreSQL Operator 的 OpenShift 项目。例如,从 Project 下拉菜单中选择 my-project
  3. 在左侧导航栏中,点 Operators,然后点 OperatorHub
  4. Filter by keyword 文本框中,输入 PostgreSQL 来查找适合您环境的 Operator,例如: 为 OpenShift 或使用 Dev4Ddevs.com 的 Crunchy PostgreSQL
  5. 阅读 Operator 的信息,然后点 Install 以显示 Operator 订阅页面。
  6. 选择您的订阅设置,例如:

    • 更新频道stable
    • Installation Mode:A specific namespace on the cluster, my-project
    • 批准策略 :选择 AutomaticManual
  7. Install,稍等片刻,直到 Operator 准备就绪可用。

    重要

    您必须从所选 PostgreSQL Operator 中读取文档,以了解有关如何创建和管理数据库的详细信息。

4.2. 使用 OpenShift 上的 PostgreSQL 数据库存储配置 Apicurio Registry

本节介绍如何使用 PostgreSQL 数据库 Operator 为 OpenShift 上的 Apicurio Registry 配置存储。您可以在现有数据库中安装 Apicurio Registry,或根据您的环境创建新数据库。本节演示了通过 Dev4Ddevs.com 使用 PostgreSQL Operator 的简单示例。

前提条件

流程

  1. 在 OpenShift Container Platform web 控制台中,使用具有集群管理员特权的帐户登录。
  2. 更改到安装 Apicurio Registry 和 PostgreSQL Operator 的 OpenShift 项目。例如,从 Project 下拉菜单中选择 my-project
  3. 为您的 Apicurio Registry 存储创建 PostgreSQL 数据库。例如,单击 Installed Operators,即PostgreSQL Operator by Dev4Ddevs.com,然后创建 数据库
  4. 点击 YAML 并按如下所示编辑数据库设置:

    • Name :将值改为 registry
    • Image: 将值改为 centos/postgresql-12-centos7
  5. 根据您的环境根据需要编辑任何其他数据库设置,例如:

    apiVersion: postgresql.dev4devs.com/v1alpha1
    kind: Database
    metadata:
      name: registry
      namespace: my-project
    spec:
      databaseCpu: 30m
      databaseCpuLimit: 60m
      databaseMemoryLimit: 512Mi
      databaseMemoryRequest: 128Mi
      databaseName: example
      databaseNameKeyEnvVar: POSTGRESQL_DATABASE
      databasePassword: postgres
      databasePasswordKeyEnvVar: POSTGRESQL_PASSWORD
      databaseStorageRequest: 1Gi
      databaseUser: postgres
      databaseUserKeyEnvVar: POSTGRESQL_USER
      image: centos/postgresql-12-centos7
      size: 1
  6. 单击 Create,然后等待数据库创建完毕。
  7. Installed Operators > Red Hat Integration - Apicurio Registry > ApicurioRegistry > Create ApicurioRegistry
  8. 粘贴到以下自定义资源定义中,并编辑数据库 url 和凭证的值以匹配您的环境:

    apiVersion: registry.apicur.io/v1
    kind: ApicurioRegistry
    metadata:
      name: example-apicurioregistry-sql
    spec:
      configuration:
        persistence: 'sql'
        sql:
          dataSource:
            url: 'jdbc:postgresql://<service name>.<namespace>.svc:5432/<database name>'
            # e.g. url: 'jdbc:postgresql://acid-minimal-cluster.my-project.svc:5432/registry'
            userName: 'postgres'
            password: '<password>' # Optional
  9. Create 并等待 OpenShift 上创建 Apicurio Registry 路由。
  10. Networking > Route 访问 Apicurio Registry web 控制台的新路由。例如:

    http://example-apicurioregistry-sql.my-project.my-domain-name.com/

4.3. 备份 Apicurio Registry PostgreSQL 存储

在 PostgreSQL 数据库中使用存储时,您必须确保定期备份 Apicurio Registry 存储的数据。

SQL 转储 是处理任何 PostgreSQL 安装的简单流程。这使用 pg_dump 程序生成带有 SQL 命令的文件,您可以使用该文件在转储时以其处于同一状态重新创建数据库。

pg_dump 是一个常规 PostgreSQL 客户端应用,您可以从可访问数据库的任何远程主机执行。与其他任何客户端一样,可以执行的操作会受到用户权限的限制。

流程

  • 使用 pg_dump 命令将输出重定向到文件:

     $ pg_dump dbname > dumpfile

    您可以使用 -h host-p 端口 选项指定 pg_dump 连接到的数据库服务器。

  • 您可以使用压缩工具(如 gzip)减少大型转储文件,例如:

     $ pg_dump dbname | gzip > filename.gz

其他资源

4.4. 恢复 Apicurio Registry PostgreSQL 存储

您可以使用 psql 实用程序恢复 pg_dump 创建的 SQL 转储文件。

前提条件

流程

  1. 运行以下命令来创建数据库:

     $ createdb -T template0 dbname
  2. 输入以下命令恢复 SQL 转储

     $ psql dbname < dumpfile
  3. 在每个数据库上运行 ANALYZE,以便查询优化器具有有用的统计数据。

第 5 章 保护 Apicurio Registry 部署

本章介绍了如何在 OpenShift 中为 Apicurio Registry 部署配置安全设置:

Apicurio Registry 使用基于 OpenID Connect (OIDC)或 HTTP 基本的红帽单点登录提供身份验证和授权。您可以使用 Red Hat Single Sign-On Operator 自动配置所需的设置,或者在 Red Hat Single Sign-On 和 Apicurio Registry 中手动配置这些设置。

Apicurio Registry 使用 Red Hat Single Sign-On 为 Apicurio Registry Web 控制台和核心 REST API 提供基于角色的访问控制和授权。Apicurio Registry 还在 schema 或 API 级别上提供基于内容的授权,其中只有构件创建者具有写入访问权限。您还可以从 OpenShift 集群内部或外部将 HTTPS 连接配置为 Apicurio Registry。

其他资源

5.1. 使用 Red Hat Single Sign-On Operator 保护 Apicurio Registry

以下步骤演示了如何配置 Apicurio Registry REST API 和 Web 控制台,使其受 Red Hat Single Sign-On 的保护。Red Hat Single Sign-On Operator 作为技术预览提供。

重要

技术预览功能不包括在红帽生产服务级别协议(SLA)中,且其功能可能并不完善。红帽不推荐在生产环境中实施任何技术预览功能。

此技术预览功能为您提供对即将推出的产品创新的早期访问,允许您在开发过程中测试并提供反馈。如需有关支持范围的更多信息,请参阅 技术预览功能支持范围

Apicurio Registry 支持以下用户角色:

表 5.1. Apicurio Registry 用户角色
Name功能

sr-admin

完整访问,无限制。

sr-developer

创建工件并配置工件规则。无法修改全局规则,执行导入/导出,或者使用 /admin REST API 端点。

sr-readonly

仅查看和搜索。无法修改工件或规则,执行导入/导出,或者使用 /admin REST API 端点。

注意

ApicurioRegistry CRD 中有一个相关的配置选项,可用于将 Web 控制台设置为只读模式。但是,此配置不会影响 REST API。

前提条件

  • 您必须已安装了 Apicurio Registry Operator。
  • 您必须安装 Red Hat Single Sign-On Operator,或可从 OpenShift 集群访问 Red Hat Single Sign-On。
重要

此流程中的示例配置仅用于开发和测试。为了简化这个过程,它不会在生产环境中使用 HTTPS 和其他防御。如需了解更多详细信息,请参阅 Red Hat Single Sign-On 文档。

流程

  1. 在 OpenShift Web 控制台中,点 Installed OperatorsRed Hat Single Sign-On Operator,然后选择 Keycloak 选项卡。
  2. Create Keycloak 置备一个新的 Red Hat Single Sign-On 实例来保护 Apicurio Registry 部署。您可以使用默认值,例如:

    apiVersion: keycloak.org/v1alpha1
    kind: Keycloak
    metadata:
      name: example-keycloak
      labels:
        app: sso
    spec:
      instances: 1
      externalAccess:
        enabled: True
      podDisruptionBudget:
        enabled: True
  3. 等待实例创建好,然后单击 Networking,然后单击 Routes 以访问 keycloak 实例的新路由。
  4. Location URL,复制显示的 ./auth URL 值,以便稍后在部署 Apicurio Registry 时使用。
  5. Installed OperatorsRed Hat Single Sign-On Operator,然后点击 Keycloak Realm 选项卡,然后 Create Keycloak Realm 创建 registry 示例域:

    apiVersion: keycloak.org/v1alpha1
    kind: KeycloakRealm
    metadata:
      name: registry-keycloakrealm
    spec:
      instanceSelector:
        matchLabels:
          app: sso
      realm:
        displayName: Registry
        enabled: true
        id: registry
        realm: registry
        sslRequired: none
        roles:
          realm:
            - name: sr-admin
            - name: sr-developer
            - name: sr-readonly
        clients:
          - clientId: registry-client-ui
            implicitFlowEnabled: true
            redirectUris:
              - '*'
            standardFlowEnabled: true
            webOrigins:
              - '*'
            publicClient: true
          - clientId: registry-client-api
            implicitFlowEnabled: true
            redirectUris:
              - '*'
            standardFlowEnabled: true
            webOrigins:
              - '*'
            publicClient: true
        users:
          - credentials:
              - temporary: false
                type: password
                value: changeme
            enabled: true
            realmRoles:
              - sr-admin
            username: registry-admin
          - credentials:
              - temporary: false
                type: password
                value: changeme
            enabled: true
            realmRoles:
              - sr-developer
            username: registry-developer
          - credentials:
              - temporary: false
                type: password
                value: changeme
            enabled: true
            realmRoles:
              - sr-readonly
            username: registry-user
    重要

    如果要部署到生产环境,则必须使用适合您的环境的值自定义此 KeycloakRealm 资源。您还可以使用 Red Hat Single Sign-On Web 控制台创建和管理域。

  6. 如果您的集群没有配置有效的 HTTPS 证书,您可以创建以下 HTTP 服务和 Ingress 资源作为临时临时解决方案:

    1. 点击 Networking and then Services,然后使用以下示例点击 Create Service

      apiVersion: v1
      kind: Service
      metadata:
        name: keycloak-http
        labels:
          app: keycloak
      spec:
        ports:
          - name: keycloak-http
            protocol: TCP
            port: 8080
            targetPort: 8080
        selector:
          app: keycloak
          component: keycloak
        type: ClusterIP
        sessionAffinity: None
      status:
        loadBalancer: {}
    2. Networking,然后点 Ingresses,然后使用以下示例点击 Create Ingress

      apiVersion: networking.k8s.io/v1beta1
      kind: Ingress
      metadata:
        name: keycloak-http
        labels:
          app: keycloak
      spec:
        rules:
          - host: keycloak-http.local
            http:
              paths:
                - path: /
                  pathType: ImplementationSpecific
                  backend:
                    serviceName: keycloak-http
                    servicePort: 8080

      修改 主机 值,以创建 Apicurio Registry 用户可访问的路由,并使用它而不是由 Red Hat Single Sign-On Operator 创建的 HTTPS 路由。

  7. Apicurio Registry Operator,在 ApicurioRegistry 选项卡中,点击 Create ApicurioRegistry,使用以下示例替换 keycloak 部分中的值。

    apiVersion: registry.apicur.io/v1
    kind: ApicurioRegistry
    metadata:
      name: example-apicurioregistry-kafkasql-keycloak
    spec:
      configuration:
        security:
          keycloak:
            url: "http://keycloak-http-<namespace>.apps.<cluster host>/auth"
            # ^ Required
            # Keycloak server URL, must end with `/auth`.
            # Use an HTTP URL in development.
            realm: "registry"
            # apiClientId: "registry-client-api"
            # ^ Optional (default value)
            # uiClientId: "registry-client-ui"
            # ^ Optional (default value)
        persistence: 'kafkasql'
        kafkasql:
          bootstrapServers: '<my-cluster>-kafka-bootstrap.<my-namespace>.svc:9092'

5.2. 使用 Red Hat Single Sign-On 配置 Apicurio Registry 身份验证和授权

本节介绍如何使用 Red Hat Single Sign-On 手动配置 Apicurio Registry 的身份验证和授权选项。

注意

或者,了解如何自动配置这些设置的详情,请参考 第 5.1 节 “使用 Red Hat Single Sign-On Operator 保护 Apicurio Registry”

您可以使用基于 OpenID Connect (OIDC)的 OAuth 使用 Red Hat Single Sign-On 为 Apicurio Registry Web 控制台和核心 REST API 启用身份验证。同一 Red Hat Single Sign-On 域和用户使用相同的 Red Hat Single Sign-On 域,用户在使用 OpenID Connect 的 Apicurio Web 控制台和核心 REST API 中联合,以便您仅需要一组凭证。

Apicurio Registry 为默认的 admin、write 和 read-only 用户角色提供基于角色的访问控制的授权。Apicurio Registry 还在 schema 或 API 级别上提供基于内容的授权,其中只有 registry 工件的创建者才能更新或删除它。默认会禁用 Apicurio Registry 身份验证和授权设置。

前提条件

流程

  1. 在 Red Hat Single Sign-On Admin Console 中,为 Apicurio Registry 创建 Red Hat Single Sign-On 域。默认情况下,Apicurio Registry 需要 registry 的域名。有关创建域的详情,请查看 Red Hat Single Sign-On 用户文档
  2. 为 Apicurio Registry API 创建 Red Hat Single Sign-On 客户端。默认情况下,Apicurio Registry 需要以下设置:

    • 客户端 IDregistry-api
    • 客户端协议openid-connect
    • 访问类型 :仅bearer-only

      您可以将默认值用于其他客户端设置。

      注意

      如果您使用 Red Hat Single Sign-On 服务帐户,则客户端 Access Type 必须是 secret,而不是 仅限 bearer-On

  3. 为 Apicurio Registry Web 控制台创建 Red Hat Single Sign-On 客户端。默认情况下,Apicurio Registry 需要以下设置:

    • Client ID:apicurio-registry
    • 客户端协议openid-connect
    • 访问类型public
    • 有效的 Redirect URL:http://my-registry-url:8080/*
    • Web Origins:+

      您可以将默认值用于其他客户端设置。

  4. 在 OpenShift 上的 Apicurio Registry 部署中,使用 Red Hat Single Sign-On 设置以下 Apicurio Registry 环境变量来配置身份验证:

    表 5.2. 配置 Apicurio Registry 身份验证
    环境变量描述类型默认

    AUTH_ENABLED

    如果设置为 true,则需要遵循的环境变量。

    字符串

    false

    KEYCLOAK_URL

    要使用的红帽单点登录身份验证服务器的 URL。必须以 /auth 结尾。

    字符串

    KEYCLOAK_REALM

    用于身份验证的红帽单点登录域。

    字符串

    registry

    KEYCLOAK_API_CLIENT_ID

    Apicurio Registry REST API 的客户端 ID。

    字符串

    registry-api

    KEYCLOAK_UI_CLIENT_ID

    Apicurio Registry Web 控制台的客户端 ID。

    字符串

    apicurio-registry

    提示

    有关在 OpenShift 中设置环境变量的示例,请参考 第 6.1 节 “在 OpenShift 上配置 Apicurio Registry 健康检查”

  5. 将以下选项设置为 true,在 Red Hat Single Sign-On 中启用 Apicurio Registry 用户角色:

    表 5.3. 配置 Apicurio Registry 用户角色
    环境变量Java 系统属性类型默认值

    ROLES_ENABLED

    registry.auth.roles.enabled

    布尔值

    false

  6. 启用 Apicurio Registry 用户角色时,您必须将 Apicurio Registry 用户分配给 Red Hat Single Sign-On 域中的以下默认用户角色之一:

    表 5.4. registry 身份验证和授权的默认用户角色
    角色读取工件编写工件全局规则概述

    sr-admin

    对所有创建、读取、更新和删除操作的完整访问权限。

    sr-developer

    除配置全局规则外,创建、读取、更新和删除操作的访问权限。此角色可以配置工件规则。

    sr-readonly

    仅读和搜索操作的访问权限。此角色无法配置任何规则。

  7. 将以下内容设置为 true,为 Apicurio Registry 中的 schema 和 API 工件启用仅限所有者的授权:

    表 5.5. 配置仅限所有者的授权
    环境变量Java 系统属性类型默认值

    REGISTRY_AUTH_OWNER_ONLY_AUTHORIZATION

    registry.auth.owner-only-authorization

    布尔值

    false

其他资源

5.3. 从 OpenShift 集群内部配置 HTTPS 连接 Apicurio Registry

以下步骤演示了如何配置 Apicurio Registry 部署,以便从 OpenShift 集群内部为 HTTPS 连接公开端口。

警告

这类连接不能在集群外部直接提供。路由基于主机名,在 HTTPS 连接时进行编码。因此,仍然需要使用边缘终止或其他配置。请参阅 第 5.4 节 “从 OpenShift 集群外部配置 HTTPS 连接到 Apicurio Registry”

前提条件

  • 您必须已安装了 Apicurio Registry Operator。

流程

  1. 生成带有自签名证书的 密钥存储。如果您使用自己的证书,您可以跳过这一步。

    keytool -genkey -trustcacerts -keyalg RSA -keystore registry-keystore.jks -storepass password
  2. 创建新机密,以存放密钥存储和密钥存储的密码。

    1. 在 OpenShift Web 控制台的左侧导航菜单中,点 Workloads > Secrets > Create Key/Value Secret
    2. 使用以下值:
      Name: registry-keystore
      Key 1: keystore.jks
      Value 1: registry-keystore.jks (上传的文件)
      Key 2: password
      Value 2: password

      注意

      如果您遇到 java.io.IOException: Invalid keystore format,二进制文件的上传无法正常工作。作为替代方案,使用 cat registry-keystore.jks | base64 -w0 > data.txt 将文件编码为 base64 字符串,并以 yaml 用户身份手动编辑 Secret 资源以手动添加编码的文件。

  3. 编辑 Apicurio Registry 实例的 Deployment 资源。您可以在 Apicurio Registry Operator 的 status 字段中找到正确的名称。

    1. 将密钥存储 secret 添加为卷:

      template:
        spec:
          volumes:
          - name: registry-keystore-secret-volume
            secret:
            secretName: registry-keystore
    2. 添加卷挂载:

      volumeMounts:
        - name: registry-keystore-secret-volume
          mountPath: /etc/registry-keystore
          readOnly: true
    3. 添加 JAVA_OPTIONSKEYSTORE_PASSWORD 环境变量:

      - name: KEYSTORE_PASSWORD
        valueFrom:
          secretKeyRef:
            name: registry-keystore
            key: password
      - name: JAVA_OPTIONS
          value: >-
           -Dquarkus.http.ssl.certificate.key-store-file=/etc/registry-keystore/keystore.jks
           -Dquarkus.http.ssl.certificate.key-store-file-type=jks
           -Dquarkus.http.ssl.certificate.key-store-password=$(KEYSTORE_PASSWORD)
      注意

      在使用字符串插入时顺序非常重要。

    4. 启用 HTTPS 端口:

      ports:
        - containerPort: 8080
          protocol: TCP
        - containerPort: 8443
          protocol: TCP
  4. 编辑 Apicurio Registry 实例的 Service 资源。您可以在 Apicurio Registry Operator 的 status 字段中找到正确的名称。

    ports:
      - name: http
        protocol: TCP
        port: 8080
        targetPort: 8080
      - name: https
        protocol: TCP
        port: 8443
        targetPort: 8443
  5. 验证连接是否正常工作:

    1. 使用 SSH 连接到集群中的 pod (您可以使用 Apicurio Registry pod):

      oc rsh -n default example-apicurioregistry-deployment-vx28s-4-lmtqb
    2. Service 资源查找 Apicurio Registry pod 的集群 IP (请参阅 web 控制台中的 Location 列)。之后,执行测试请求(我们使用自签名证书,因此需要不安全标记):

      curl -k https://172.30.209.198:8443/health
      [...]

5.4. 从 OpenShift 集群外部配置 HTTPS 连接到 Apicurio Registry

以下流程演示了如何配置 Apicurio Registry 部署,以便为 OpenShift 集群外部的连接公开 HTTPS 边缘终止路由。

前提条件

流程

  1. 除了 Apicurio Registry Operator 创建的 HTTP 路由外,还要添加第二个路由。请参见以下示例:

    kind: Route
    apiVersion: route.openshift.io/v1
    metadata:
      [...]
      labels:
        app: example-apicurioregistry
        [...]
    spec:
      host: example-apicurioregistry-default.apps.example.com
      to:
        kind: Service
        name: example-apicurioregistry-service-9whd7
        weight: 100
      port:
        targetPort: 8080
      tls:
        termination: edge
        insecureEdgeTerminationPolicy: Redirect
      wildcardPolicy: None
    注意

    确保设置了 insecureEdgeTerminationPolicy: Redirect configuration 属性。

    如果没有指定证书,OpenShift 将使用默认值。您可以使用以下命令生成自定义自签名证书:

    openssl genrsa 2048 > host.key &&
    openssl req -new -x509 -nodes -sha256 -days 365 -key host.key -out host.cert

    然后,使用 OpenShift CLI 创建路由:

    oc create route edge \
      --service=example-apicurioregistry-service-9whd7 \
      --cert=host.cert --key=host.key \
      --hostname=example-apicurioregistry-default.apps.example.com \
      --insecure-policy=Redirect \
      -n default

第 6 章 配置和管理 Apicurio Registry 部署

本章介绍了如何在 OpenShift 中为 Apicurio Registry 部署配置和管理可选设置:

6.1. 在 OpenShift 上配置 Apicurio Registry 健康检查

您可以为存活度和就绪度探测配置可选环境变量,以监控 OpenShift 上的 Apicurio Registry 服务器的健康状态:

  • 存活度探测 测试应用程序是否可以进行进度。如果应用程序无法进行进行,OpenShift 会自动重启失败的 Pod。
  • 就绪度探测 测试应用是否已准备好处理请求。如果应用未就绪,请求可能会变得不全,而且 OpenShift 会停止发送探测失败的请求。如果其他 Pod 为 OK,则它们将继续接收请求。
重要

存活度和就绪度环境变量的默认值是为大多数情况而设计的,只有在您的环境需要时才应更改。对默认值的任何更改都取决于您的硬件、网络和数据存储量。这些值应该尽可能低,以避免不必要的开销。

前提条件

  • 您必须具有具有集群管理员访问权限的 OpenShift 集群。
  • 您必须在 OpenShift 上安装了 Apicurio Registry。
  • 您必须已在 AMQ Streams 或 PostgreSQL 中安装和配置了所选 Apicurio Registry 存储。

流程

  1. 在 OpenShift Container Platform web 控制台中,使用具有集群管理员特权的帐户登录。
  2. Installed Operators > Red Hat Integration - Apicurio Registry
  3. ApicurioRegistry 选项卡中,点部署的 Operator 自定义资源,如 example-apicurioregistry
  4. 在主概览页面中,找到 Apicurio Registry 部署的 Deployment Name 部分以及对应的 DeploymentConfig 名称,如 example-apicurioregistry
  5. 在左侧导航菜单中,点 Workloads > Deployment Configs,然后选择您的 DeploymentConfig 名称。
  6. Environment 选项卡,在 Single values env 部分中输入您的环境变量,例如:

    • 名称LIVENESS_STATUS_RESET
    • 350
  7. 点底部的 Save

    另外,您可以使用 OpenShift oc 命令执行这些步骤。如需了解更多详细信息,请参阅 OpenShift CLI 文档

6.2. Apicurio Registry 健康检查的环境变量

本节论述了 OpenShift 中 Apicurio Registry 健康检查的可用环境变量。这包括存活度和就绪度探测,以监控 OpenShift 中 Apicurio Registry 服务器的健康状态。有关示例步骤,请参阅 第 6.1 节 “在 OpenShift 上配置 Apicurio Registry 健康检查”

重要

以下环境变量仅供参考。默认值是为大多数情况而设计的,只有在您的环境需要时才应更改。对默认值的任何更改都取决于您的硬件、网络和数据存储量。这些值应该尽可能低,以避免不必要的开销。

存活度环境变量
表 6.1. Apicurio Registry 存活度探测的环境变量
Name描述类型默认

LIVENESS_ERROR_THRESHOLD

存活度探测失败前可以发生的存活度问题或错误数量。

整数

1

LIVENESS_COUNTER_RESET

必须发生阈值错误数的周期。例如:如果这个值是 60,则阈值是 1,检查在 1 分钟内出现两个错误后失败

60

LIVENESS_STATUS_RESET

在没有更多错误的情况下,必须经过延迟的秒数将重置为 OK 状态。

300

LIVENESS_ERRORS_IGNORED

以逗号分隔的忽略存活度例外列表。

字符串

io.grpc.StatusRuntimeException,org.apache.kafka.streams.errors.InvalidStateStoreException

注意

由于 OpenShift 会自动重启一个失败存活度检查的 Pod,因此存活度设置与就绪度设置不同,因此不会直接影响 OpenShift 上的 Apicurio Registry 的行为。

就绪度环境变量
表 6.2. Apicurio Registry 就绪度探测的环境变量
Name描述类型默认

READINESS_ERROR_THRESHOLD

就绪度探测失败前可以发生的就绪问题或错误数。

整数

1

READINESS_COUNTER_RESET

必须发生阈值错误数的周期。例如:如果这个值是 60,则阈值是 1,检查在 1 分钟内发生两个错误后失败。

60

READINESS_STATUS_RESET

在没有更多错误的情况下,必须经过延迟的秒数将重置为 OK 状态。在本例中,这意味着 Pod 保持未就绪的时间,直到它返回到正常操作。

300

READINESS_TIMEOUT

就绪度跟踪两个操作的超时时间:

  • 存储请求完成所需的时间
  • HTTP REST API 请求返回响应所需的时间

如果这些操作用时比配置的超时时间更长,这将计为就绪问题或错误。这个值控制这两个操作的超时。

5

6.3. 管理 Apicurio Registry 环境变量

Apicurio Registry Operator 管理最常见的 Apicurio Registry 配置,但有一些选项可以手动调整。您可以通过在 Apicurio Registry Deployment 资源中设置环境变量来更新它们。如果 ApicurioRegistry CR 中没有特定的配置选项,您可以使用环境变量来调整它。

流程

OpenShift web 控制台
  1. 选择 Installed Operators 选项卡,然后选择 Red Hat Integration - Apicurio Registry Operator
  2. Apicurio Registry 选项卡中,点 Apicurio Registry 部署的 ApicurioRegistry CR。
  3. 在主概览页面中,查看 managedResources 部分,其中包含由 Operator 管理的 Deployment 的名称,以部署您的 Apicurio Registry 实例。
  4. 在左侧菜单中的 Workloads > Deployments 中查找 Deployment
  5. 选择具有正确名称的 Deployment,然后选择 Environment 选项卡。
  6. 您可以将环境变量添加到 Single values (env) 部分。
  7. 点底部的 Save
OpenShift CLI
  1. 选择安装 Apicurio Registry 的项目。
  2. 运行 oc get apicurioregistry 以获取 ApicurioRegistry CR 列表
  3. 在代表您要配置的 Apicurio Registry 实例的 CR 上运行 oc describe
  4. 查看 status 部分中的 managedResource
  5. 找到 Deployment 并输入 oc edit
  6. spec.template.spec.containers[0].env 部分中添加或修改环境变量。

6.4. 配置 Apicurio Registry Web 控制台

您可以配置 Apicurio Registry Web 控制台,专门用于部署环境或自定义其行为。本节详细介绍了如何为 Apicurio Registry Web 控制台配置可选环境变量。

前提条件

  • 您必须已安装了 Apicurio Registry。
配置 Web 控制台部署环境

当用户将浏览器导航到 Apicurio Registry Web 控制台时,会加载一些初始配置。有两个重要的配置属性:

  • 后端 Apicurio Registry REST API 的 URL
  • frontend Apicurio Registry Web 控制台的 URL

通常,Apicurio Registry 会自动检测并生成这些设置,但有些部署环境可能会失败。如果发生这种情况,您可以将环境变量配置为为您的环境明确设置这些 URL。

流程

配置以下环境变量以覆盖默认 URL:

  • REGISTRY_UI_CONFIG_APIURL :设置后端 Apicurio Registry REST API 的 URL。例如: https://registry.my-domain.com/apis/registry
  • REGISTRY_UI_CONFIG_UIURL :设置 frontend Apicurio Registry Web 控制台的 URL。例如: https://registry.my-domain.com/ui
以只读模式配置控制台

您可以将 Apicurio Registry Web 控制台配置为只读模式作为可选功能。这个模式禁用 Apicurio Registry Web 控制台中的所有功能,允许用户更改已注册的工件。例如,这包括以下内容:

  • 创建工件
  • 上传工件的新版本
  • 更新工件的元数据
  • 删除工件

流程

配置以下环境变量,以只读模式设置 Apicurio Registry Web 控制台:

  • REGISTRY_UI_FEATURES_READONLY: 设置为 true 以启用只读模式。默认值为 false

6.5. 配置 Apicurio Registry 日志

您可以在运行时设置 Apicurio Registry 日志记录配置。Apicurio Registry 提供了一个 REST 端点,用于设置特定日志记录器的日志级别,以进行精细的日志记录。本节介绍如何使用 Apicurio Registry /admin REST API 在运行时查看和设置 Apicurio Registry 日志级别。

前提条件

  • 获取用于访问 Apicurio Registry 实例的 URL,如果 OpenShift 中部署了 Apicurio Registry,则获取您的 Apicurio Registry 路由。这个简单示例使用 localhost:8080 的 URL。

流程

  1. 使用此 curl 命令获取日志记录器 io.apicurio.registry.storage 的当前日志级别:

    $ curl -i localhost:8080/apis/registry/v2/admin/loggers/io.apicurio.registry.storage
    HTTP/1.1 200 OK
    [...]
    Content-Type: application/json
    {"name":"io.apicurio.registry.storage","level":"INFO"}
  2. 使用此 curl 命令将日志记录器 io.apicurio.registry.storage 的日志级别更改为 DEBUG

    $ curl -X PUT -i -H "Content-Type: application/json" --data '{"level":"DEBUG"}' localhost:8080/apis/registry/v2/admin/loggers/io.apicurio.registry.storage
    HTTP/1.1 200 OK
    [...]
    Content-Type: application/json
    {"name":"io.apicurio.registry.storage","level":"DEBUG"}
  3. 使用此 curl 命令将日志记录器 io.apicurio.registry.storage 的日志级别恢复为默认值:

    $ curl -X DELETE -i localhost:8080/apis/registry/v2/admin/loggers/io.apicurio.registry.storage
    HTTP/1.1 200 OK
    [...]
    Content-Type: application/json
    {"name":"io.apicurio.registry.storage","level":"INFO"}

6.6. 配置 Apicurio Registry 事件源

您可以配置 Apicurio Registry,在更改 registry 时发送事件。例如,Apicurio Registry 可以在创建、更新、删除、删除等模式和 API 工件时触发事件。您可以配置 Apicurio Registry,以以这种方式将事件发送到应用程序并第三方集成。

有不同的协议可用于传输事件。当前实施的协议是 HTTP 和 Apache Kafka。但是,无论协议是什么,都将使用 CNCF CloudEvents 规格发送事件。

所有事件类型都在 io. apicurio.registry.registry.events.dto.RegistryEventType 中定义。例如,事件类型包括:

  • io.apicurio.registry.artifact-created
  • io.apicurio.registry.artifact-updated
  • io.apicurio.registry.artifact-rule-created
  • io.apicurio.registry.global-rule-created

您可以使用 Java 系统属性或等同的环境变量在 Apicurio Registry 中配置云事件。

前提条件

  • 您必须具有要发送 Apicurio Registry 云事件的应用程序。例如,这可以是自定义应用程序或第三方应用程序。
使用 HTTP 配置 Apicurio Registry 事件源

本节中的示例显示了在 http://my-app-host:8888/events 中运行的自定义应用程序。

流程

  1. 使用 HTTP 协议时,将 Apicurio Registry 配置设置为将事件发送到应用程序,如下所示:

    • registry.events.sink.my-custom-consumer=http://my-app-host:8888/events
  2. 如果需要,您可以按照如下所示配置多个事件消费者:

    • registry.events.sink.my-custom-consumer=http://my-app-host:8888/events
    • registry.events.sink.other-consumer=http://my-consumer.com/events
使用 Apache Kafka 配置 Apicurio Registry 事件源

本节中的示例显示了在 my-kafka-host:9092 上运行的名为 my-registry-events 的 Kafka 主题。

流程

  1. 使用 Kafka 协议时,按如下所示设置 Kafka 主题:

    • registry.events.kafka.topic=my-registry-events
  2. 您可以使用 KAFKA_BOOTSTRAP_SERVERS 环境变量设置 Kafka producer 的配置:

    • KAFKA_BOOTSTRAP_SERVERS=my-kafka-host:9092

      另外,您可以使用 registry.events.kafka.config 前缀来设置 kafka producer 的属性,例如: registry.events.kafka.config.bootstrap.servers=my-kafka-host:9092

  3. 如果需要,您还可以将 Kafka 主题分区设置为用于生成事件:

    • registry.events.kafka.topic-partition=1

其他资源

第 7 章 Apicurio Registry Operator 配置参考

本章提供了配置 Apicurio Registry Operator 用于部署 Apicurio Registry 的自定义资源的详细信息:

7.1. Apicurio Registry 自定义资源

Apicurio Registry Operator 定义了一个 ApicurioRegistry 自定义资源(CR),代表 OpenShift 上 Apicurio Registry 的单一部署。

这些资源对象由用户创建和维护,以指示 Apicurio Registry Operator 如何部署和配置 Apicurio Registry。

Example ApicurioRegistry CR

以下命令显示 ApicurioRegistry 资源:

oc get apicurioregistry
oc edit apicurioregistry example-apicurioregistry
apiVersion: registry.apicur.io/v1
kind: ApicurioRegistry
metadata:
  name: example-apicurioregistry
  namespace: demo-kafka
  # ...
spec:
  configuration:
    persistence: kafkasql
    kafkasql:
      bootstrapServers: 'my-cluster-kafka-bootstrap.demo-kafka.svc:9092'
  deployment:
    host: >-
      example-apicurioregistry.demo-kafka.example.com
status:
  conditions:
  - lastTransitionTime: "2021-05-03T10:47:11Z"
    message: ""
    reason: Reconciled
    status: "True"
    type: Ready
  info:
    host: example-apicurioregistry.demo-kafka.example.com
  managedResources:
  - kind: Deployment
    name: example-apicurioregistry-deployment
    namespace: demo-kafka
  - kind: Service
    name: example-apicurioregistry-service
    namespace: demo-kafka
  - kind: Ingress
    name: example-apicurioregistry-ingress
    namespace: demo-kafka
重要

默认情况下,Apicurio Registry Operator 只监视自己的项目命名空间。因此,如果要手动部署 Operator,则必须在同一命名空间中创建 ApicurioRegistry CR。您可以通过更新 Operator Deployment 资源中的 WATCH_NAMESPACE 环境变量来修改此行为。

7.2. Apicurio Registry CR spec

specApicurioRegistry CR 的一部分,用于为 Operator 提供所需的状态或配置。

ApicurioRegistry CR spec 内容

以下示例块包含可能 spec 配置选项的完整树。有些字段可能不是必须的,或者不应该同时定义。

spec:
  configuration:
    persistence: <string>
    sql:
      dataSource:
        url: <string>
        userName: <string>
        password: <string>
    kafkasql:
      bootstrapServers: <string>
      security:
        tls:
          truststoreSecretName: <string>
          keystoreSecretName: <string>
        scram:
          mechanism: <string>
          truststoreSecretName: <string>
          user: <string>
          passwordSecretName: <string>
    ui:
      readOnly: <string>
    logLevel: <string>
    security:
      keycloak:
        url: <string>
        realm: <string>
        apiClientId: <string>
        uiClientId: <string>
  deployment:
    replicas: <int32>
    host: <string>
    affinity: <k8s.io/api/core/v1 Affinity struct>
    tolerations: <k8s.io/api/core/v1 []Toleration slice>

下表描述了每个配置选项:

表 7.1. ApicurioRegistry CR spec 配置选项
配置选项type默认值描述

配置

-

-

用于配置 Apicurio Registry 应用程序的部分

configuration/persistence

字符串

required

存储后端.一个 sql,kafkasql

configuration/sql

-

-

SQL 存储后端配置

configuration/sql/dataSource

-

-

SQL 存储后端的数据库连接配置

configuration/sql/dataSource/url

字符串

required

数据库连接 URL 字符串

configuration/sql/dataSource/userName

字符串

required

数据库连接用户

configuration/sql/dataSource/password

字符串

empty

数据库连接密码

configuration/kafkasql

-

-

Kafka 存储后端配置

configuration/kafkasql/bootstrapServers

字符串

required

Kafka bootstrap 服务器 URL,用于 Streams 存储后端

configuration/kafkasql/security/tls

-

-

为 Kafka 存储后端配置 TLS 身份验证的部分

configuration/kafkasql/security/tls/truststoreSecretName

字符串

required

Kafka 的 TLS 信任存储的 secret 名称

configuration/kafkasql/security/tls/keystoreSecretName

字符串

required

包含用户 TLS 密钥存储的 secret 名称

configuration/kafkasql/security/scram/truststoreSecretName

字符串

required

Kafka 的 TLS 信任存储的 secret 名称

configuration/kafkasql/security/scram/user

字符串

required

SCRAM 用户名

configuration/kafkasql/security/scram/passwordSecretName

字符串

required

包含 SCRAM 用户密码的 secret 名称

configuration/kafkasql/security/scram/mechanism

字符串

SCRAM-SHA-512

SASL 机制

configuration/ui

-

-

Apicurio Registry Web 控制台设置

configuration/ui/readOnly

字符串

false

将 Apicurio Registry Web 控制台设置为只读模式

configuration/logLevel

字符串

INFO

Apicurio Registry 日志级别.一个 INFO,DEBUG

配置/安全性

-

-

Apicurio Registry Web 控制台和 REST API 安全设置

configuration/security/keycloak

-

-

使用 Keycloak 的 Web 控制台和 REST API 安全配置

configuration/security/keycloak/url

字符串

required

Keycloak URL,必须以 /auth结尾

configuration/security/keycloak/realm

字符串

required

Keycloak 域

configuration/security/keycloak/apiClientId

字符串

registry-client-api

REST API 的 Keycloak 客户端

configuration/security/keycloak/uiClientId

字符串

registry-client-ui

web 控制台的 Keycloak 客户端

部署

-

-

Apicurio Registry 部署设置的部分

deployment/replicas

正整数

1

要部署的 Apicurio Registry pod 的数量

deployment/host

字符串

auto-generated

提供 Apicurio Registry 控制台和 API 的主机/URL。如果可能,Apicurio Registry Operator 会尝试根据集群路由器的设置来确定正确的值。该值只会自动生成一次,因此用户可以在之后覆盖它。

deployment/affinity

k8s.io/api/core/v1 Affinity struct

empty

Apicurio Registry 部署关联性配置

deployment/tolerations

k8s.io/api/core/v1 []Toleration 片段

empty

Apicurio Registry 部署配置

注意

如果某个选项标记为 必需的,则可能对正在启用的其他配置选项有条件。可以接受空值,但 Operator 并不执行指定的操作。

7.3. Apicurio Registry CR 状态

status 是 Apicurio Registry Operator 管理的 CR 部分,其中包含当前部署和应用程序状态的描述。

ApicurioRegistry CR 状态内容

status 部分包含以下字段:

status:
  info:
    host: <string>
  conditions: <list of:>
  - type: <string>
    status: <string, one of: True, False, Unknown>
    reason: <string>
    message: <string>
    lastTransitionTime: <string, RFC-3339 timestamp>
  managedResources: <list of:>
  - kind: <string>
    namespace: <string>
    name: <string>
表 7.2. ApicurioRegistry CR status 字段
Status 字段类型描述

info

-

包含关于部署的 Apicurio Registry 的信息。

info/host

字符串

可以访问 Apicurio Registry UI 和 REST API 的 URL。

conditions

-

报告相应部署的 Apicurio Registry 或 Operator 的状态的条件列表。

conditions/type

字符串

条件的类型。

conditions/status

字符串

条件的状态,一个 True,False,Unknown

conditions/reason

字符串

程序识别符表示条件最后一次转换的原因。

conditions/message

字符串

人类可读的消息,表示关于该转换的详细信息。

conditions/lastTransitionTime

字符串

条件从一个状态转换到另一个状态的时间。

managedResources

-

由 Apicurio Registry Operator 管理的 OpenShift 资源列表

managedResources/kind

字符串

资源类型。

managedResources/namespace

字符串

资源对象。

managedResources/name

字符串

资源名称。

7.4. Apicurio Registry 受管资源

在部署 Apicurio Registry 时由 Apicurio Registry 管理的资源如下:

  • Deployment
  • Service
  • 入口 (和 路由
  • PodDisruptionBudget

7.5. Apicurio Registry Operator 标签

由 Apicurio Registry Operator 管理的资源通常被标记为如下:

表 7.3. 受管资源的 Apicurio Registry Operator 标签
标签描述

app

资源所属的 Apicurio Registry 部署的名称,具体取决于指定的 ApicurioRegistry CR 的名称。

apicur.io/type

deployment: apicurio-registryoperator的类型

apicur.io/name

部署名称:与 appapicurio-registry-operator的值相同

apicur.io/version

Apicurio Registry 或 Apicurio Registry Operator 的版本

app.kubernetes.io/*

应用程序部署一组推荐的 Kubernetes 标签。

com.companyrht.*'

红帽产品的计量标签。

附录 A. 使用您的订阅

Apicurio Registry 通过软件订阅提供。要管理您的订阅,请访问红帽客户门户中的帐户。

访问您的帐户

  1. 转至 access.redhat.com
  2. 如果您还没有帐户,请创建一个帐户。
  3. 登录到您的帐户。

激活订阅

  1. 转至 access.redhat.com
  2. 导航到 My Subscriptions
  3. 导航到 激活订阅 并输入您的 16 位激活号。

下载 ZIP 和 TAR 文件

要访问 ZIP 或 TAR 文件,请使用客户门户网站查找下载的相关文件。如果您使用 RPM 软件包,则不需要这一步。

  1. 打开浏览器并登录红帽客户门户网站 产品下载页面,网址为 access.redhat.com/downloads
  2. 找到 Integration and Automation 类别中的 Red Hat Integration 条目。
  3. 选择所需的 Apicurio Registry 产品。此时会打开 Software Downloads 页面。
  4. 单击组件的 Download 链接。

为系统注册软件包

要在 Red Hat Enterprise Linux 上安装 RPM 软件包,必须注册您的系统。如果您使用 ZIP 或 TAR 文件,则不需要这一步。

  1. 转至 access.redhat.com
  2. 进入 Registration Assistant
  3. 选择您的操作系统版本,再继续到下一页。
  4. 使用您的系统终端中列出的命令完成注册。

如需了解更多相关信息,请参阅 如何注册到红帽客户门户网站(Red Hat Customer Portal )

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.