更新时间:2024-11-20 GMT+08:00

配置Elasticsearch集群独享型负载均衡

云搜索服务集成了共享型负载均衡器的能力,支持绑定公网访问和开启终端节点服务。相比共享型负载均衡器,独享型负载均衡器功能更丰富、性能更强,本章主要介绍如何配置集群的独享型负载均衡。

场景描述

使用独享型负载均衡器接入集群具有如下优点:
  • 非安全模式集群也支持集成弹性负载均衡服务的能力。
  • 支持用户使用自定义证书进行HTTPS双向认证。
  • 支持7层流量监控及告警配置,方便用户随时查看监控情况。

不同安全模式的集群对接独享型负载均衡器共有8种不同的服务形态,不同服务形态对应的ELB能力如表1所示,8种组合的配置概览如表2所示。

表1 不同集群对应的ELB能力

集群安全模式

ELB最终对外提供的服务形态

ELB负载均衡

ELB流量监控

ELB双向认证

非安全

无认证

支持

支持

不支持

单向认证

双向认证

支持

支持

支持

安全+HTTP

密码认证

支持

支持

不支持

单向认证+密码认证

双向认证+密码认证

支持

支持

支持

安全+HTTPS

单向认证+密码认证

双向认证+密码认证

支持

支持

支持

表2 不同集群对接ELB的配置概览

集群安全模式

ELB最终对外提供的服务形态

ELB监听器

后端服务器组

前端协议

前端端口

SSL解析方式

后端协议

健康检查端口

健康检查路径

非安全

无认证

HTTP

9200

无认证

HTTP

9200

/

单向认证

HTTPS

9200

单向认证

HTTP

9200

双向认证

HTTPS

9200

双向认证

HTTP

9200

安全+HTTP

密码认证

HTTP

9200

无认证

HTTP

9200

/_opendistro/_security/health

单向认证+密码认证

HTTPS

9200

单向认证

HTTP

9200

双向认证+密码认证

HTTPS

9200

双向认证

HTTP

9200

安全+HTTPS

单向认证+密码认证

HTTPS

9200

单向认证

HTTPS

9200

双向认证+密码认证

HTTPS

9200

双向认证

HTTPS

9200

CSS集群对接独享型负载均衡的操作步骤如下:

  1. 如果规划ELB监听器的前端协议是HTTPS,则需要准备签名证书并上传至ELB管理控制台:准备并上传自签名证书
  2. 在ELB管理控制台创建独享型负载均衡器:创建独享型负载均衡器
  3. Elasticsearch或OpenSearch集群开启负载均衡:集群对接负载均衡器
  4. 通过独享型负载均衡实例接入集群:通过Curl命令接入集群

本文还提供了通过独享型负载均衡实例接入集群的Java客户端代码示例:通过负载均衡器的HTTPS双向认证方式接入集群的代码示例(Java)

约束限制

  • 如果ELB绑定了公网,则不推荐接入非安全模式的集群。非安全模式的集群使用HTTP通信且不需要安全认证即可访问,如果对接公网访问存在安全风险。
  • 开启了HTTPS访问的安全模式的集群不支持HTTP类型的前端协议认证,如果需要使用HTTP类型的前端协议,需要将集群的“安全模式”变更为“非安全模式”,具体操作请参见更改Elasticsearch集群安全模式。在变更安全模式前,请先关闭“负载均衡”,安全模式变更完成后再开启“负载均衡”

准备并上传自签名证书

当规划的ELB监听器的前端协议为HTTPS时,需要参考本节准备自签名证书,作为服务器证书或CA证书上传至ELB。

