Giới Thiệu
Bài viết này sẽ hướng dẫn bạn cách cấu hình SSL cho Elasticsearch khi triển khai trên môi trường Kubernetes, đồng thời cách tạo token enrollment cho Kibana tự động ngay từ lần khởi động đầu tiên.
Tại Sao Cần Cấu Hình SSL?
Cấu hình SSL là điều cần thiết để đảm bảo an toàn cho các kết nối đến Elasticsearch. Việc này giúp bảo vệ dữ liệu khỏi các cuộc tấn công và đảm bảo rằng chỉ những người dùng hợp lệ mới có thể truy cập vào hệ thống của bạn.
Các Bước Cấu Hình
Dưới đây là các bước thực hiện chi tiết:
Bước 1: Cấu Hình Elasticsearch.yml
Trước tiên, bạn cần chỉnh sửa file elasticsearch.yml
để bật tính năng bảo mật và cho phép tạo token:
yaml
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
# Cấu hình SSL cho HTTP layer
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
xpack.security.http.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
Bước 2: Thêm InitContainer Để Tạo Token
Sử dụng initContainer trong file Deployment để tạo token trước khi Elasticsearch khởi động và ghi vào file. Dưới đây là một ví dụ file cấu hình Deployment:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: elasticsearch-deployment
namespace: elk
spec:
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:8.5.0
ports:
- containerPort: 9200
- containerPort: 9300
volumeMounts:
- name: elastic-config
mountPath: /usr/share/elasticsearch/config
- name: certs
mountPath: /usr/share/elasticsearch/config/certs
- name: enrollment-token
mountPath: /usr/share/elasticsearch/config/token
initContainers:
- name: token-generator
image: docker.elastic.co/elasticsearch/elasticsearch:8.5.0
command:
- /bin/bash
- -c
- |
bin/elasticsearch-create-enrollment-token -s kibana > /usr/share/elasticsearch/config/token/kibana-token.txt
volumeMounts:
- name: certs
mountPath: /usr/share/elasticsearch/config/certs
- name: enrollment-token
mountPath: /usr/share/elasticsearch/config/token
volumes:
- name: elastic-config
configMap:
name: elasticsearch-config
- name: certs
secret:
secretName: elasticsearch-certificates
- name: enrollment-token
emptyDir: {}
Giải Thích File Cấu Hình
- InitContainer token-generator: Đây là container chạy trước khi Elasticsearch khởi động. Nó sẽ sinh token bằng lệnh
elasticsearch-create-enrollment-token
và lưu vào file/usr/share/elasticsearch/config/token/kibana-token.txt
. - Volumes: Sử dụng một volume để lưu trữ tạm thời file token và một volume khác để chứa chứng chỉ cần thiết cho SSL.
Bước 3: Truy Xuất Token Sau Khi Elasticsearch Khởi Động
Khi Elasticsearch đã được khởi động, bạn có thể lấy token bằng cách sử dụng lệnh sau:
bash
kubectl exec -it <elasticsearch-pod-name> -n elk -- cat /usr/share/elasticsearch/config/token/kibana-token.txt
Lệnh này sẽ in token enrollment để bạn có thể sử dụng cho việc cấu hình Kibana.
Kết Luận
Việc sử dụng initContainer để tự động tạo và lưu trữ token là một cách hiệu quả giúp đơn giản hóa quá trình triển khai Elasticsearch bảo mật trên Kubernetes. Hãy đảm bảo cấu hình SSL vụn vặt nếu cần thiết, hoặc bạn có thể vô hiệu hóa nếu không cần thiết trong quá trình phát triển.
source: viblo