การใช้งาน Kubeseal
เข้ารหัสข้อมูล Secrets File ด้วย Sealed Secrets
ในกรณีที่ต้องการใช้ Secrets File ห้ามนำ File ขึ้น Git หรือ ส่งให้โดยไม่ได้ทำการป้องกันและเข้ารหัส
- ตัวอย่าง Secret ด้วย Base64 (ไม่ปลอดภัย)
# secret-database.yaml
apiVersion: v1
data:
password: MTIzNA==
kind: Secret
metadata:
name: secret-database
namespace: production
Decode password ด้วย Base64
echo MTIzNA== | base64 -d
# result: 1234
- ตัวอย่าง SealedSecret (ปลอดภัย)
# seal-secret-database.yaml
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
creationTimestamp: null
name: secret-database
namespace: production
spec:
encryptedData:
password: AgClC2kb/y5G3CrKHuVNAz7k7eH0u1sLxJlkf4jWrN9OoL8SNP4nqxT9xRafHGHURX3E/ux+qBySSLPdtazZm8EWoMUoUbDCM9+cGHcapUrc0VL7KGsGZxUyS3/foH7049TdLjW9+5oNUr9kNviGl9vhsHZHj/6BrANGUYCZS45SCwopQ3V87Y4O8KEnWYGruGKj1gHw92+9VrWwrI8AsA5K6jlu6fo1ZiOQPbY9C4DISZyt1G5vZbD7CUGtFIOQt9bXSDchdSKSphct5MBBuMlJYOLbyO3ujdWZAsTIEoVwV1hO386pN/qxAxS1XA1kgdqEEg1B8k9UYc3Sfj9R0AHApMHYXm+Xnr1uebWfewn0S+/lWbMwp3dvYsoTALTjgDtvD/iZ9Ct+az/TsVg8aEvbJ1gm/he0V/s+2NdVkD0D6SXCXEigYfb+yTenmlUW9NT8LaNdrTd7fwfnDueBQIpydhdbhpIP33xEtHzqkhaizHoXiqPOhXdTlx3z6UbG+xUHICR2FkS1haMXUOhHC5Y7OV+o86w0M2S3H031ipeA4hZGz0WoT0dFJGc5ISarfUKHpQhPz6H2fu8J3dvVIs33zZkkmiMKfQ5hNdV1vYhlCPd5NREcjsW/4Zfd3zxi6KVp1npRrCyHNO007/YCDef5i7MbM0MNDPfsVg6rvnAJcsYzIWgQsD8O+YAfNJ1DoD35k5/d
template:
metadata:
creationTimestamp: null
name: secret-database
namespace: production
- คำสั่งการทำงานเพื่อสร้าง Sealed Secrets
kubeseal -o yaml < secret-database.yaml > seal-secret-database.yaml
ขั้นตอนการติดตั้งและใช้งาน
# Install
kubectl krew install neat
ติดตั้ง Kubeseal Client
# Homebrew
brew install kubeseal
# Linux
# Fetch the latest sealed-secrets version using GitHub API
KUBESEAL_VERSION=$(curl -s https://api.github.com/repos/bitnami-labs/sealed-secrets/tags | jq -r '.[0].name' | cut -c 2-)
# Check if the version was fetched successfully
if [ -z "$KUBESEAL_VERSION" ]; then
echo "Failed to fetch the latest KUBESEAL_VERSION"
exit 1
fi
curl -OL "https://github.com/bitnami-labs/sealed-secrets/releases/download/v${KUBESEAL_VERSION}/kubeseal-${KUBESEAL_VERSION}-linux-amd64.tar.gz"
tar -xvzf kubeseal-${KUBESEAL_VERSION}-linux-amd64.tar.gz kubeseal
sudo install -m 755 kubeseal /usr/local/bin/kubeseal
การดึง public หรือ cert เพื่อเข้ารหัสข้อมูล
kubeseal --fetch-cert > mycert.pem
kubeseal \
--controller-name=sealed-secrets-controller \
--controller-namespace=kube-system \
--fetch-cert > mycert.pem
การเข้ารหัสข้อมูลด้วย cert
kubectl create secret generic secret-database \
--dry-run=client \
--from-literal=password=1234 \
-o yaml
# หรือกำหนด namespace ด้วย
kubectl create secret generic secret-database \
-n production \
--dry-run=client \
--from-literal=password=1234 \
-o yaml
# secret-database.yaml
apiVersion: v1
data:
password: MTIzNA==
kind: Secret
metadata:
name: secret-database
namespace: production
- เข้ารหัสไฟล์ secret ด้วย Sealed Secrets
kubeseal --cert mycert.pem \
-o yaml < secret-database.yaml > seal-secret-database.yaml
- กรณีไม่กำหนด namespace ให้ใช้คำสั่ง –scope cluster-wide
kubeseal --cert mycert.pem \
--scope cluster-wide \
-o yaml < secret-database.yaml > seal-secret-database.yaml