建议使用云证书管理服务CCM购买的证书,或者其他权威机构颁发的证书。

  1. 登录到任意一台安装有OpenSSL工具和JDK的Linux客户端。
  2. 执行如下命令制作自签名证书。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    mkdir ca
    mkdir server
    mkdir client
    
    #使用OpenSSL制作CA证书
    cd ca
    #创建CA证书的openssl配置文件ca_cert.conf
    cat >ca_cert.conf <<EOF
    [ req ]
    distinguished_name     = req_distinguished_name
    prompt                 = no
    
    [ req_distinguished_name ]
     O                      = ELB
    EOF
    #创建CA证书私钥文件ca.key
    openssl genrsa -out ca.key 2048
    #创建CA证书的csr请求文件ca.csr
    openssl req -out ca.csr -key ca.key -new -config ./ca_cert.conf
    #创建自签名的CA证书ca.crt
    openssl x509 -req -in ca.csr -out ca.crt -sha1 -days 5000 -signkey ca.key
    #把ca证书格式转为p12格式
    openssl pkcs12 -export -clcerts -in ca.crt -inkey ca.key -out ca.p12
    #把ca证书格式转为jks格式
    keytool -importkeystore -srckeystore ca.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore ca.jks
    
    
    #使用CA证书签发服务器证书
    cd ../server
    #创建服务器证书的openssl配置文件server_cert.conf,CN字段根据需求改为服务器对应的域名、IP地址
    cat >server_cert.conf <<EOF
    [ req ]
    distinguished_name     = req_distinguished_name
    prompt                 = no
    
    [ req_distinguished_name ]
     O                      = ELB
     CN                     = 127.0.0.1
    EOF
    #创建服务器证书私钥文件server.key
    openssl genrsa -out server.key 2048
    #创建服务器证书的csr请求文件server.csr
    openssl req -out server.csr -key server.key -new -config ./server_cert.conf
    #使用CA证书签发服务器证书server.crt
    openssl x509 -req -in server.csr -out server.crt -sha1 -CAcreateserial -days 5000 -CA ../ca/ca.crt -CAkey ../ca/ca.key
    #把服务端证书格式转为p12格式
    openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12
    #把服务证书格式转为jks格式
    keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore server.jks
    
    
    #使用CA证书签发客户端证书
    cd ../client
    #创建客户端证书的openssl配置文件client_cert.conf,CN字段根据需求改为服务器对应的域名、IP地址
    cat >client_cert.conf <<EOF
    [ req ]
    distinguished_name     = req_distinguished_name
    prompt                 = no
    
    [ req_distinguished_name ]
    O                      = ELB
    CN                     = 127.0.0.1
    EOF
    #创建客户端证书私钥文件client.key
    openssl genrsa -out client.key 2048
    #创建客户端证书的csr请求文件client.csr
    openssl req -out client.csr -key client.key -new -config ./client_cert.conf
    #使用CA证书签发客户端证书client.crt
    openssl x509 -req -in client.csr -out client.crt -sha1 -CAcreateserial -days 5000 -CA ../ca/ca.crt -CAkey ../ca/ca.key
    #把客户端证书格式转为浏览器可识别的p12格式
    openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
    #把客户端证书格式转为jks格式
    keytool -importkeystore -srckeystore client.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore client.jks
    
  3. 上传自签名证书,具体操作请参见创建证书

创建独享型负载均衡器

  1. 登录弹性负载均衡管理控制台。
  2. 参考创建独享型负载均衡器,创建独享型负载均衡器。CSS集群对接独享型负载均衡器所需要关注的参数如表3所示,其他参数请根据实际需要填写。
    表3 独享型负载均衡器的配置说明

    参数

    配置说明

    取值样例

    实例类型

    选择“独享型”

    独享型

    计费模式

    性能独享型负载均衡器的收费类型。

    按需计费

    区域

    选择CSS集群所在的区域。

    -

    跨VPC后端

    开启跨VPC后端才能连接CSS集群。

    开启

    网络类型

    负载均衡器对外提供服务所使用的网络类型。

    CSS服务支持“IPv4私网”“IPv6网络”

    • 当选择“IPv6网络”时,CSS服务对接负载均衡器后,集群对接的负载均衡实例会显示“私有IP”“IPv6地址”。只有当独享型负载均衡器绑定了“共享带宽”,才会显示“公网IP”
    • 当选择“IPv4私网”时,CSS服务对接负载均衡器后,集群对接的负载均衡实例会显示“私有IP”“公网IP”
    说明:

    CSS服务仅“华东二”区域支持“IPv6网络”,其他区域只支持“IPv4私网”

    IPv4私网

    所属VPC

    所属虚拟私有云。无论选择哪种网络类型,均需配置此项。

    需要选择和CSS集群同一VPC。

    -

    子网

    选择创建负载均衡实例的子网。无论选择哪种网络类型,均需配置此项。

    需要选择和CSS集群同一子网。

    -

    规格

    建议选择功能和性能更优的应用型规格。

    应用型(HTTP/HTTPS)

    “小型 I”

