Công Cụ External Secrets Là Gì?
External Secrets là một công cụ mạnh mẽ cho phép bạn tích hợp cụm Kubernetes (K8s) của mình với các hệ thống lưu trữ secrets bên thứ ba. Những hệ thống này bao gồm AWS Secrets Manager, HashiCorp Vault, Google Secrets Manager, Azure Key Vault, và nhiều hơn nữa. Công cụ này giúp bạn đồng bộ hóa dữ liệu các secrets được lưu trữ trên những nền tảng này với cụm Kubernetes của bạn.
Cách Thức Hoạt Động
Để sử dụng công cụ này, bạn cần cài đặt nó bằng cách sử dụng Helm. Dưới đây là lệnh cài đặt:
helm repo add external-secrets https://charts.external-secrets.io
helm install external-secrets \
external-secrets/external-secrets \
-n external-secrets \
--create-namespace
Bạn có thể tham khảo thêm hướng dẫn tại: External Secrets - Getting Started.
External Secrets hoạt động như một Operator trong cụm Kubernetes. Mặc định, khi cài đặt, sẽ có 3 pods được tạo trong namespace external-secrets
. Các pods này có chức năng quản lý việc thêm, xóa, sửa, và đồng bộ hóa secrets giữa bên thứ ba và Kubernetes.
Mô Hình Hoạt Động
External Secrets sử dụng Custom Resource Definitions (CRD) để định nghĩa các thông tin cần thiết, giúp công cụ này gọi qua các dịch vụ bên thứ ba định kỳ để lấy dữ liệu và tạo ra các resource secrets tương ứng trong cụm Kubernetes.
Biến thể chính mà chúng ta sẽ làm việc là CRD SecretStore và ExternalSecret:
- SecretStore: Chứa thông tin xác thực và định nghĩa API để tương tác với các dịch vụ bên thứ ba (như AWS Secrets Manager).
- ExternalSecret: Mapping dữ liệu từ bên thứ ba và lưu trữ trong Kubernetes. Trong resource này, bạn có thể xác định cách thức để thay đổi và định dạng lại dữ liệu.
Ưu Điểm Của Công Cụ External Secrets
- Dễ Dàng Tích Hợp Nhiều Nguồn Secrets: Giúp bạn lấy secrets từ nhiều nhà cung cấp khác nhau một cách dễ dàng mà không cần phải sử dụng init container hay sidecar.
- Cập Nhật Tự Động Secrets: Hỗ trợ tự động cập nhật secrets trong cụm Kubernetes khi có sự thay đổi từ bên ngoài. Điều này cho phép ứng dụng của bạn tự động phản hồi với config hoặc secrets mới.
- Đồng Bộ Hai Chiều: Giữa secrets trong cluster và dữ liệu bên thứ ba.
- Bảo Mật Cao Hơn: Trong nhiều trường hợp, công cụ này giúp nâng cao mức độ bảo mật cho secrets của bạn.
Thực Hành Với AWS Secrets Manager
Trong phần này, chúng ta sẽ học cách lấy secrets từ AWS Secrets Manager và tự động tạo đồng bộ với secrets trong cụm Kubernetes.
Giả định: Bạn đã cài đặt External Secret Operator theo hướng dẫn ở trên.
Bước 1: Tạo Access Key Trên AWS
Truy cập vào dịch vụ IAM trên AWS, chọn Users, và chọn người dùng có quyền truy cập thích hợp. Sau đó, tạo một access key mới và ghi lại các thông tin dưới đây:
access-key: AKIAT2JIMCJN33OMMXUI
secret-access-key: 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
Tạo một resource secret tên awssm-secret
trong Kubernetes để lưu trữ thông tin qua lệnh sau:
kubectl create secret generic awssm-secret \
--from-literal=access-key=AKIAT2JIMCJN33OMMXUI \
--from-literal=secret-access-key=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
Bước 2: Tạo Secret Trong AWS Secrets Manager
Truy cập vào dịch vụ Secrets Manager trên AWS và tạo một secret tên external-secret-test với các giá trị bạn muốn lưu trữ.
Bước 3: Tạo Các CRD Để Đồng Bộ Dữ Liệu
Đầu tiên, tạo CRD SecretStore như sau:
apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
name: aws-secretsmanager
spec:
provider:
aws:
service: SecretsManager
region: us-east-1
auth:
secretRef:
accessKeyIDSecretRef:
name: awssm-secret
key: access-key
secretAccessKeySecretRef:
name: awssm-secret
key: secret-access-key
Tiếp theo, tạo CRD ExternalSecret như sau:
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: external-secret
spec:
refreshInterval: 1m
secretStoreRef:
name: aws-secretsmanager
kind: SecretStore
target:
name: local-secret-name
creationPolicy: Owner
dataFrom:
- extract:
key: external-secret-test
Kiểm Tra Kết Quả
Sau khi tạo xong 2 resource trên, bạn có thể sử dụng lệnh kubectl describe
và kubectl get secret
để kiểm tra. Nếu mọi thứ hoạt động tốt, bạn sẽ thấy thông tin đã được đồng bộ và secret được tạo thành công.
Bạn có thể thử nghiệm thêm với việc tạo các secret mới trên AWS để xem quá trình đồng bộ diễn ra như thế nào.
Trong bài viết này, chúng ta đã khám phá một trường hợp đơn giản của việc sử dụng công cụ External Secrets. Nếu bạn muốn tìm hiểu sâu hơn về tính năng nâng cao của công cụ này, hãy tham khảo tài liệu chính thức tại: External Secrets Documentation.
Kết Luận
Hy vọng rằng bài viết này đã giúp bạn có cái nhìn tổng quan về công cụ External Secrets và cách thức triển khai nó trong môi trường Kubernetes. Nếu bạn thấy nội dung hữu ích, hãy cho mình một Upvote và Follow để nhận thêm nhiều bài viết về DevOps/SRE nhé!
Chúc các bạn có một ngày làm việc hiệu quả!
Quảng Cáo
Nếu bạn gặp khó khăn trong việc quản lý hệ thống hoặc cần hỗ trợ với các công cụ DevOps, đừng ngần ngại liên hệ với mình để được giúp đỡ: hoangviet.io.vn.
source: viblo