Hướng Dẫn Cấu Hình Elasticsearch Với SSL và Triển Khai Trên Kubernetes
Trong bài viết này, chúng ta sẽ tìm hiểu cách thiết lập Elasticsearch với SSL và viết file deployment từ đầu đến cuối. Dưới đây là các bước hướng dẫn chi tiết.
Bước 1: Tạo Chứng Chỉ SSL
Trước tiên, bạn cần tạo cặp khóa công khai và khóa riêng tư cho Elasticsearch. Để thực hiện điều này, bạn có thể sử dụng OpenSSL như sau:
-
Tạo thư mục lưu trữ chứng chỉ:
bashmkdir -p certs && cd certs
-
Tạo khóa riêng tư:
bashopenssl genrsa -out elasticsearch.key 2048
-
Tạo yêu cầu chứng chỉ:
bashopenssl req -new -key elasticsearch.key -out elasticsearch.csr
-
Tạo chứng chỉ tự ký:
bashopenssl x509 -req -days 365 -in elasticsearch.csr -signkey elasticsearch.key -out elasticsearch.crt
Sau khi thực hiện các lệnh trên, bạn sẽ có hai file: elasticsearch.key
và elasticsearch.crt
Bước 2: Tạo Secret Kubernetes
Để bảo mật thông tin, bạn nên lưu trữ chứng chỉ và khóa trong một Kubernetes Secret:
bash
kubectl create secret generic elasticsearch-ssl-secret \
--from-file=elasticsearch.key \
--from-file=elasticsearch.crt \
-n elks
Bước 3: Cấu Hình File elasticsearch.yml
Bạn cần thiết lập file elasticsearch.yml
để sử dụng SSL. Dưới đây là cấu hình cần thiết:
yaml
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.key: /usr/share/elasticsearch/config/elasticsearch.key
xpack.security.transport.ssl.certificate: /usr/share/elasticsearch/config/elasticsearch.crt
Bước 4: Viết File Deployment
Dưới đây là file deployment hoàn chỉnh cho Elasticsearch với cấu hình SSL:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: elasticsearch-deployment
namespace: elks
spec:
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:8.5.1
ports:
- containerPort: 9200
resources:
limits:
memory: 2Gi
requests:
memory: 1Gi
env:
- name: discovery.type
value: single-node
- name: ELASTIC_PASSWORD
value: "enao@123"
- name: xpack.security.enabled
value: "true"
- name: xpack.security.transport.ssl.enabled
value: "true"
volumeMounts:
- name: config-volume
mountPath: /usr/share/elasticsearch/config
- name: elasticsearch-ssl-volume
mountPath: /usr/share/elasticsearch/config
readOnly: true
volumes:
- name: config-volume
configMap:
name: elasticsearch-config
- name: elasticsearch-ssl-volume
secret:
secretName: elasticsearch-ssl-secret
---
apiVersion: v1
kind: Service
metadata:
name: elasticsearch-service
namespace: elks
spec:
type: NodePort
selector:
app: elasticsearch
ports:
- protocol: TCP
port: 9200
targetPort: 9200
nodePort: 30010
Bước 5: Áp Dụng Cấu Hình cho Kubernetes
Sau khi đã hoàn thành file deployment, bạn cần áp dụng cấu hình vào Kubernetes:
bash
kubectl apply -f your-deployment-file.yaml
Bước 6: Kiểm Tra Trạng Thái của Pod Elasticsearch
Để xem tình trạng của pod Elasticsearch, sử dụng lệnh sau:
bash
kubectl get pods -n elks
Nếu pod không hoạt động, bạn có thể kiểm tra log để tìm hiểu nguyên nhân bằng lệnh:
bash
kubectl logs <pod-name> -n elks
Ghi Chú
- Đảm bảo rằng bạn đã tạo ConfigMap
elasticsearch-config
để lưu trữ cấu hình Elasticsearch nếu cần. - Nếu bạn đã cấu hình SSL, hãy chắc chắn rằng client cũng được thiết lập đúng để kết nối qua SSL.
Hãy thực hiện theo các bước hướng dẫn trên và cập nhật cho tôi nếu bạn gặp bất kỳ vấn đề nào khác trong quá trình triển khai!
source: viblo