首页 > 其他分享 >docker swarm 搭建ES集群(TLS版)

docker swarm 搭建ES集群(TLS版)

时间:2023-03-17 16:11:21浏览次数:48  
标签:TLS xpack ssl ca swarm certs elasticsearch docker security

ES集群如果想要开启密码访问,则需要开启集群的TLS功能
所以在docker swarm 搭建ES集群的基础上增加TLS版的ES集群

docker-compose文件准备

  • docker-compose-es-cluster-tls.yml
version: '3.3'
services:
  setup:
    image: elasticsearch:7.10.1
    volumes:
      - certs:/usr/share/elasticsearch/config/certs
    command: >
      bash -c '
        if [ ! -f config/certs/ca.zip ]; then
          echo "Creating CA";
          bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip;
          unzip config/certs/ca.zip -d config/certs;
        fi;
        if [ ! -f config/certs/certs.zip ]; then
          echo "Creating certs";
          bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key;
          unzip config/certs/certs.zip -d config/certs;
          echo "Setting file permissions"
          chown -R root:root config/certs;
          find . -type d -exec chmod 750 \{\} \;;
          find . -type f -exec chmod 640 \{\} \;;
        fi;
      '
    networks:
      - elastic
    deploy:
#      mode: global
      placement:
        constraints:
          - node.labels.es.replica==1 # 部署位置

  kibana:
    image: kibana:7.10.1
    environment:
      - ELASTICSEARCH_URL=http://es01:9200
      - ELASTICSEARCH_HOSTS=http://es01:9200
      - ELASTICSEARCH_USERNAME=elastic
      - ELASTICSEARCH_PASSWORD=vsUZGKNvjWRtTKPmDG
    ports:
      - "5601:5601"
    networks:
      - elastic
    deploy:
      mode: replicated
      replicas: 1
      resources:
        limits:
          memory: 800M
      placement:
        constraints:
          - node.labels.es.replica==1 # 部署位置
  es01:
    image: elasticsearch:7.10.1
    hostname: es01
    environment:
      - network.publish_host=es01
      - network.host=0.0.0.0
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - path.repo=/usr/share/elasticsearch/backups
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      - ELASTIC_PASSWORD=vsUZGKNvjWRtTKPmDG
      - xpack.security.enabled=true
#      - xpack.security.http.ssl.enabled=true
#      - xpack.security.http.ssl.key=certs/elasticsearch/elasticsearch.key
#      - xpack.security.http.ssl.certificate=certs/elasticsearch/elasticsearch.crt
#      - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
#      - xpack.security.http.ssl.verification_mode=certificate
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.key=certs/ca/ca.key
      - xpack.security.transport.ssl.certificate=certs/ca/ca.crt
      - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.license.self_generated.type=basic
    volumes:
      - certs:/usr/share/elasticsearch/config/certs
      - es01_data:/usr/share/elasticsearch/data
      - es01_logs:/usr/share/elasticsearch/logs
    ports:
      - "9200:9200"
    networks:
      - elastic
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.labels.es.replica==1 # 部署位置
  es02:
    image: elasticsearch:7.10.1
    hostname: es02
    environment:
      - network.publish_host=es02
      - network.host=0.0.0.0
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - path.repo=/usr/share/elasticsearch/backups
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      - xpack.security.enabled=true
      #      - xpack.security.http.ssl.enabled=true
      #      - xpack.security.http.ssl.key=certs/elasticsearch/elasticsearch.key
      #      - xpack.security.http.ssl.certificate=certs/elasticsearch/elasticsearch.crt
      #      - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
      #      - xpack.security.http.ssl.verification_mode=certificate
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.key=certs/ca/ca.key
      - xpack.security.transport.ssl.certificate=certs/ca/ca.crt
      - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.license.self_generated.type=basic
    volumes:
      - certs:/usr/share/elasticsearch/config/certs
      - es02_data:/usr/share/elasticsearch/data
      - es02_logs:/usr/share/elasticsearch/logs
    networks:
      - elastic
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.labels.es.replica==2 # 部署位置
  es03:
    image: elasticsearch:7.10.1
    hostname: es03
    environment:
      - network.publish_host=es03
      - network.host=0.0.0.0
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - path.repo=/usr/share/elasticsearch/backups
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      - xpack.security.enabled=true
      #      - xpack.security.http.ssl.enabled=true
      #      - xpack.security.http.ssl.key=certs/elasticsearch/elasticsearch.key
      #      - xpack.security.http.ssl.certificate=certs/elasticsearch/elasticsearch.crt
      #      - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
      #      - xpack.security.http.ssl.verification_mode=certificate
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.key=certs/ca/ca.key
      - xpack.security.transport.ssl.certificate=certs/ca/ca.crt
      - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.license.self_generated.type=basic
    volumes:
      - certs:/usr/share/elasticsearch/config/certs
      - es03_data:/usr/share/elasticsearch/data
      - es03_logs:/usr/share/elasticsearch/logs
    networks:
      - elastic
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - node.labels.es.replica==3 # 部署位置

