在 OpenShift 中安装和部署 Apicurio Registry
安装和部署 Apicurio Registry 2.0
摘要
前言
使开源包含更多
红帽致力于替换我们的代码、文档和 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。
前提条件
-
您必须进入 Red Hat Integration Downloads,选择产品版本,并在 Apicurio Registry CRD
.zip
文件中下载示例。
流程
为安装创建一个项目,如
service-registry
:NAMESPACE="service-registry" oc new-project "$NAMESPACE"
应用位于
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 数据库。
流程
使用配置了数据库连接创建
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
在部署 Operator 的同一命名空间中创建一个
ApicurioRegistry
CRoc 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 集群。
流程
- 在 OpenShift Container Platform web 控制台中,使用具有集群管理员特权的帐户登录。
创建一个新的 OpenShift 项目:
- 在左侧导航菜单中,单击 Home、Project,然后 创建项目。
-
输入项目名称,如
my-project
,然后单击 Create。
- 在左侧导航栏中,点 Operators,然后点 OperatorHub。
-
在 Filter by keyword 文本框中,输入
registry
来查找 Red Hat Integration - Apicurio Registry Operator。 - 阅读 Operator 的信息,然后点 Install 以显示 Operator 订阅页面。
选择您的订阅设置,例如:
更新频道 :选择以下之一:
- 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
- 批准策略 :选择 Automatic 或 Manual
- 点 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 文档。
前提条件
- 您必须具有集群管理员访问 OpenShift 集群
- 有关安装 AMQ Streams 的详情,请参阅 在 OpenShift 中使用 AMQ Streams。本节演示了使用 OpenShift OperatorHub 安装的简单示例。
流程
- 在 OpenShift Container Platform web 控制台中,使用具有集群管理员特权的帐户登录。
-
切换到您要在其中安装 AMQ Streams 的 OpenShift 项目。例如,从 Project 下拉菜单中选择
my-project
。 - 在左侧导航栏中,点 Operators,然后点 OperatorHub。
-
在 Filter by keyword 文本框中,输入
AMQ Streams
来查找 Red Hat Integration - AMQ Streams Operator。 - 阅读 Operator 的信息,然后点 Install 以显示 Operator 订阅页面。
选择您的订阅设置,例如:
- 更新频道,然后 amq-streams-1.8.x
Installation Mode: 选择以下之一:
- 集群中的所有命名空间(默认)
- 集群中的特定命名空间 > my-project
- 批准策略 :选择 Automatic 或 Manual
- 点 Install,稍等片刻,直到 Operator 准备就绪可用。
3.2. 使用 OpenShift 上的 Kafka 存储配置 Apicurio Registry
本节介绍如何在 OpenShift 中使用 AMQ Streams 为 Apicurio Registry 配置基于 Kafka 的存储。kafkasql
存储选项使用 Kafka 存储和内存中 H2 数据库。当为 OpenShift 上的 Kafka 集群配置 持久性存储时
,这个存储选项适用于生产环境。
您可以在现有 Kafka 集群中安装 Apicurio Registry,或根据您的环境创建新 Kafka 集群。
前提条件
- 您必须具有具有集群管理员访问权限的 OpenShift 集群。
- 您必须已安装了 Apicurio Registry。请参阅 第 2 章 在 OpenShift 上安装 Apicurio Registry。
- 您必须已安装了 AMQ Streams。请参阅 第 3.1 节 “从 OpenShift OperatorHub 安装 AMQ Streams”。
流程
- 在 OpenShift Container Platform web 控制台中,使用具有集群管理员特权的帐户登录。
如果您还没有配置 Kafka 集群,请使用 AMQ Streams 创建新 Kafka 集群。例如,在 OpenShift OperatorHub 中:
- 点 Installed Operators,然后点 Red Hat Integration - AMQ Streams。
- 在 Provided APIs 下,然后点 Create Instance 来创建新的 Kafka 集群。
根据需要编辑自定义资源定义,然后点 Create。
警告默认示例创建带有 3 Zookeeper 节点和 3 Kafka 节点具有
临时存储
的集群。这种临时存储仅适用于开发和测试,不适用于生产环境。如需了解更多详细信息,请参阅 在 OpenShift 中使用 AMQ Streams。
- 集群就绪后,点 Provided APIs > Kafka > my-cluster > YAML。
在
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 ...
- 点 Installed Operators > Red Hat Integration - Apicurio Registry > ApicurioRegistry > Create ApicurioRegistry。
粘贴到以下自定义资源定义中,但使用之前复制的
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'
- 点 Create 并等待 OpenShift 上创建 Apicurio Registry 路由。
点 Networking > Route 访问 Apicurio Registry web 控制台的新路由。例如:
http://example-apicurioregistry-kafkasql.my-project.my-domain-name.com/
其他资源
- 有关使用 AMQ Streams 创建 Kafka 集群和主题的详情,请参阅 在 OpenShift 中使用 AMQ Streams。
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。
流程
- 在 OpenShift Web 控制台中,点 Installed Operators,选择 AMQ Streams Operator 详情,然后选择 Kafka 选项卡。
- 点 Create Kafka 为 Apicurio 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
Apicurio Registry 用来存储数据的默认 Kafka 主题名称为
kafkasql-journal
。本主题由 Apicurio Registry 自动创建。您可以通过设置适当的环境变量(默认值)来覆盖此行为或默认主题名称:-
REGISTRY_KAFKASQL_TOPIC_AUTO_CREATE=true
-
REGISTRY_KAFKASQL_TOPIC=kafkasql-journal
如果您决定不手动创建 Kafka 主题,请跳过下一步。
-
点击 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
创建一个 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 所需的主题和资源配置授权。这是一个简单的许可示例。
点 Workloads,然后点 AMQ Streams 为 Apicurio Registry 创建的两个 secret 来连接到 Kafka 集群:
-
my-cluster-cluster-ca-cert
- 包含 Kafka 集群的 PKCS12 信任存储 my-user
- 包含用户的密钥存储注意secret 的名称会根据集群或用户名而有所不同。
-
如果手动创建 secret,它们必须包含以下键值对:
my-cluster-ca-cert
-
ca.p12
- PKCS12 格式的信任存储 -
ca.password
- truststore password
-
my-user
-
user.p12
- PKCS12 格式的密钥存储 -
user.password
- keystore password
-
配置以下示例配置,以部署 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。
流程
- 在 OpenShift Web 控制台中,点 Installed Operators,选择 AMQ Streams Operator 详情,然后选择 Kafka 选项卡。
- 点 Create Kafka 为 Apicurio Registry 存储置备新的 Kafka 集群。
将
authorization
和tls
字段配置为对 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 主题,请跳过下一步。
-
点击 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
创建一个 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 所需的主题和资源配置授权。这是一个简单的许可示例。
点 Workloads,然后点 AMQ Streams 为 Apicurio Registry 创建的两个 secret 来连接到 Kafka 集群:
-
my-cluster-cluster-ca-cert
- 包含 Kafka 集群的 PKCS12 信任存储 my-user
- 包含用户的密钥存储注意secret 的名称会根据集群或用户名而有所不同。
-
如果手动创建 secret,它们必须包含以下键值对:
my-cluster-ca-cert
-
ca.p12
- PKCS12 格式的信任存储 -
ca.password
- truststore password
-
my-user
-
Password
- 用户密码
-
配置以下示例设置以部署 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 集群进行身份验证。
前提条件
- 您已在 AMQ Streams 中配置了基于 Kafka 的 Apicurio Registry 数据存储。请参阅 第 3.2 节 “使用 OpenShift 上的 Kafka 存储配置 Apicurio Registry”。
流程
在 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
其他资源
- 有关如何在 OpenShift 中设置 Apicurio Registry 环境变量的示例,请参考 第 6.1 节 “在 OpenShift 上配置 Apicurio Registry 健康检查”
第 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 集群。
流程
- 在 OpenShift Container Platform web 控制台中,使用具有集群管理员特权的帐户登录。
-
更改到您要在其中安装 PostgreSQL Operator 的 OpenShift 项目。例如,从 Project 下拉菜单中选择
my-project
。 - 在左侧导航栏中,点 Operators,然后点 OperatorHub。
-
在 Filter by keyword 文本框中,输入
PostgreSQL
来查找适合您环境的 Operator,例如: 为 OpenShift 或使用 Dev4Ddevs.com 的 Crunchy PostgreSQL 。 - 阅读 Operator 的信息,然后点 Install 以显示 Operator 订阅页面。
选择您的订阅设置,例如:
- 更新频道 :stable
- Installation Mode:A specific namespace on the cluster, my-project
- 批准策略 :选择 Automatic 或 Manual
点 Install,稍等片刻,直到 Operator 准备就绪可用。
重要您必须从所选 PostgreSQL Operator 中读取文档,以了解有关如何创建和管理数据库的详细信息。
4.2. 使用 OpenShift 上的 PostgreSQL 数据库存储配置 Apicurio Registry
本节介绍如何使用 PostgreSQL 数据库 Operator 为 OpenShift 上的 Apicurio Registry 配置存储。您可以在现有数据库中安装 Apicurio Registry,或根据您的环境创建新数据库。本节演示了通过 Dev4Ddevs.com 使用 PostgreSQL Operator 的简单示例。
前提条件
- 您必须具有具有集群管理员访问权限的 OpenShift 集群。
- 您必须已安装了 Apicurio Registry。请参阅 第 2 章 在 OpenShift 上安装 Apicurio Registry。
- 您必须在 OpenShift 上安装了 PostgreSQL Operator。例如,请参阅 第 4.1 节 “从 OpenShift OperatorHub 安装 PostgreSQL 数据库”。
流程
- 在 OpenShift Container Platform web 控制台中,使用具有集群管理员特权的帐户登录。
-
更改到安装 Apicurio Registry 和 PostgreSQL Operator 的 OpenShift 项目。例如,从 Project 下拉菜单中选择
my-project
。 - 为您的 Apicurio Registry 存储创建 PostgreSQL 数据库。例如,单击 Installed Operators,即PostgreSQL Operator by Dev4Ddevs.com,然后创建 数据库。
点击 YAML 并按如下所示编辑数据库设置:
-
Name
:将值改为registry
-
Image
: 将值改为centos/postgresql-12-centos7
-
根据您的环境根据需要编辑任何其他数据库设置,例如:
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
- 单击 Create,然后等待数据库创建完毕。
- 点 Installed Operators > Red Hat Integration - Apicurio Registry > ApicurioRegistry > Create ApicurioRegistry。
粘贴到以下自定义资源定义中,并编辑数据库
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
- 点 Create 并等待 OpenShift 上创建 Apicurio Registry 路由。
点 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
其他资源
- 有关客户端身份验证的详情,请参阅 PostgreSQL 文档。
- 有关导入和导出 registry 内容的详情,请参阅使用 REST API 管理 Apicurio Registry 内容。
4.4. 恢复 Apicurio Registry PostgreSQL 存储
您可以使用 psql
实用程序恢复 pg_dump
创建的 SQL 转储文件。
前提条件
-
您必须使用
pg_dump
备份 PostgreSQL datbase。请参阅 第 4.3 节 “备份 Apicurio Registry PostgreSQL 存储”。 - 所有拥有对象或对转储数据库中对象的权限都必须存在。
流程
运行以下命令来创建数据库:
$ createdb -T template0 dbname
输入以下命令恢复 SQL 转储
$ psql dbname < dumpfile
- 在每个数据库上运行 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。
其他资源
有关 Java 客户端应用程序安全配置的详情,请查看以下操作:
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 支持以下用户角色:
Name | 功能 |
---|---|
| 完整访问,无限制。 |
|
创建工件并配置工件规则。无法修改全局规则,执行导入/导出,或者使用 |
|
仅查看和搜索。无法修改工件或规则,执行导入/导出,或者使用 |
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 文档。
流程
- 在 OpenShift Web 控制台中,点 Installed Operators 和 Red Hat Single Sign-On Operator,然后选择 Keycloak 选项卡。
点 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
- 等待实例创建好,然后单击 Networking,然后单击 Routes 以访问 keycloak 实例的新路由。
-
点 Location URL,复制显示的
./auth
URL 值,以便稍后在部署 Apicurio Registry 时使用。 点 Installed Operators 和 Red 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 控制台创建和管理域。如果您的集群没有配置有效的 HTTPS 证书,您可以创建以下 HTTP 服务和
Ingress
资源作为临时临时解决方案:点击 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: {}
点 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 路由。
点 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 身份验证和授权设置。
前提条件
- Red Hat Single Sign-On 已安装并正在运行。如需了解更多详细信息,请参阅 Red Hat Single Sign-On 用户文档。
- Apicurio Registry 已安装并运行。
流程
-
在 Red Hat Single Sign-On Admin Console 中,为 Apicurio Registry 创建 Red Hat Single Sign-On 域。默认情况下,Apicurio Registry 需要
registry
的域名。有关创建域的详情,请查看 Red Hat Single Sign-On 用户文档。 为 Apicurio Registry API 创建 Red Hat Single Sign-On 客户端。默认情况下,Apicurio Registry 需要以下设置:
-
客户端 ID :
registry-api
-
客户端协议 :
openid-connect
访问类型 :仅
bearer-only
您可以将默认值用于其他客户端设置。
注意如果您使用 Red Hat Single Sign-On 服务帐户,则客户端 Access Type 必须是 secret,而不是
仅限 bearer-On
。
-
客户端 ID :
为 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:
+
您可以将默认值用于其他客户端设置。
-
Client ID:
在 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 健康检查”。
将以下选项设置为
true
,在 Red Hat Single Sign-On 中启用 Apicurio Registry 用户角色:表 5.3. 配置 Apicurio Registry 用户角色 环境变量 Java 系统属性 类型 默认值 ROLES_ENABLED
registry.auth.roles.enabled
布尔值
false
启用 Apicurio Registry 用户角色时,您必须将 Apicurio Registry 用户分配给 Red Hat Single Sign-On 域中的以下默认用户角色之一:
表 5.4. registry 身份验证和授权的默认用户角色 角色 读取工件 编写工件 全局规则 概述 sr-admin
是
是
是
对所有创建、读取、更新和删除操作的完整访问权限。
sr-developer
是
是
否
除配置全局规则外,创建、读取、更新和删除操作的访问权限。此角色可以配置工件规则。
sr-readonly
是
否
否
仅读和搜索操作的访问权限。此角色无法配置任何规则。
将以下内容设置为
true
,为 Apicurio Registry 中的 schema 和 API 工件启用仅限所有者的授权:表 5.5. 配置仅限所有者的授权 环境变量 Java 系统属性 类型 默认值 REGISTRY_AUTH_OWNER_ONLY_AUTHORIZATION
registry.auth.owner-only-authorization
布尔值
false
其他资源
- 有关开源示例应用程序和 Keycloak 域,请参阅 Docker Compose-based example using Keycloak with Apicurio Registry
- 有关如何在生产环境中使用 Red Hat Single Sign-On 的详情,请参考 Red Hat Single Sign-On 文档
- 有关自定义安全配置的详情,请参阅 Quarkus Open ID Connect 文档
5.3. 从 OpenShift 集群内部配置 HTTPS 连接 Apicurio Registry
以下步骤演示了如何配置 Apicurio Registry 部署,以便从 OpenShift 集群内部为 HTTPS 连接公开端口。
这类连接不能在集群外部直接提供。路由基于主机名,在 HTTPS 连接时进行编码。因此,仍然需要使用边缘终止或其他配置。请参阅 第 5.4 节 “从 OpenShift 集群外部配置 HTTPS 连接到 Apicurio Registry”。
前提条件
- 您必须已安装了 Apicurio Registry Operator。
流程
生成带有自签名证书的
密钥存储
。如果您使用自己的证书,您可以跳过这一步。keytool -genkey -trustcacerts -keyalg RSA -keystore registry-keystore.jks -storepass password
创建新机密,以存放密钥存储和密钥存储的密码。
- 在 OpenShift Web 控制台的左侧导航菜单中,点 Workloads > Secrets > Create Key/Value Secret。
使用以下值:
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 资源以手动添加编码的文件。
编辑 Apicurio Registry 实例的 Deployment 资源。您可以在 Apicurio Registry Operator 的 status 字段中找到正确的名称。
将密钥存储 secret 添加为卷:
template: spec: volumes: - name: registry-keystore-secret-volume secret: secretName: registry-keystore
添加卷挂载:
volumeMounts: - name: registry-keystore-secret-volume mountPath: /etc/registry-keystore readOnly: true
添加
JAVA_OPTIONS
和KEYSTORE_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)
注意在使用字符串插入时顺序非常重要。
启用 HTTPS 端口:
ports: - containerPort: 8080 protocol: TCP - containerPort: 8443 protocol: TCP
编辑 Apicurio Registry 实例的 Service 资源。您可以在 Apicurio Registry Operator 的 status 字段中找到正确的名称。
ports: - name: http protocol: TCP port: 8080 targetPort: 8080 - name: https protocol: TCP port: 8443 targetPort: 8443
验证连接是否正常工作:
使用 SSH 连接到集群中的 pod (您可以使用 Apicurio Registry pod):
oc rsh -n default example-apicurioregistry-deployment-vx28s-4-lmtqb
从 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 边缘终止路由。
前提条件
- 您必须已安装了 Apicurio Registry Operator。
- 阅读 OpenShift 文档,以创建安全路由。
流程
除了 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 存储。
流程
- 在 OpenShift Container Platform web 控制台中,使用具有集群管理员特权的帐户登录。
- 点 Installed Operators > Red Hat Integration - Apicurio Registry。
- 在 ApicurioRegistry 选项卡中,点部署的 Operator 自定义资源,如 example-apicurioregistry。
-
在主概览页面中,找到 Apicurio Registry 部署的 Deployment Name 部分以及对应的
DeploymentConfig
名称,如 example-apicurioregistry。 -
在左侧导航菜单中,点 Workloads > Deployment Configs,然后选择您的
DeploymentConfig
名称。 点 Environment 选项卡,在 Single values env 部分中输入您的环境变量,例如:
-
名称 :
LIVENESS_STATUS_RESET
-
值 :
350
-
名称 :
点底部的 Save。
另外,您可以使用 OpenShift
oc
命令执行这些步骤。如需了解更多详细信息,请参阅 OpenShift CLI 文档。
6.2. Apicurio Registry 健康检查的环境变量
本节论述了 OpenShift 中 Apicurio Registry 健康检查的可用环境变量。这包括存活度和就绪度探测,以监控 OpenShift 中 Apicurio Registry 服务器的健康状态。有关示例步骤,请参阅 第 6.1 节 “在 OpenShift 上配置 Apicurio Registry 健康检查”。
以下环境变量仅供参考。默认值是为大多数情况而设计的,只有在您的环境需要时才应更改。对默认值的任何更改都取决于您的硬件、网络和数据存储量。这些值应该尽可能低,以避免不必要的开销。
存活度环境变量
Name | 描述 | 类型 | 默认 |
---|---|---|---|
| 存活度探测失败前可以发生的存活度问题或错误数量。 | 整数 |
|
| 必须发生阈值错误数的周期。例如:如果这个值是 60,则阈值是 1,检查在 1 分钟内出现两个错误后失败 | 秒 |
|
| 在没有更多错误的情况下,必须经过延迟的秒数将重置为 OK 状态。 | 秒 |
|
| 以逗号分隔的忽略存活度例外列表。 | 字符串 |
|
由于 OpenShift 会自动重启一个失败存活度检查的 Pod,因此存活度设置与就绪度设置不同,因此不会直接影响 OpenShift 上的 Apicurio Registry 的行为。
就绪度环境变量
Name | 描述 | 类型 | 默认 |
---|---|---|---|
| 就绪度探测失败前可以发生的就绪问题或错误数。 | 整数 |
|
| 必须发生阈值错误数的周期。例如:如果这个值是 60,则阈值是 1,检查在 1 分钟内发生两个错误后失败。 | 秒 |
|
| 在没有更多错误的情况下,必须经过延迟的秒数将重置为 OK 状态。在本例中,这意味着 Pod 保持未就绪的时间,直到它返回到正常操作。 | 秒 |
|
| 就绪度跟踪两个操作的超时时间:
如果这些操作用时比配置的超时时间更长,这将计为就绪问题或错误。这个值控制这两个操作的超时。 | 秒 |
|
6.3. 管理 Apicurio Registry 环境变量
Apicurio Registry Operator 管理最常见的 Apicurio Registry 配置,但有一些选项可以手动调整。您可以通过在 Apicurio Registry Deployment
资源中设置环境变量来更新它们。如果 ApicurioRegistry
CR 中没有特定的配置选项,您可以使用环境变量来调整它。
流程
- OpenShift web 控制台
- 选择 Installed Operators 选项卡,然后选择 Red Hat Integration - Apicurio Registry Operator。
-
在 Apicurio Registry 选项卡中,点
Apicurio Registry
部署的 ApicurioRegistry CR。 -
在主概览页面中,查看
managedResources
部分,其中包含由 Operator 管理的Deployment
的名称,以部署您的 Apicurio Registry 实例。 -
在左侧菜单中的 Workloads > Deployments 中查找
Deployment
。 -
选择具有正确名称的
Deployment
,然后选择 Environment 选项卡。 - 您可以将环境变量添加到 Single values (env) 部分。
- 点底部的 Save。
- OpenShift CLI
- 选择安装 Apicurio Registry 的项目。
-
运行
oc get apicurioregistry
以获取ApicurioRegistry
CR 列表 -
在代表您要配置的 Apicurio Registry 实例的 CR 上运行
oc describe
。 -
查看
status
部分中的managedResource
。 -
找到
Deployment
并输入oc edit
。 -
在
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。
流程
使用此
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"}
使用此
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"}
使用此
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
中运行的自定义应用程序。
流程
使用 HTTP 协议时,将 Apicurio Registry 配置设置为将事件发送到应用程序,如下所示:
-
registry.events.sink.my-custom-consumer=http://my-app-host:8888/events
-
如果需要,您可以按照如下所示配置多个事件消费者:
-
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 主题。
流程
使用 Kafka 协议时,按如下所示设置 Kafka 主题:
-
registry.events.kafka.topic=my-registry-events
-
您可以使用
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
如果需要,您还可以将 Kafka 主题分区设置为用于生成事件:
-
registry.events.kafka.topic-partition=1
-
其他资源
- 如需了解更多详细信息,请参阅 CNCF CloudEvents 规格
第 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
spec
是 ApicurioRegistry
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>
下表描述了每个配置选项:
配置选项 | type | 默认值 | 描述 |
---|---|---|---|
| - | - | 用于配置 Apicurio Registry 应用程序的部分 |
| 字符串 | required |
存储后端.一个 |
| - | - | SQL 存储后端配置 |
| - | - | SQL 存储后端的数据库连接配置 |
| 字符串 | required | 数据库连接 URL 字符串 |
| 字符串 | required | 数据库连接用户 |
| 字符串 | empty | 数据库连接密码 |
| - | - | Kafka 存储后端配置 |
| 字符串 | required | Kafka bootstrap 服务器 URL,用于 Streams 存储后端 |
| - | - | 为 Kafka 存储后端配置 TLS 身份验证的部分 |
| 字符串 | required | Kafka 的 TLS 信任存储的 secret 名称 |
| 字符串 | required | 包含用户 TLS 密钥存储的 secret 名称 |
| 字符串 | required | Kafka 的 TLS 信任存储的 secret 名称 |
| 字符串 | required | SCRAM 用户名 |
| 字符串 | required | 包含 SCRAM 用户密码的 secret 名称 |
| 字符串 |
| SASL 机制 |
| - | - | Apicurio Registry Web 控制台设置 |
| 字符串 |
| 将 Apicurio Registry Web 控制台设置为只读模式 |
| 字符串 |
|
Apicurio Registry 日志级别.一个 |
| - | - | Apicurio Registry Web 控制台和 REST API 安全设置 |
| - | - | 使用 Keycloak 的 Web 控制台和 REST API 安全配置 |
| 字符串 | required |
Keycloak URL,必须以 |
| 字符串 | required | Keycloak 域 |
| 字符串 |
| REST API 的 Keycloak 客户端 |
| 字符串 |
| web 控制台的 Keycloak 客户端 |
| - | - | Apicurio Registry 部署设置的部分 |
| 正整数 |
| 要部署的 Apicurio Registry pod 的数量 |
| 字符串 | auto-generated | 提供 Apicurio Registry 控制台和 API 的主机/URL。如果可能,Apicurio Registry Operator 会尝试根据集群路由器的设置来确定正确的值。该值只会自动生成一次,因此用户可以在之后覆盖它。 |
| k8s.io/api/core/v1 Affinity struct | empty | Apicurio Registry 部署关联性配置 |
| 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>
Status 字段 | 类型 | 描述 |
---|---|---|
| - | 包含关于部署的 Apicurio Registry 的信息。 |
| 字符串 | 可以访问 Apicurio Registry UI 和 REST API 的 URL。 |
| - | 报告相应部署的 Apicurio Registry 或 Operator 的状态的条件列表。 |
| 字符串 | 条件的类型。 |
| 字符串 |
条件的状态,一个 |
| 字符串 | 程序识别符表示条件最后一次转换的原因。 |
| 字符串 | 人类可读的消息,表示关于该转换的详细信息。 |
| 字符串 | 条件从一个状态转换到另一个状态的时间。 |
| - | 由 Apicurio Registry Operator 管理的 OpenShift 资源列表 |
| 字符串 | 资源类型。 |
| 字符串 | 资源对象。 |
| 字符串 | 资源名称。 |
7.4. Apicurio Registry 受管资源
在部署 Apicurio Registry 时由 Apicurio Registry 管理的资源如下:
-
Deployment
-
Service
-
入口
(和路由
) -
PodDisruptionBudget
7.5. Apicurio Registry Operator 标签
由 Apicurio Registry Operator 管理的资源通常被标记为如下:
标签 | 描述 |
---|---|
|
资源所属的 Apicurio Registry 部署的名称,具体取决于指定的 |
|
deployment: |
|
部署名称:与 |
| Apicurio Registry 或 Apicurio Registry Operator 的版本 |
| 应用程序部署一组推荐的 Kubernetes 标签。 |
| 红帽产品的计量标签。 |
附录 A. 使用您的订阅
Apicurio Registry 通过软件订阅提供。要管理您的订阅,请访问红帽客户门户中的帐户。
访问您的帐户
- 转至 access.redhat.com。
- 如果您还没有帐户,请创建一个帐户。
- 登录到您的帐户。
激活订阅
- 转至 access.redhat.com。
- 导航到 My Subscriptions。
- 导航到 激活订阅 并输入您的 16 位激活号。
下载 ZIP 和 TAR 文件
要访问 ZIP 或 TAR 文件,请使用客户门户网站查找下载的相关文件。如果您使用 RPM 软件包,则不需要这一步。
- 打开浏览器并登录红帽客户门户网站 产品下载页面,网址为 access.redhat.com/downloads。
- 找到 Integration and Automation 类别中的 Red Hat Integration 条目。
- 选择所需的 Apicurio Registry 产品。此时会打开 Software Downloads 页面。
- 单击组件的 Download 链接。
为系统注册软件包
要在 Red Hat Enterprise Linux 上安装 RPM 软件包,必须注册您的系统。如果您使用 ZIP 或 TAR 文件,则不需要这一步。
- 转至 access.redhat.com。
- 进入 Registration Assistant。
- 选择您的操作系统版本,再继续到下一页。
- 使用您的系统终端中列出的命令完成注册。
如需了解更多相关信息,请参阅 如何注册到红帽客户门户网站(Red Hat Customer Portal )