0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hướng Dẫn Quản Lý và Lưu Trữ Secrets Trong Kubernetes Với Công Cụ External Secrets

Đăng vào 1 tháng trước

• 4 phút đọc

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:

Copy
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 SecretStoreExternalSecret:

  • 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:

Copy
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:

Copy
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:

Copy
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:

Copy
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 describekubectl 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

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào