0
0
Lập trình
Admin Team
Admin Teamtechmely

Triển khai và Quản lý HashiCorp Vault trên Kubernetes với HA và Raft

Đăng vào 1 tuần trước

• 7 phút đọc

Giới thiệu

Vault là một công cụ quản lý bí mật mạnh mẽ, cho phép lưu trữ và bảo mật thông tin nhạy cảm một cách hiệu quả. Việc triển khai Vault trên Kubernetes với chế độ HA (High Availability) và backend Raft không chỉ cung cấp độ bền bỉ mà còn khả năng mở rộng cho việc lưu trữ bí mật an toàn. Hướng dẫn này sẽ hướng dẫn bạn cách cài đặt Vault, thiết lập namespaces, triển khai thông qua Helm, tham gia các nút Vault, mở khóa và xử lý các vấn đề thường gặp.

Mục tiêu của bài viết

  • Cài đặt Vault trên Kubernetes
  • Thiết lập chế độ HA với backend Raft
  • Giải quyết các vấn đề thường gặp trong quá trình triển khai

Phần chuẩn bị

Trước khi bắt đầu, bạn cần đảm bảo đã chuẩn bị những điều sau:

  • Cụm Kubernetes có thể truy cập được bằng kubectl
  • Helm 3 đã được cài đặt
  • Quyền truy cập đầy đủ để tạo namespaces và Persistent Volumes (PV)
  • Kiến thức cơ bản về các khái niệm của Vault và Kubernetes

Bước 1: Thiết lập Namespace và Repo Helm

Tạo một namespace để cách ly Vault khỏi các dịch vụ khác:

Copy
kubectl create namespace vault

Thêm repo Helm của HashiCorp và cập nhật:

Copy
helm repo add hashicorp https://helm.releases.hashicorp.com
helm repo update

Bước 2: Cài đặt Vault với Helm trong chế độ HA

Tạo một tệp values.yaml cho Vault HA sử dụng lưu trữ Raft (Integrated Storage):

Copy
injector:
  enabled: false
server:
  image:
    repository: "hashicorp/vault"
    tag: "1.9.0"
    pullPolicy: IfNotPresent
  updateStrategyType: "OnDelete"
  resources:
    requests:
      memory: 256Mi
      cpu: 250m
    limits:
      memory: 256Mi
      cpu: 250m
  ha:
    enabled: true
    replicas: 3
    raft:
      enabled: true
      config: |
        ui = true
        listener "tcp" {
          tls_disable = 1
          address = "[::]:8200"
          cluster_address = "[::]:8201"
        }
        storage "raft" {
          path = "/vault/data"
        }
        service_registration "kubernetes" {}
  dataStorage:
    enabled: true
    size: 500Mi

Cài đặt Vault:

Copy
helm install vault hashicorp/vault -n vault -f values.yaml

Kiểm tra trạng thái của các pod:

Copy
$ kubectl get pods -n vault
NAME                                           READY   STATUS    RESTARTS
vault-0                                        0/1     Running   0
vault-1                                        0/1     Running   0
vault-2                                        0/1     Running   0

Bước 3: Tham gia các nút Vault và Khởi tạo Cluster

  • Chỉ có pod Vault đầu tiên (vault-0) được khởi tạo một lần.
  • Khởi tạo Vault trên vault-0:
Copy
kubectl exec -it vault-0 -n vault -- vault operator init -key-shares=5 -key-threshold=3

Lưu ý: Hãy ghi nhớ các khóa phục hồi (Recovery Keys) được in ra sau khi khởi tạo, vì bạn sẽ cần chúng để mở khóa Vault khi nó bị niêm phong lại.

Bây giờ, chúng ta sẽ thấy việc mở khóa Vault diễn ra như sau:

Copy
$ kubectl exec -it vault-0 -n vault -- vault operator unseal <unseal_key_1>
$ kubectl exec -it vault-0 -n vault -- vault operator unseal <unseal_key_2>
$ kubectl exec -it vault-0 -n vault -- vault operator unseal <unseal_key_3>

