安装elasticsearch的docker版本,需要设置ssl,但是没有证书,能生成一个自签的证书,然后搭配到elasticsearch,生成相关ssl设置的教程
要在Elasticsearch Docker安装中使用自签名SSL证书,你可以按照以下步骤操作:
步骤 1: 安装 OpenSSL
确保你的系统上安装了OpenSSL。在大多数Linux发行版和MacOS上,OpenSSL通常已经预安装了。如果没有,你可以通过包管理器安装它。
步骤 2: 生成自签名证书
创建证书密钥:
openssl genrsa -out rootCA.key 4096
创建根证书(CA),内容随便填:
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
创建服务器证书的密钥:
openssl genrsa -out elasticsearch.key 4096
创建证书签名请求(CSR),内容随便填:
openssl req -new -key elasticsearch.key -out elasticsearch.csr
创建配置文件以指定证书选项:
创建一个文件 v3.ext ,以包含需要的DNS和IP地址,注意ip地址一定要设置准确,不然后面无法使用,例如:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = elasticsearch
IP.1 = 127.0.0.1 #注意,如果是docker安装的一定要设置这个ip为容器ip地址,不然无法使用,可以
IP.2 = 172.17.0.2
IP.3 = 172.17.0.3
#设置多个ip....
使用自己的CA签署SSL证书,如果ip不对的时候修改上面的v3.ext,从新运行下面的命令,然后移动到certs目录下面:
openssl x509 -req -in elasticsearch.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out elasticsearch.crt -days 500 -sha256 -extfile v3.ext
步骤 3: 设置Docker容器
在设置Elasticsearch Docker容器时,需要将证书挂载到容器内部,并配置Elasticsearch以使用这些证书。
创建一个docker-compose.yml文件,如下所示:
networks:
1panel-network:
external: true
services:
elasticsearch:
container_name: ${CONTAINER_NAME}
deploy:
resources:
limits:
cpus: ${CPUS}
memory: ${MEMORY_LIMIT}
environment:
- discovery.type=single-node
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- ${P_ES_JAVA_OPTS}
- xpack.security.enabled=true
- xpack.security.transport.ssl.enabled=true
- xpack.security.transport.ssl.verification_mode=certificate
- xpack.security.transport.ssl.key=certs/elasticsearch.key
- xpack.security.transport.ssl.certificate=certs/elasticsearch.crt
- xpack.security.transport.ssl.certificate_authorities=certs/rootCA.pem
- xpack.security.http.ssl.enabled=true
- xpack.security.http.ssl.key=certs/elasticsearch.key
- xpack.security.http.ssl.certificate=certs/elasticsearch.crt
- xpack.security.http.ssl.certificate_authorities=certs/rootCA.pem
image: docker.elastic.co/elasticsearch/elasticsearch:8.13.0 #使用那个版本就修改那个版本
labels:
createdBy: Apps
networks:
- 1panel-network
ports:
- ${HOST_IP}:${PANEL_APP_PORT_HTTP}:9200
restart: always
ulimits:
memlock:
hard: -1
soft: -1
nofile:
hard: 65536
soft: 65536
volumes:
- ./data/data:/usr/share/elasticsearch/data
- ./data/backup:/usr/share/elasticsearch/backup
- ./data/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
- ./data/conf/certs:/usr/share/elasticsearch/config/certs
version: "3"
本地没有目录的,先新建相应的本地目录和文件,我的elasticsearch.yml文件配置如下:
cluster.name: "docker-cluster"
network.host: 0.0.0.0
path.repo: ["/usr/share/elasticsearch/backup"]
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: X-Requested-With,Content-Type,Content-Length,Authorization
将证书和密钥放在你的项目目录中的 certs 文件夹中。
步骤 4: 启动Elasticsearch
使用 docker-compose up 命令启动Elasticsearch容器。
步骤 5: 验证并设置密码
docker ps 可以查看所有docker的信息,找到你刚刚新建的容器名修改下面的命令,进入容器
docker container exec -it <容器名> bash
#进入后运行
./bin/elasticsearch-setup-passwords auto
如果一切正常就显示如下图,如果报ip错误,则按照步骤2中的v3.ext ip设置重新设置运行后面的命令: