Để cấu hình file Deployment cho Elasticsearch trên Kubernetes và in ra enrollment token ngay lần đầu chạy, bạn cần thực hiện một số bước để tích hợp quá trình tạo token vào trong file Deployment. Bạn có thể sử dụng initContainers trong Kubernetes để chạy lệnh tạo token trước khi Elasticsearch khởi động, và lưu kết quả vào nơi mà bạn có thể truy xuất sau này.
Dưới đây là các bước chi tiết:
Bước 1: Cấu hình elasticsearch.yml cho việc tạo token Đảm bảo rằng file elasticsearch.yml của bạn có cấu hình để bật tính năng tạo token tự động:
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
SSL cho HTTP layer (cần có SSL 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 Sử dụng initContainers trong file Deployment để tạo token đăng ký cho Kibana và lưu nó vào một file để truy cập sau này. Dưới đây là file mẫu:
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ó tạo token bằng lệnh elasticsearch-create-enrollment-token và ghi token vào file /usr/share/elasticsearch/config/token/kibana-token.txt.
Volumes:
certs: Gắn bí mật chứa các chứng chỉ cần thiết. enrollment-token: Sử dụng emptyDir để lưu file token tạm thời. Volume Mounts: Gắn các volumes cần thiết vào các container để lưu chứng chỉ và file 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 chạy lệnh sau:
kubectl exec -it <elasticsearch-pod-name> -n elk -- cat /usr/share/elasticsearch/config/token/kibana-token.txt
Điều này sẽ in ra enrollment token mà bạn có thể sử dụng để cấu hình Kibana.
Tổng kết initContainer sẽ tự động chạy lệnh tạo token trước khi Elasticsearch khởi động. File token được lưu vào volume tạm thời và có thể truy xuất từ bên ngoài. SSL/TLS vẫn cần được cấu hình nếu yêu cầu, hoặc có thể vô hiệu hóa tùy vào mục đích của bạn. Phương pháp này giúp tự động hóa quá trình tạo và lưu trữ token khi khởi động Elasticsearch lần đầu tiên trong môi trường Kubernetes.