配置Elasticsearch集群独享型负载均衡
云搜索服务集成了共享型负载均衡器的能力,支持绑定公网访问和开启终端节点服务。相比共享型负载均衡器,独享型负载均衡器功能更丰富、性能更强,本章主要介绍如何配置集群的独享型负载均衡。
场景描述
- 非安全模式集群也支持集成弹性负载均衡服务的能力。
- 支持用户使用自定义证书进行HTTPS双向认证。
- 支持7层流量监控及告警配置,方便用户随时查看监控情况。
不同安全模式的集群对接独享型负载均衡器共有8种不同的服务形态,不同服务形态对应的ELB能力如表1所示,8种组合的配置概览如表2所示。
集群安全模式 |
ELB最终对外提供的服务形态 |
ELB负载均衡 |
ELB流量监控 |
ELB双向认证 |
---|---|---|---|---|
非安全 |
无认证 |
支持 |
支持 |
不支持 |
单向认证 双向认证 |
支持 |
支持 |
支持 |
|
安全+HTTP |
密码认证 |
支持 |
支持 |
不支持 |
单向认证+密码认证 双向认证+密码认证 |
支持 |
支持 |
支持 |
|
安全+HTTPS |
单向认证+密码认证 双向认证+密码认证 |
支持 |
支持 |
支持 |
集群安全模式 |
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集群对接独享型负载均衡的操作步骤如下:
- 如果规划ELB监听器的前端协议是HTTPS,则需要准备签名证书并上传至ELB管理控制台:准备并上传自签名证书
- 在ELB管理控制台创建独享型负载均衡器:创建独享型负载均衡器
- Elasticsearch或OpenSearch集群开启负载均衡:集群对接负载均衡器
- 通过独享型负载均衡实例接入集群:通过Curl命令接入集群
本文还提供了通过独享型负载均衡实例接入集群的Java客户端代码示例:通过负载均衡器的HTTPS双向认证方式接入集群的代码示例(Java)
约束限制
- 如果ELB绑定了公网,则不推荐接入非安全模式的集群。非安全模式的集群使用HTTP通信且不需要安全认证即可访问,如果对接公网访问存在安全风险。
- 开启了HTTPS访问的安全模式的集群不支持HTTP类型的前端协议认证,如果需要使用HTTP类型的前端协议,需要将集群的“安全模式”变更为“非安全模式”,具体操作请参见更改Elasticsearch集群安全模式。在变更安全模式前,请先关闭“负载均衡”,安全模式变更完成后再开启“负载均衡”。
准备并上传自签名证书
当规划的ELB监听器的前端协议为HTTPS时,需要参考本节准备自签名证书,作为服务器证书或CA证书上传至ELB。
建议使用云证书管理服务CCM购买的证书,或者其他权威机构颁发的证书。
- 登录到任意一台安装有OpenSSL工具和JDK的Linux客户端。
- 执行如下命令制作自签名证书。
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
- 上传自签名证书,具体操作请参见创建证书。
创建独享型负载均衡器
- 登录弹性负载均衡管理控制台。
- 参考创建独享型负载均衡器,创建独享型负载均衡器。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”
集群对接负载均衡器
- 登录云搜索服务管理控制台。
- 在“集群管理”页面选择需要对接负载均衡器的集群,单击集群名称进入集群“基本信息”页面。
- 在左侧菜单栏,选择“负载均衡”,打开负载均衡开关,在弹窗中配置负载均衡基础信息。
表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 开启负载均衡
- 单击“确定”,开启负载均衡。
- 在“监听器配置”区域,您可以单击右侧配置监听器的相关信息。
表5 配置监听器 参数
配置说明
前端协议
客户端与负载均衡监听器建立流量分发连接的协议。支持选择“HTTP”或“HTTPS”。
根据实际业务需要选择协议。
前端端口
客户端与负载均衡监听器建立流量分发连接的端口。
根据实际业务需要自定义。
SSL解析方式
客户端到服务器端认证方式。仅“前端协议”选择“HTTPS”才需要配置。
根据实际业务需要选择解析方式。
服务器证书
服务器证书用于SSL握手协商,需提供证书内容和私钥。仅“前端协议”选择“HTTPS”才需要配置服务器证书。
选择准备并上传自签名证书创建的服务器证书。
CA证书
CA证书又称客户端CA公钥证书,用于验证客户端证书的签发者。仅“SSL解析方式”选择“双向认证”时,才需要配置CA证书。
选择准备并上传自签名证书创建的CA证书。
在开启HTTPS双向认证功能时,只有当客户端能够出具指定CA签发的证书时,HTTPS连接才能成功。
图2 配置监听器
- (可选)在监听器配置区域,单击“访问控制”后的“设置”跳转到负载均衡器的监听器列表,单击监听器访问控制列的“设置”,配置允许通过负载均衡实例访问集群的IP地址组,不设置的话默认允许所有的IP地址访问。
- 在健康检查区域,您可以查看各个节点IP的健康检查结果。
表6 健康检查结果状态说明 健康检查结果
说明
正常
节点IP连接正常。
异常
节点IP连接,不可用
通过Curl命令接入集群
- 在云搜索服务管理控制台,单击左侧导航栏的“集群管理”。
- 在集群管理列表页面,单击需要访问的集群名称,进入集群基本信息页面。
- 在左侧菜单栏选择“负载均衡”,获取并记录负载均衡实例的“私有IP”、“IPv6地址”或“公网IP”,以及监听器配置的“前端协议/端口”。
如果ELB绑定了公网,则不推荐接入非安全模式的集群。非安全模式的集群使用HTTP通信且不需要安全认证即可访问,如果对接公网访问存在安全风险。
- 在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
用户名对应的密码,仅安全集群需要配置。
当可以正常返回集群信息时,表示连接成功。