K8S部署开启x-pack验证的ES单机、logstash单机,并配置配置文件logstash.conf
时间: 2025-07-12 09:38:57 浏览: 9
<think>嗯,用户之前已经问过如何在Kubernetes上部署Logstash单机并配置开启X-Pack的Elasticsearch作为持久卷,现在他再次提问,但这次的问题似乎更具体,要求同时部署开启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-Pack的Elasticsearch单机**
##### **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集群
阅读全文