elasticsearch 使用 x-pack 开启用户密码验证

本文介绍如何在Elasticsearch 7.4.0中启用内置的x-pack插件,包括配置步骤、设置用户密码及验证方法。通过详细指导,帮助读者理解并实践Elasticsearch的安全配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版本

  • elasticsearch 7.4.0

前言

elasticsearch 7.4.0 中已经内置了 x-pack 插件,所以直接配置启动就可以了

配置方法

进入 elasticsearch 安装目录,编辑配置 config/elasticsearch.yml,新增以下配置

xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true

设置密码

注意:这里需要依次设置
elastic,kibana,logstash_system,beats_system,apm_system,remote_monitoring_user 这几个用户的密码
进入 elasticsearch 安装目录,运行以下命令

bin/elasticsearch-setup-passwords interactive

设置成功后,测试一下是否成功
先不使用用户名密码访问

curl localhost:9200

返回带有 401 错误码的 json 数据就说明已经是需要用户密码访问了

再使用户名密码访问,规则在后面接 -u user:pwd 参数

curl localhost:9200 -u elastic:123456

返回了正常的 json 数据说明成功了,这个时候在浏览器访问也是会弹出用户密码的输入框

<think>嗯,用户之前已经问过如何在Kubernetes上部署Logstash单机并配置开启X-PackElasticsearch作为持久卷,现在他再次提问,但这次的问题似乎更具体,要求同时部署开启X-Pack的ES单机和Logstash单机,并配置logstash.conf文件。我需要仔细分析用户的需求,确保这次的回答覆盖到部署ES和Logstash两个部分,而不仅仅是Logstash。 首先,用户可能对Kubernetes的基本概念有一定了解,但可能在实际操作中遇到问题,比如如何正确配置X-Pack的安全认证,如何挂载证书,或者如何让Logstash正确连接到ES。用户可能是在搭建一个日志收集系统,需要ES作为存储,Logstash处理日志数据。 用户的上一次问题中,我已经给出了部署Logstash并连接已有ES集群的步骤。现在用户希望同时部署ES单机,并且开启X-Pack验证,这意味着需要从头开始配置ES,包括生成证书、设置用户名密码等。同时,用户可能希望整个部署都在Kubernetes环境中完成,因此需要编写对应的ES和Logstash的Kubernetes配置文件。 接下来,我需要考虑如何在K8S中部署单机ES并开启X-Pack。ES的单机部署通常使用StatefulSet或者Deployment,但由于是单机,可能更适合使用Deployment。同时,需要配置持久卷来保存ES的数据,避免容器重启后数据丢失。开启X-Pack需要设置相关环境变量,如ELASTIC_PASSWORD,以及挂载生成的证书。 然后,Logstash的部署需要连接到这个开启X-Pack验证的ES实例。因此,Logstash的配置文件中必须包含ES的地址、用户名、密码以及CA证书的路径。此外,用户提到的logstash.conf需要被正确挂载到容器中,可能需要使用ConfigMap或者直接挂载文件。 需要注意的是,ES和Logstash的版本兼容性,必须确保两者版本一致或兼容,否则可能会出现连接问题。另外,证书的生成和配置是关键步骤,如果证书不正确,会导致SSL握手失败,连接被拒绝。 用户可能遇到的常见问题包括:证书配置错误、权限问题、网络策略阻止Pod之间的通信、环境变量未正确设置等。因此,在回答中需要详细说明每一步的操作,并给出验证部署的方法,比如检查Pod日志,测试数据流是否正常。 最后,需要确保所有的YAML配置文件正确无误,包括Secret的Base64编码、ConfigMap的内容、Volume挂载的路径等。特别是挂载证书时,路径和子路径的设置容易出错,需要特别指出。 总结下来,回答的结构应该分为部署ES和部署Logstash两大部分,每部分包括创建配置文件、Secret、Deployment,以及验证步骤。同时,需要强调版本兼容性、证书管理和网络连通性等关键点,帮助用户顺利完成部署并避免常见陷阱。</think>--- ### **Kubernetes部署X-Pack认证的Elasticsearch单机与Logstash单机** --- #### **一、部署开启X-PackElasticsearch单机** ##### **1. 创建Elasticsearch配置文件** ```yaml # es-configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: es-config data: elasticsearch.yml: | cluster.name: "my-es-cluster" node.name: "es-single-node" network.host: "0.0.0.0" discovery.type: "single-node" xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.http.ssl.enabled: true xpack.security.http.ssl.keystore.path: /usr/share/elasticsearch/config/certs/keystore.p12 xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/keystore.p12 ``` ##### **2. 生成证书并创建Secret** ```bash # 生成自签名证书(需提前安装elasticsearch-certutil) docker run -it --rm elasticsearch:8.7.1 \ bin/elasticsearch-certutil cert --name es-single-node --pem --out /tmp/certs.zip # 解压后获取ca.crt和keystore.p12,Base64编码 cat ca.crt | base64 -w0 > ca.b64 cat keystore.p12 | base64 -w0 > keystore.b64 ``` ```yaml # es-secret.yaml apiVersion: v1 kind: Secret metadata: name: es-certs type: Opaque data: ca.crt: <粘贴ca.b64内容> keystore.p12: <粘贴keystore.b64内容> ``` ##### **3. 部署Elasticsearch** ```yaml # es-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: elasticsearch spec: replicas: 1 selector: matchLabels: app: elasticsearch template: metadata: labels: app: elasticsearch spec: containers: - name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:8.7.1 env: - name: ELASTIC_PASSWORD value: "your_secure_password" # 设置ES管理员密码 - name: ES_JAVA_OPTS value: "-Xms1g -Xmx1g" ports: - containerPort: 9200 - containerPort: 9300 volumeMounts: - name: config mountPath: /usr/share/elasticsearch/config/elasticsearch.yml subPath: elasticsearch.yml - name: certs mountPath: /usr/share/elasticsearch/config/certs/ volumes: - name: config configMap: name: es-config - name: certs secret: secretName: es-certs items: - key: keystore.p12 path: keystore.p12 - key: ca.crt path: ca.crt ``` --- #### **二、部署Logstash并配置logstash.conf** ##### **1. 创建Logstash配置文件** ```yaml # logstash-configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: logstash-config data: logstash.conf: | input { beats { port => 5044 } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } output { elasticsearch { hosts => ["https://elasticsearch:9200"] index => "logs-%{+YYYY.MM.dd}" user => "elastic" password => "your_secure_password" ssl => true ssl_certificate_verification => true cacert => "/usr/share/logstash/config/ca.crt" } } ``` ##### **2. 挂载ES证书并创建Secret** ```yaml # logstash-secret.yaml apiVersion: v1 kind: Secret metadata: name: logstash-es-auth type: Opaque data: ca.crt: <粘贴ca.b64内容> # 与ES使用的相同CA证书 ``` ##### **3. 部署Logstash** ```yaml # logstash-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: logstash spec: replicas: 1 selector: matchLabels: app: logstash template: metadata: labels: app: logstash spec: containers: - name: logstash image: docker.elastic.co/logstash/logstash:8.7.1 volumeMounts: - name: config mountPath: /usr/share/logstash/pipeline/logstash.conf subPath: logstash.conf - name: certs mountPath: /usr/share/logstash/config/ca.crt subPath: ca.crt env: - name: ELASTICSEARCH_HOSTS value: "https://elasticsearch:9200" volumes: - name: config configMap: name: logstash-config - name: certs secret: secretName: logstash-es-auth ``` --- #### **三、验证部署** 1. **检查ES状态**: ```bash kubectl exec -it elasticsearch-pod-name -- curl -k -u elastic:your_secure_password https://localhost:9200 ``` 2. **查看Logstash日志**: ```bash kubectl logs -f logstash-pod-name ``` 3. **测试数据流**: ```bash # 发送测试日志到Logstash echo '127.0.0.1 - - [11/Dec/2023:10:15:32 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0"' | nc logstash-pod-ip 5044 ``` --- #### **四、关键注意事项** 1. **版本一致性**:确保ES、Logstash使用相同大版本(例如8.7.x) 2. **证书复用**:Logstash与ES必须使用相同的CA证书 3. **密码安全**:通过Secret管理敏感信息,禁止明文存储密码 4. **网络策略**:确保Logstash Pod能通过DNS名称`elasticsearch`访问ES服务 5. **持久化存储**:建议为ES添加PVC以持久化数据 完整部署流程可在20分钟内完成,适合开发测试环境。生产环境需增加: - 资源配额(`resources.limits`) - 就绪探针(`readinessProbe`) - 持久化队列配置 - 多节点ES集群
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼c_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值