Bước 4: Tham gia các nút Vault vào Cluster

Các pod khác (vault-1, vault-2) cần tham gia vào cluster Raft. Chạy các lệnh sau để tham gia:

Copy
$ kubectl exec -it vault-1 -n vault -- vault operator raft join http://vault-0.vault-internal:8200
$ kubectl exec -it vault-2 -n vault -- vault operator raft join http://vault-0.vault-internal:8200

Bước 5: Mở khóa các pod Vault

Mở khóa tất cả các pod Vault (vault-0, vault-1, vault-2) một cách thủ công với các khóa mở khóa:

Copy
kubectl exec -it vault-1 -n vault -- vault operator unseal <unseal_key_1>
kubectl exec -it vault-1 -n vault -- vault operator unseal <unseal_key_2>
kubectl exec -it vault-1 -n vault -- vault operator unseal <unseal_key_3>

kubectl exec -it vault-2 -n vault -- vault operator unseal <unseal_key_1>
kubectl exec -it vault-2 -n vault -- vault operator unseal <unseal_key_2>
kubectl exec -it vault-2 -n vault -- vault operator unseal <unseal_key_3>

Bước 6: Kiểm tra trạng thái pod

Kiểm tra trạng thái của các pod để đảm bảo tất cả đều sẵn sàng:

Copy
$ kubectl get pods -n vault
NAME                                           READY   STATUS    RESTARTS
vault-0                                        1/1     Running   0
vault-1                                        1/1     Running   0
vault-2                                        1/1     Running   0

Thực hành tốt nhất

  • Bảo mật khóa phục hồi: Hãy đảm bảo rằng bạn lưu trữ các khóa phục hồi một cách an toàn và không chia sẻ với người không có quyền truy cập.
  • Giám sát trạng thái Vault: Sử dụng các công cụ giám sát để theo dõi trạng thái của Vault và đảm bảo rằng nó hoạt động bình thường.

Các vấn đề thường gặp và cách khắc phục

ClusterRoleBinding đã tồn tại

  • Xóa ClusterRoleBinding xung đột trước khi cài đặt lại Helm chart:
Copy
kubectl delete clusterrolebinding vault-server-binding

Lỗi nâng cấp Helm ("no deployed releases")

  • Gỡ cài đặt phiên bản trước đó khỏi namespace mặc định:
Copy
helm uninstall vault -n default

Các pod không mở khóa hoặc không sẵn sàng

  • Kiểm tra nhật ký pod để tìm lỗi:
Copy
kubectl logs vault-1 -n vault

PVC bị kẹt trong trạng thái Terminating

  • Xóa finalizers để buộc xóa:
Copy
kubectl patch pvc data-vault-1 -n vault -p '{"metadata":{"finalizers":[]}}' --type=merge

Kết luận

Việc triển khai Vault trên Kubernetes với chế độ HA và backend Raft cung cấp khả năng lưu trữ bí mật an toàn và khả năng mở rộng. Các quy trình khởi tạo, tham gia và mở khóa đúng cách là rất quan trọng để đảm bảo hoạt động của Vault. Nếu gặp phải các vấn đề, hãy xử lý cẩn thận tình trạng PVC, trạng thái pod và thành viên cluster Raft.

Câu hỏi thường gặp

Vault là gì?

Vault là một công cụ quản lý bí mật, giúp bảo vệ và lưu trữ thông tin nhạy cảm.

Tại sao nên sử dụng chế độ HA cho Vault?

Chế độ HA giúp đảm bảo rằng Vault luôn sẵn sàng và không bị gián đoạn trong trường hợp một nút gặp sự cố.

Làm thế nào để khôi phục Vault nếu bị lỗi?

Sử dụng các khóa phục hồi đã lưu để mở khóa Vault và khởi động lại dịch vụ.

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