volumes:
  certs:
    driver: local
  es01_data:
    driver: local
  es01_logs:
    driver: local
  es02_data:
    driver: local
  es02_logs:
    driver: local
  es03_data:
    driver: local
  es03_logs:
    driver: local

networks:
  elastic:
    external: true # 用已经创建好的网络

针对ES集群,如果需要使用密码,则需要开启tls功能,以下内容详细说明了如何在docker-swarm集群中创建tls版的ES集群

1. 创建ca证书

使用docker-compose-es-cluster-tls.yml文件部署es集群

docker stack deploy -c docker-compose-es-cluster-tls.yml es

此时,只有es01有证书,需要将es01的证书拷贝到其他机器

  • 例如:scp -r ca 172.25.114.14:/alidata1/docker/volumes/es_certs/_data

2. 查看每个es服务的启动日志

  • 每个节点都显示如下日志,则ES集群启动成功
{"type": "server", "timestamp": "2023-03-17T07:52:21,844Z", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "es-docker-cluster", "node.name": "es03", "message": "started", "cluster.uuid": "06ycAo0wQJeiWsF8keBiFg", "node.id": "_TPFdso3Ss6_A-lqdx3e5Q"  }
  • 如果有节点没有起来,则可以再执行一遍部署命令,然后在观察
docker stack deploy -c docker-compose-es-cluster-tls.yml es

3. 访问kibana验证服务

  • 在kibana的Dev Tools中访问:GET /_cat/nodes,显示如下结果:
10.0.5.31  60 97 6 0.50 0.44 0.30 cdhilmrstw * es01
10.0.5.108 24 95 3 0.02 0.37 0.44 cdhilmrstw - es02
10.0.5.149 44 96 5 0.14 0.60 0.68 cdhilmrstw - es03

以上信息表示集群启动成功

至此,tls版的ES集群启动成功,可以实现密码访问控制

标签:TLS,xpack,ssl,ca,swarm,certs,elasticsearch,docker,security
From: https://www.cnblogs.com/JentZhang/p/17227129.html

相关文章

  • docker 运行filebeat收集日志
    1.简介beats首先filebeat是Beats中的一员。Beats在是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、......
  • 从0到1入门Docker(七)配置国内加速器
     配置国内加速器 上篇文章内容是Docker引擎的安装,今天这篇文章来说一下配置国内加速器​​https://blog.51cto.com/u_15485663/6127076​​学习Docker推荐大家可以看动......
  • 记一下docker启动minio
    dockerrun--privileged=true-d-p9000:9000-p9001:9001--nameminio-d--restart=always-e"MINIO_ROOT_USER=root"-e"MINIO_ROOT_PASSWORD=12345678"......
  • Windows下用docker搭建本地kafka
    1.docker创建zookeeper拉取zookeeper镜像dockerpullwurstmeister/zookeeper运行dockerrun--name=zookeeper-d-eZOOKEEPER_CLIENT_PORT=2181-p2181:2181-p2888......
  • docker下compose及gitlab安装配置
      部署逻辑与部署Jenkins类似,但是实现方式做了一些调整。先安装docker-compose,docker-compose是doker容器的管理工具,通过yaml来实现多个容器之间的调用关系。通过d......
  • 修复SQLServer 2014支持 TLS 1.2
    修复原因:当把.netcore应用程序部署到linux或docker中去的时候,连接sqlserver数据库可能报错如下:Aconnectionwassuccessfullyestablishedwiththeserver,butthena......
  • Windows docker desktop 时区设置
    必须设置时区,否则查询出来的时间会有问题:(本人安装了mysql,但是修改mysql的配置没起作用) 进入容器执行:cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime&&echo‘......
  • Docker CLI docker commit 常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Doc......
  • docker部署go程序实现极小镜像占用
    1.交叉编译通常我们编写代码会在linux的环境中,一般开发环境就是win里面装个linux虚拟机,有的时候在虚机里安装相关IDE,这就使得本来资源有限的虚机进一步压缩,go恰好可以交叉......
  • 本地playwright打包docker封装(chrome)
    拉取官方镜像:dockerpullmcr.microsoft.com/playwright/python:v1.31.0-focal运行:dockerrun-it--name=python_playwright-v/Users/kaka/miniconda3/envs/playwrig......