Podman部署OpenSearch集群:Security未初始化及securityadmin.sh超时故障
问题概述
使用Podman部署2节点OpenSearch集群,容器启动后日志提示Not yet initialized (you may need to run securityadmin),调用健康端点返回OpenSearch Security not initialized.。执行securityadmin.sh初始化时出现超时,诊断返回503错误,显示cluster_manager未发现、集群状态未恢复初始化。容器间可ping通并telnet 9200/9300端口,使用默认TLS证书。
排查与解决步骤
1. 修复集群名称不匹配问题
从错误日志可见,securityadmin.sh默认尝试连接名为opensearch的集群,但你的容器配置中cluster.name=foo,两者不匹配导致集群无法被识别。需在securityadmin.sh命令中添加-cl参数指定集群名称:
"/usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh" -cd "/usr/share/opensearch/config/opensearch-security" -icl -cl foo -key "/usr/share/opensearch/config/kirk-key.pem" -cert "/usr/share/opensearch/config/kirk.pem" -cacert "/usr/share/opensearch/config/root-ca.pem" -nhnv
2. 修正network.bind_host配置格式
容器启动参数中network.bind_host的写法错误,环境变量需采用KEY=VALUE格式,而非YAML的冒号语法,错误配置会影响节点网络绑定与通信:
原错误配置:
-e "network.bind_host: [_local_, _site_]"
修正后:
-e "network.bind_host=_local_,_site_"
重启所有容器后,检查节点是否正常绑定网络。
3. 允许securityadmin.sh在Red状态集群操作
集群未初始化时状态通常为Red,需添加--accept-red-cluster参数允许工具在该状态下执行:
"/usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh" -cd "/usr/share/opensearch/config/opensearch-security" -icl -cl foo -key "/usr/share/opensearch/config/kirk-key.pem" -cert "/usr/share/opensearch/config/kirk.pem" -cacert "/usr/share/opensearch/config/root-ca.pem" -nhnv --accept-red-cluster
4. 验证cluster_manager选举状态
进入容器查看节点日志,确认是否成功选举cluster_manager:
podman logs node1 | grep "cluster_manager" podman logs node2 | grep "cluster_manager"
若日志中无选举成功信息,需检查discovery.seed_hosts和cluster.initial_cluster_manager_nodes配置是否正确,确保两个节点能互相识别主机名(可在容器内执行nslookup node1验证解析)。
5. 检查默认TLS证书兼容性
OpenSearch默认TLS证书的SAN字段仅包含localhost,若节点使用node1/node2作为主机名,会导致TLS握手失败,进而影响节点发现与cluster_manager选举。
- 临时排查:禁用TLS重启容器测试(生产环境禁用需谨慎):
若此时securityadmin.sh能成功执行,说明证书存在问题,需重新生成包含-e "plugins.security.ssl.transport.enabled=false" -e "plugins.security.ssl.http.enabled=false"node1、node2作为SAN的自定义证书。
内容的提问来源于stack exchange,提问作者CJW

