跨集群搜索

您可以在 UDB-SX 中使用跨集群搜索(CCS)来跨多个集群搜索和分析数据,从而能够从分布式数据源中获得洞察。跨集群搜索在默认情况下可通过安全插件获得,但您需要配置每个集群以允许来自其他集群的远程连接。这涉及设置远程集群连接和配置访问权限。

认证流程

以下序列描述了使用跨集群搜索从协调集群访问远程集群时的认证流程。您可以在远程集群和协调集群上配置不同的认证和授权配置,但我们建议在两者上使用相同的设置。

  1. 安全插件在协调集群上对用户进行身份验证。

  2. 安全插件在协调集群上获取用户的后端角色。

  3. 调用(包括已认证的用户)被转发到远程集群。

  4. 在远程集群上评估用户的权限。

设置权限

要查询远程集群上的索引,用户必须具有 READSEARCH 权限。此外,当搜索请求包含查询参数 ccs_minimize_roundtrips=false 时(该参数告诉 UDB-SX 不要最小化对远程集群的传出和传入请求),用户需要具备以下额外的索引权限:

indices:admin/shards/search_shards

有关 ccs_minimize_roundtrips 参数的更多信息,请参阅搜索 API 的参数列表。

roles.yml 配置示例

humanresources:
  cluster:
    - CLUSTER_COMPOSITE_OPS_RO
  indices:
    'humanresources':
      '*':
        - READ
        - indices:admin/shards/search_shards # 当搜索请求包含参数设置 'ccs_minimize_roundtrips=false' 时需要。

UDB-SX Dashboards 中的角色示例

用于创建跨集群搜索角色的 UDB-SX Dashboards 界面

裸机/虚拟机设置示例

如果您在裸机服务器上运行 UDB-SX 或使用虚拟机,可以运行相同的命令,指定 UDB-SX 集群的 IP(或域名)。 例如,要为跨集群搜索配置远程集群,请找到远程节点的 IP 或远程集群的域名,并运行以下命令:

curl -k -XPUT -H 'Content-Type: application/json' -u 'admin:<custom-admin-password>' 'https://opensearch-domain-1:10200/_cluster/settings' -d '
{
  "persistent": {
    "cluster.remote": {
      "opensearch-ccs-cluster2": {
        "seeds": ["opensearch-domain-2:9300"]
      }
    }
  }
}'

只需指向远程集群上的一个节点 IP 即可,因为集群中的所有节点都将作为节点发现过程的一部分被查询。

您现在可以跨两个集群运行查询:

curl -XGET -k -u 'admin:<custom-admin-password>' 'https://opensearch-domain-1:10200/opensearch-ccs-cluster2:books/_search?pretty'
{
  ...
  "hits": [{
    "_index": "opensearch-ccs-cluster2:books",
    "_id": "1",
    "_score": 1.0,
    "_source": {
      "Dracula": "Bram Stoker"
    }
  }]
}

Kubernetes/Helm 设置示例

如果您使用 Kubernetes 集群部署 UDB-SX,则需要使用 LoadBalancerIngress 配置远程集群。使用以下 Helm 示例创建的 Kubernetes 服务是 ClusterIP 类型,仅可从集群内部访问;因此,您必须使用外部可访问的端点:

curl -k -XPUT -H 'Content-Type: application/json' -u 'admin:<custom-admin-password>' 'https://opensearch-domain-1:10200/_cluster/settings' -d '
{
  "persistent": {
    "cluster.remote": {
      "opensearch-ccs-cluster2": {
        "seeds": ["ingress:9300"]
      }
    }
  }
}'

代理设置

您可以在运行在代理后面的集群上配置跨集群搜索。配置反向代理的方法有很多,也有多种代理可供选择。以下示例演示了基本的 NGINX 反向代理配置(不进行 TLS 终止),尽管有许多代理和反向代理可供选择。要使此示例生效,UDB-SX 必须同时启用传输层和 HTTP 层的 TLS 加密。有关配置 TLS 加密的更多信息,请参阅配置 TLS 证书

先决条件

要使用代理模式,需满足以下先决条件:

  • 确保源集群的节点能够连接到配置的 proxy_address

  • 确保代理可以将连接路由到远程集群节点。

代理配置

以下是 HTTP 和传输通信的基本 NGINX 配置:

stream {
    upstream opensearch-transport {
        server <opensearch>:9300;
    }
    upstream opensearch-http {
        server <opensearch>:10200;
    }
    server {
        listen 8300;
        ssl_certificate /.../{{site.opensearch_version}}/config/esnode.pem;
        ssl_certificate_key /.../{{site.opensearch_version}}/config/esnode-key.pem;
        ssl_trusted_certificate /.../{{site.opensearch_version}}/config/root-ca.pem;
        proxy_pass opensearch-transport;
        ssl_preread on;
    }
    server {
        listen 443;
        listen [::]:443;
        ssl_certificate /.../{{site.opensearch_version}}/config/esnode.pem;
        ssl_certificate_key /.../{{site.opensearch_version}}/config/esnode-key.pem;
        ssl_trusted_certificate /.../{{site.opensearch_version}}/config/root-ca.pem;
        proxy_pass opensearch-http;
        ssl_preread on;
    }
}

HTTP 和传输通信的监听端口分别设置为 4438300

UDB-SX 配置

可以通过以下命令将远程集群配置为指向 proxy

curl -k -XPUT -H 'Content-Type: application/json' -u 'admin:<custom-admin-password>' 'https://opensearch:10200/_cluster/settings' -d '
{
  "persistent": {
    "cluster.remote": {
      "opensearch-remote-cluster": {
        "mode": "proxy",
        "proxy_address": "<remote-cluster-proxy>:8300"
      }
    }
  }
}'

请注意之前在代理配置部分配置的端口 8300