1.5. 集成现有组件
多集群全局 hub 需要中间件组件、Kafka 和 PostgreSQL 以及 Grafana 作为 Observability 平台,以提供策略合规视图。multicluster global hub 提供 Kafka、PostgreSQL 和 Grafana 的版本。您还可以集成您自己的现有 Kafka、PostgreSQL 和 Grafana。
1.5.1. 集成现有 Kafka 版本
如果您有自己的 Kafka 实例,您可以使用它作为多集群全局 hub 的传输。Kafka 3.3 是经过测试的版本。完成以下步骤以集成 Kafka 实例:
- 如果您没有 Kafka 实例的持久性卷,则需要创建一个。
在
multicluster-global-hub
命名空间中创建一个名为multicluster-global-hub-transport
的 secret。在以下必填字段中提取信息:
-
bootstrap.servers
:指定 Kafka bootstrap 服务器。 -
ca.crt
: 如果您使用KafkaUser
自定义资源配置身份验证凭据,则需要此项。有关从 secret 提取ca.crt
证书所需的步骤,请参阅 STRIMZI 文档中的 用户身份验证 主题。 -
client.crt
: 必需,请参阅 STRIMZI 文档中的 用户身份验证 主题,以获取从 secret 提取user.crt
证书的步骤。 -
client.key
: 必需,请参阅 STRIMZI 文档中的 用户身份验证 主题,以获取从 secret 中提取user.key
的步骤。
-
运行以下命令来创建 secret,根据需要将值替换为您提取的值:
oc create secret generic multicluster-global-hub-transport -n multicluster-global-hub \ --from-literal=bootstrap_server=<kafka-bootstrap-server-address> \ --from-file=ca.crt=<CA-cert-for-kafka-server> \ --from-file=client.crt=<Client-cert-for-kafka-server> \ --from-file=client.key=<Client-key-for-kafka-server>
-
如果在 Kafka 实例中配置了自动主题创建,请跳过这一步。如果没有配置,请手动创建
spec
、status
和事件
主题。 - 确保访问 Kafka 的全局 hub 用户有权从主题读取数据,并将数据写入主题。
1.5.2. 集成现有 PostgreSQL 版本
如果您有自己的 PostgreSQL 关系数据库,您可以使用它作为多集群全局 hub 的存储。PostgreSQL 13 是经过测试的版本。
要求的最小存储大小为 20GB。这个数量可以存储 3 个受管集群,每个受管 hub 有 250 个受管集群和 50 个策略(18 个月)。您需要在 multicluster-global-hub
命名空间中创建一个名为 multicluster-global-hub-storage
的 secret。secret 必须包含以下字段:
-
database_uri
:它用于创建数据库并插入数据。您的值必须类似以下格式:postgres://<user>:<password>@<host>:<port>/<database>?sslmode=<mode>
。 -
database_uri_with_readonlyuser
:它用于查询由多集群全局 hub 使用的 Grafana 实例的数据。这是一个可选值。您的值必须类似以下格式:postgres://<user>:<password>@<host>:<port>/<database>?sslmode=<mode>
。 ca.crt
是基于sslmode
的可选值。- 验证集群所需的最小存储大小为 20GB。这个数量可以存储三个受管集群,每个受管 hub 有 250 个受管集群和 50 个策略(18 个月)。
- 运行以下命令来创建 secret:
oc create secret generic multicluster-global-hub-storage -n multicluster-global-hub \ --from-literal=database_uri=<postgresql-uri> \ --from-literal=database_uri_with_readonlyuser=<postgresql-uri-with-readonlyuser> \ --from-file=ca.crt=<CA-for-postgres-server>
主机必须可从多集群全局 hub 集群访问。如果您的 PostgreSQL 数据库位于 Kubernetes 集群中,您可以考虑使用带有 nodePort
或 LoadBalancer
的服务类型来公开数据库。如需更多信息,请参阅 访问置备的 postgres 数据库以进行故障排除。
1.5.3. 集成现有 Grafana 版本
如果您依赖您自己的 Grafana 从多个源(如 Prometheus)从不同的集群获取指标,并使用现有 Grafana 实例使用多集群全局 hub。要将多集群全局 hub 数据纳入您自己的 Grafana 中,您需要配置数据源并导入仪表板。
运行以下命令,从 multicluster global hub Grafana
数据源
secret 收集 PostgreSQL 连接信息:oc get secret multicluster-global-hub-grafana-datasources -n multicluster-global-hub -ojsonpath='{.data.datasources\.yaml}' | base64 -d
输出类似以下示例:
apiVersion: 1 datasources: - access: proxy isDefault: true name: Global-Hub-DataSource type: postgres url: postgres-primary.multicluster-global-hub.svc:5432 database: hoh user: guest jsonData: sslmode: verify-ca tlsAuth: true tlsAuthWithCACert: true tlsConfigurationMethod: file-content tlsSkipVerify: true queryTimeout: 300s timeInterval: 30s secureJsonData: password: xxxxx tlsCACert: xxxxx
通过添加源(如 PostgreSQL),并使用之前提取的信息完成所需字段,在您自己的 Grafana 实例中配置数据源。
请参见以下必填字段:
- Name
- Host
- 数据库
- 用户
- 密码
- TLS/SSL 模式
- TLS/SSL 方法
- CA 证书
如果您的 Grafana 不在多集群全局 hub 集群中,您需要使用
LoadBalancer
公开 PostgreSQL,以便 PostgreSQL 可以从外部访问。您可以将以下值添加到PostgresCluster
操作对象中:service: type: LoadBalancer
添加该内容后,您可以从
postgres-ha
服务中获取EXTERNAL-IP
。请参见以下示例:oc get svc postgres-ha -n multicluster-global-hub NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE postgres-ha LoadBalancer 172.30.227.58 xxxx.us-east-1.elb.amazonaws.com 5432:31442/TCP 128m
运行该命令后,您可以使用
xxxx.us-east-1.elb.amazonaws.com:5432
作为 PostgreSQL 连接主机。导入现有的仪表板。
- 按照官方 Grafana 文档中的 导出和导入 仪表板中的步骤,从现有的 Grafana 实例导出仪表板。
- 按照官方 Grafana 文档中的 Export and import 仪表板中的步骤,将仪表板导入到 multicluster global hub Grafana 实例中。
1.5.4. 其他资源
如需有关如何从 secret 中提取 ca.crt
证书的更多信息,请参阅 STRIMZI 文档中的 用户身份验证。
有关从 secret 中提取 user.crt
证书的步骤,请参阅 STRIMZI 文档中的 用户身份验证。