Giới thiệu
Trong bài viết này, chúng ta sẽ đi vào chi tiết cách cấu hình Elasticsearch chạy trên Kubernetes với tính năng SSL được thiết lập cho giao thức HTTP. Một phần quan trọng trong cấu hình này là cách tạo token đăng ký (enrollment token) tự động ngay từ khi khởi động Elasticsearch lần đầu tiên.
Bước 1: Cấu hình file elasticsearch.yml
Để bắt đầu, bạn cần đảm bảo rằng file elasticsearch.yml
của bạn được cấu hình chính xác như sau:
yaml
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
# Cấu hình SSL cho HTTP layer (cần thiết nếu không bỏ qua yêu cầu)
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 trước khi Elasticsearch khởi động
Tiếp theo, bạn sẽ cần thêm một initContainer
trong file Deployment của Elasticsearch để tạo ra token đăng ký cho Kibana và lưu nó vào một file. Dưới đây là cấu hình mẫu:
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 cấu hình
-
initContainer
token-generator
: Container này sẽ chạy trước khi Elasticsearch khởi động. Nó thực hiện lệnhelasticsearch-create-enrollment-token
để tạo token và lưu vào file/usr/share/elasticsearch/config/token/kibana-token.txt
. -
Volumes:
certs
: Giúp gắn các chứng chỉ cần thiết từ bí mật.enrollment-token
: Sử dụngemptyDir
để lưu trữ tạm thời file token.
-
Volume Mounts: Gắn các volumes cần thiết vào các container để lưu chứng chỉ và token.
Bước 3: Truy xuất token sau khi Elasticsearch khởi động
Sau khi Elasticsearch khởi động, bạn có thể lấy token từ file kibana-token.txt
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
Mệnh lệnh này sẽ in ra token đăng ký mà bạn có thể dùng để cấu hình Kibana.
Kết luận
Cách sử dụng initContainers
giúp tự động hóa quá trình tạo token ngay khi Elasticsearch khởi động. File token sẽ được lưu trong một volume tạm thời và có thể dễ dàng truy xuất từ bên ngoài. Bạn cũng cần đảm bảo rằng cấu hình SSL/TLS đã được thiết lập nếu yêu cầu, hoặc có thể vô hiệu hóa tùy theo mục đích sử dụng. Phương pháp này sẽ giúp bạn dễ dàng quản lý và bảo mật Elasticsearch trong môi trường Kubernetes.
source: viblo