Như nhiều bài GitOps mà mình đã giới thiệu thì chúng ta sẽ cần lưu mọi template trên git, github
Nhưng chúng ta không được phép lưu secret trên k8s vậy thì phải làm sao?

Chúng ta có 1 giải pháp của bitnami đó chính là Sealed Secrets
Đầu tiên bạn cần cài đặt Sealed Secrets trên k8s thông qua helm.
helm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets

Thường thì bạn sẽ tạo secret trên k8s bằng cách bên dưới
kubectl --namespace default \ create secret \ generic mysecret \ --dry-run=client \ --from-literal foo=bar \ --output json >>>>>>>>>>output { "kind": "Secret", "apiVersion": "v1", "metadata": { "name": "mysecret", "namespace": "default", "creationTimestamp": null }, "data": { "foo": "YmFy" } }
Bạn sẽ thấy là value của key foo chỉ được base64 và chúng ta có thể dễ dàng decrypt được nếu bạn push lên github.
Giờ bạn sử dụng lệnh sau:
kubectl --namespace production \ create secret \ generic mysecret \ --dry-run=client \ --from-literal foo=bar \ --output json \ | kubeseal \ --controller-name=sealed-secrets \ --controller-namespace=sealed-secrets \ | tee mysecret.yaml
Bạn để ý ở hình trên thì sẽ Sealed Secrets call vào sevice: sealed-secrets và namespace: sealed-secrets
khi kiểm tra file sẽ thấy tạo có 1 kind mới là SealedSecret and data was encrypted
root@work-space-u20:~/sealed-secrets# cat mysecret.yaml { "kind": "SealedSecret", "apiVersion": "bitnami.com/v1alpha1", "metadata": { "name": "mysecret", "namespace": "default", "creationTimestamp": null }, "spec": { "template": { "metadata": { "name": "mysecret", "namespace": "default", "creationTimestamp": null } }, "encryptedData": { "foo": "AgCCWL/hgufITW6As6xsaJ8JnywzwEXnP6rOt8VRM13RBj8I/XLLSdgEFyUemM7PXq9WQ62E2fNryhZyOgdfnXCEgP6fv/r/iFTwueEbJxVPGPS4TUt/ChuV9hBY2b5g8fnqpYfK2DmKzP+33vF4n3EDGz/aB/OgAx4NjoZQs4njKspIIQXogTE3mi7dIHkXoHk6KBHiplWUV+dF2BhQWNiDKHw3hhui+qP0MM6FnSrlFXbz6gjNuUJCYZEcSil4MQGprjuR7sK+7zOe+L8/pfMWajqJGdW2v9R/s7vhYudounAIY8YbPO/4Y18qgU75RW5Rk6b3Zl9MDU2zPnerQb/Z8h06w206XZAw33ajDYIKUUm4+so9gJhzdDdbYlApbzwvHfYrtDp9b+8NkO9gXCkAjwn1HiIXANrLlxLh/ip0FVwQlP47O9Zyfw1ZRsF3biOjpnEgJt8TIhrvHzrfZyBK5HPxv4ckhDRsTyg0AVvl7/3Jak9zDTBv9ikeC5PMiC5YmQJdIietPuvJSerzn2BMjUP08kwv93Ef1T4aUmHcj+C3b0dSc8sOV+HswAGfT1F0HrfcpI8oao4Gr8jN7U8APNkVqkIZPXSFMTC1q4CO++19k8FXwZjsgp+V2dLUnGr2ULOKvrR/NI1AwtHJKCRj80a2E03caEcor2MYhURwYzaJlzYT5voPYjPIp4oA+Ti62W4=" } } }
Sau đó bạn chỉ cần kubectl apply -f mysecret.yaml


Giờ bạn có thể push file lên github òi.
Bạn có thêm xem 2 video sau:
services “sealed-secrets-controller” not found
Nếu bị lỗi trên thì bạn tham khảo link dưới nhé!
==> https://github.com/bitnami-labs/sealed-secrets/issues/758#issuecomment-105687923