集群对接负载均衡器

  1. 登录云搜索服务管理控制台。
  2. “集群管理”页面选择需要对接负载均衡器的集群,单击集群名称进入集群“基本信息”页面。
  3. 在左侧菜单栏,选择“负载均衡”,打开负载均衡开关,在弹窗中配置负载均衡基础信息。
    表4 配置负载均衡

    参数

    说明

    负载均衡器

    选择前面创建的独享型负载均衡器。CSS集群属于托管资源,所选的负载均衡器必须开启“跨VPC后端”能力才能正常使用。

    委托

    选择IAM委托,当前账号授权CSS服务访问和使用ELB资源。

    • 当首次配置委托时,可以单击“自动创建委托”新建委托“css-elb-agency”直接使用。
    • 当已有自动创建的委托时,可以单击“委托一键授权”,删除委托中“ELB Administrator”系统角色或“ELB FullAccess”系统策略的权限,新增如下自定义策略授权委托到最小化权限。
      "elb:loadbalancers:list",
      "elb:loadbalancers:get",
      "elb:certificates:list",
      "elb:healthmonitors:*",
      "elb:members:*",
      "elb:pools:*",
      "elb:listeners:*"
    • “自动创建委托”“委托一键授权”需要如下最小权限。
      "iam:agencies:listAgencies",
      "iam:roles:listRoles",
      "iam:agencies:getAgency",
      "iam:agencies:createAgency",
      "iam:permissions:listRolesForAgency",
      "iam:permissions:grantRoleToAgency",
      "iam:permissions:listRolesForAgencyOnProject",
      "iam:permissions:revokeRoleFromAgency",
      "iam:roles:createRole"
    • 使用委托需要如下最小权限。
      "iam:agencies:listAgencies",
      "iam:agencies:getAgency",
      "iam:permissions:listRolesForAgencyOnProject",
      "iam:permissions:listRolesForAgency"
    图1 开启负载均衡
  4. 单击“确定”,开启负载均衡。
  5. “监听器配置”区域,您可以单击右侧配置监听器的相关信息。
    表5 配置监听器

    参数

    配置说明

    前端协议

    客户端与负载均衡监听器建立流量分发连接的协议。支持选择“HTTP”“HTTPS”

    根据实际业务需要选择协议。

    前端端口

    客户端与负载均衡监听器建立流量分发连接的端口。

    根据实际业务需要自定义。

    SSL解析方式

    客户端到服务器端认证方式。仅“前端协议”选择“HTTPS”才需要配置。

    根据实际业务需要选择解析方式。

    服务器证书

    服务器证书用于SSL握手协商,需提供证书内容和私钥。仅“前端协议”选择“HTTPS”才需要配置服务器证书。

    选择准备并上传自签名证书创建的服务器证书。

    CA证书

    CA证书又称客户端CA公钥证书,用于验证客户端证书的签发者。仅“SSL解析方式”选择“双向认证”时,才需要配置CA证书。

    选择准备并上传自签名证书创建的CA证书。

    在开启HTTPS双向认证功能时,只有当客户端能够出具指定CA签发的证书时,HTTPS连接才能成功。

    图2 配置监听器
  6. (可选)在监听器配置区域,单击“访问控制”后的“设置”跳转到负载均衡器的监听器列表,单击监听器访问控制列的“设置”,配置允许通过负载均衡实例访问集群的IP地址组,不设置的话默认允许所有的IP地址访问。
  7. 在健康检查区域,您可以查看各个节点IP的健康检查结果。
    表6 健康检查结果状态说明

    健康检查结果

    说明

    正常

    节点IP连接正常。

    异常

    节点IP连接,不可用

通过Curl命令接入集群

  1. 在云搜索服务管理控制台,单击左侧导航栏的“集群管理”
  2. 在集群管理列表页面,单击需要访问的集群名称,进入集群基本信息页面。
  3. 在左侧菜单栏选择“负载均衡”,获取并记录负载均衡实例的“私有IP”“IPv6地址”“公网IP”,以及监听器配置的“前端协议/端口”

    如果ELB绑定了公网,则不推荐接入非安全模式的集群。非安全模式的集群使用HTTP通信且不需要安全认证即可访问,如果对接公网访问存在安全风险。

  4. 在ECS服务器中执行如下Curl命令测试能否通过独享型负载均衡实例接入集群。
    表7 不同集群的接入命令

    集群安全模式

    ELB最终对外提供的服务形态

    接入集群的Curl命令

    非安全

    无认证

    curl  http://IP:port

    单向认证

    curl -k --cert ./client.crt --key ./client.key https://IP:port

    双向认证

    curl --cacert ./ca.crt --cert ./client.crt --key ./client.key https://IP:port

    安全+HTTP

    密码认证

    curl  http://IP:port -u user:pwd

    单向认证+密码认证

    curl -k --cert ./client.crt --key ./client.key https://IP:port -u user:pwd

    双向认证+密码认证

    curl --cacert ./ca.crt --cert ./client.crt --key ./client.key https://IP:port -u user:pwd

    安全+HTTPS

    单向认证+密码认证

    curl -k --cert ./client.crt --key ./client.key https://IP:port -u user:pwd

    双向认证+密码认证

    curl --cacert ./ca.crt --cert ./client.crt --key ./client.key https://IP:port -u user:pwd
    表8 变量说明

    变量名

    说明

    IP

    负载均衡实例的IP地址。

    port

    监听器配置的“前端协议/端口”

    user

    集群的用户名,仅安全集群需要配置。

    pwd

    用户名对应的密码,仅安全集群需要配置。

    当可以正常返回集群信息时,表示连接成功。

通过负载均衡器的HTTPS双向认证方式接入集群的代码示例(Java)

在Java客户端,通过负载均衡器的HTTPS双向认证方式接入集群的代码示例。