Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng OpenSSL để tạo chứng chỉ SSL cho Elasticsearch và cấu hình thực hiện một cách chi tiết từ A đến Z. Bạn sẽ được hướng dẫn qua từng bước cụ thể, từ việc tạo khóa riêng, chứng chỉ, cho đến cấu hình Elasticsearch và tạo Kubernetes Secret. Hãy cùng bắt đầu ngay!
Bước 1: Tạo Khóa và Chứng Chỉ SSL
Tạo Khóa Riêng (Private Key)
Đầu tiên, chúng ta cần tạo một khóa riêng cho Elasticsearch. Thực hiện bằng cách sử dụng lệnh sau:
bash
openssl genrsa -out elasticsearch.key 2048
Tạo Yêu Cầu Chứng Chỉ (CSR)
Tiếp theo, bạn sẽ tạo một yêu cầu chứng chỉ bằng cách chạy lệnh sau:
bash
openssl req -new -key elasticsearch.key -out elasticsearch.csr
Trong quá trình này, bạn sẽ được yêu cầu nhập một số thông tin như tên miền và tên tổ chức. Hãy điền thông tin theo yêu cầu.
Tạo Chứng Chỉ Tự Ký
Cuối cùng, chúng ta sẽ tạo chứng chỉ tự ký với lệnh sau:
bash
openssl x509 -req -days 365 -in elasticsearch.csr -signkey elasticsearch.key -out elasticsearch.crt
Bước 2: Tạo Keystore
Elasticsearch cần keystore để lưu trữ khóa và chứng chỉ. Bạn có thể tạo keystore bằng cách sử dụng OpenSSL hoặc keytool nếu đã cài đặt JDK. Để sử dụng OpenSSL, hãy thực hiện theo các bước sau:
Chuyển Đổi Chứng Chỉ và Khóa Sang Định Dạng PKCS12
Sử dụng lệnh dưới đây để chuyển đổi:
bash
openssl pkcs12 -export -in elasticsearch.crt -inkey elasticsearch.key -out elasticsearch.p12 -name elasticsearch -passout pass:your_keystore_password
Hãy thay your_keystore_password
bằng mật khẩu mà bạn muốn sử dụng cho keystore.
Bước 3: Tạo Kubernetes Secret
Sau khi có keystore, bạn cần tạo Kubernetes Secret để lưu trữ keystore mà bạn vừa tạo:
bash
kubectl create secret generic elasticsearch-keystore --from-file=elasticsearch.p12
Bước 4: Cấu Hình Elasticsearch với SSL
Dưới đây là mẫu file YAML cho deployment của Elasticsearch với cấu hình SSL. Đảm bảo chỉnh sửa các giá trị mật khẩu cho phù hợp:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: elasticsearch
namespace: elk
spec:
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- name: elasticsearch
image: elasticsearch:8.6.0
env:
- name: ELASTIC_PASSWORD
value: "your_password" # Đặt mật khẩu cho người dùng elastic
- name: xpack.security.enabled
value: "true"
- name: xpack.security.http.ssl.enabled
value: "true"
- name: xpack.security.http.ssl.keystore.path
value: "/usr/share/elasticsearch/config/certs/elasticsearch.p12"
- name: xpack.security.http.ssl.keystore.password
value: "your_keystore_password"
- name: xpack.security.transport.ssl.enabled
value: "true"
- name: xpack.security.transport.ssl.verification_mode
value: "certificate"
volumeMounts:
- name: certs
mountPath: /usr/share/elasticsearch/config/certs
volumes:
- name: certs
secret:
secretName: elasticsearch-keystore
ports:
- containerPort: 9200
name: elasticsearch
protocol: TCP
Bước 5: Triển Khai Elasticsearch
Lưu file YAML ở bước 4 vào một file với tên elasticsearch-deployment.yaml
. Sau đó, triển khai Elasticsearch với lệnh:
bash
kubectl apply -f elasticsearch-deployment.yaml
Bước 6: Kiểm Tra và Tạo Enrollment Token
Sau khi Elasticsearch đã được triển khai thành công, bạn có thể tạo enrollment token bằng cách thực hiện lệnh sau:
bash
kubectl exec -it <pod-name> -n elk -- /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
Hãy thay <pod-name>
bằng tên của pod Elasticsearch của bạn.
Hy vọng hướng dẫn chi tiết này sẽ giúp bạn thực hiện thành công việc tạo chứng chỉ SSL và cấu hình Elasticsearch!
source: viblo