Secrets
Secrets ใน Kubernetes เป็นวิธีการจัดเก็บข้อมูลที่มีความลับ เช่น รหัสผ่าน คีย์ API หรือข้อมูลรับรองต่าง ๆ อย่างปลอดภัย โดยข้อมูลเหล่านี้จะถูกเข้ารหัสแบบ Base64 และสามารถใช้ร่วมกับ Pods ได้อย่างยืดหยุ่น
คุณสมบัติของ Secrets
-
การจัดเก็บข้อมูลที่มีความลับ
- เช่น รหัสผ่าน ข้อมูลรับรอง หรือคีย์การเข้าถึง
-
ความปลอดภัย
- ข้อมูลจะถูกเข้ารหัสแบบ Base64
- สามารถกำหนดสิทธิ์การเข้าถึงได้ผ่าน RBAC (Role-Based Access Control)
-
รองรับการใช้งานหลายรูปแบบ
- Environment Variables
- Volume Mounts
- การดึงค่าโดยตรงในแอปพลิเคชัน
วิธีการสร้าง Secrets
1. การสร้างจากไฟล์ YAML
apiVersion: v1
kind: Secret
metadata:
name: example-secret
namespace: default
data:
username: dXNlcm5hbWU= # "username" เข้ารหัสด้วย Base64
password: cGFzc3dvcmQ= # "password" เข้ารหัสด้วย Base64
ใช้คำสั่งเพื่อสร้าง Secret:
kubectl apply -f example-secret.yaml
2. การสร้างจากคำสั่ง kubectl
kubectl create secret generic example-secret \
--from-literal=username=username \
--from-literal=password=password
3. การสร้างจากไฟล์
kubectl create secret generic example-secret --from-file=path/to/secret-file
วิธีการใช้งาน Secrets
1. ใช้เป็น Environment Variables
ตัวอย่างการใช้งาน Secret ใน Pod:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: nginx
env:
- name: USERNAME
valueFrom:
secretKeyRef:
name: example-secret
key: username
- name: PASSWORD
valueFrom:
secretKeyRef:
name: example-secret
key: password
2. ใช้เป็น Volume Mount
เมานต์ Secret เป็นไฟล์คอนฟิกใน Pod:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: nginx
volumeMounts:
- name: secret-volume
mountPath: /etc/secret
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: example-secret
3. ใช้ดึงข้อมูลโดยตรงในแอปพลิเคชัน
ในแอปพลิเคชันสามารถดึงค่าจาก Secret ผ่านการอ่านไฟล์ใน /etc/secret/ หรือผ่าน Environment Variables
การจัดการ Secrets
ดูรายการ Secrets
kubectl get secrets
ดูรายละเอียดของ Secret
kubectl describe secret <secret-name>
การดูค่าที่เข้ารหัส
kubectl get secret <secret-name> -o yaml
ลบ Secret
kubectl delete secret <secret-name>
ข้อควรรู้เกี่ยวกับ Secrets
-
Base64 ไม่ใช่การเข้ารหัสที่ปลอดภัย
- Base64 เป็นเพียงการเข้ารหัสเพื่อการจัดเก็บที่ง่ายต่อการแปลงกลับ ไม่ใช่การป้องกันข้อมูล
-
ควรใช้ Secrets อย่างระมัดระวัง
- ใช้ RBAC เพื่อควบคุมการเข้าถึง Secrets
- เปิดใช้ฟีเจอร์ Encryption at Rest สำหรับ Kubernetes
-
จัดการ Secrets ใน CI/CD
- หลีกเลี่ยงการเก็บ Secrets ในซอร์สโค้ด ใช้ Kubernetes Secrets แทน
Secrets ช่วยเพิ่มความปลอดภัยในการจัดการข้อมูลลับใน Kubernetes และเหมาะสำหรับการใช้งานที่ต้องการการแยกข้อมูลลับออกจากโค้ด การใช้งาน Secrets อย่างถูกต้องช่วยลดความเสี่ยงที่อาจเกิดขึ้นจากการรั่วไหลของข้อมูล