ConfigMaps และ Secrets
จัดการข้อมูลการกำหนดค่าและข้อมูลละเอียดอ่อนอย่างปลอดภัยภายในการนำ Kubernetes ไปใช้งาน โดยใช้ ConfigMaps และ Secrets
ConfigMaps และ Secrets เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
บทนำสู่ ConfigMaps และ Secrets
ยินดีต้อนรับครับ ในบทเรียนนี้ เราจะเรียนรู้วิธีจัดการข้อมูลการกำหนดค่าและข้อมูลละเอียดอ่อนใน Kubernetes เราจะสำรวจ ConfigMaps และ Secrets ซึ่งเป็นเครื่องมือสำคัญสองอย่างสำหรับการนำแอปพลิเคชันไปใช้งานอย่างยืดหยุ่นและปลอดภัย

เหตุใดจึงควรแยกการกำหนดค่าออกมา
ลองนึกภาพว่าคุณฝังข้อมูลรับรองฐานข้อมูลหรือคีย์ API ไว้โดยตรงในอิมเมจ Docker ของแอปพลิเคชัน การทำเช่นนี้ทำให้การอัปเดตทำได้ยากและเปิดเผยข้อมูลละเอียดอ่อน
- ไม่ยืดหยุ่น: การเปลี่ยนแปลงจำเป็นต้องสร้างอิมเมจใหม่
- ความเสี่ยงด้านความปลอดภัย: ข้อมูลละเอียดอ่อนถูกฝังอยู่ในอิมเมจ
- ขึ้นอยู่กับสภาพแวดล้อม: สภาพแวดล้อมต่าง ๆ เช่น dev และ prod ต้องใช้การตั้งค่าที่แตกต่างกัน
ConfigMaps: ข้อมูลที่ไม่ละเอียดอ่อน
ConfigMap คือออบเจ็กต์ Kubernetes ที่ใช้จัดเก็บข้อมูลการกำหนดค่าที่ไม่ละเอียดอ่อนในรูปคู่คีย์-ค่า ลองนึกภาพว่าเป็นศูนย์กลางสำหรับการตั้งค่าแอปของคุณ เช่น ระดับการบันทึกข้อมูลหรือปลายทาง API
สิ่งนี้ช่วยแยกการกำหนดค่าออกจากโค้ดแอปพลิเคชัน ทำให้การนำไปใช้งานพกพาได้มากขึ้นและจัดการได้ง่ายขึ้น
กำหนด ConfigMap
คุณสามารถสร้าง ConfigMap จากค่าตามตัวอักษร ไฟล์ หรือไดเรกทอรีได้ นี่คือตัวอย่างอย่างง่ายที่กำหนดไว้ในไฟล์ YAML
apiVersion: v1
kind: ConfigMap
metadata:
name: my-app-config
data:
log_level: "INFO"
api_endpoint: "http://myapi.example.com"ConfigMap ในรูปตัวแปรสภาพแวดล้อม
เมื่อสร้างแล้ว Pod สามารถใช้ข้อมูลจาก ConfigMap เป็นตัวแปรสภาพแวดล้อมได้ นี่เป็นวิธีทั่วไปในการส่งการตั้งค่าไปยังแอปพลิเคชัน
นี่คือวิธีที่ Pod ใช้ my-app-config
apiVersion: v1
kind: Pod
metadata:
name: configmap-env-pod
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "echo Log Level: $LOG_LEVEL; echo API: $API_ENDPOINT"]
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: my-app-config
key: log_level
- name: API_ENDPOINT
valueFrom:
configMapKeyRef:
name: my-app-config
key: api_endpoint
restartPolicy: NeverConfigMap ในรูปไฟล์ที่เมานต์
อีกทางเลือกหนึ่งคือเมานต์ข้อมูลจาก ConfigMap เป็นไฟล์ภายในคอนเทนเนอร์ คู่คีย์-ค่าแต่ละคู่จะกลายเป็นไฟล์หนึ่งไฟล์ โดยใช้คีย์เป็นชื่อไฟล์และค่าเป็นเนื้อหา
วิธีนี้มีประโยชน์สำหรับไฟล์การกำหนดค่าที่แอปพลิเคชันคาดว่าจะอ่านจากเส้นทางเฉพาะ
apiVersion: v1
kind: Pod
metadata:
name: configmap-file-pod
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "cat /etc/config/log_level; cat /etc/config/api_endpoint"]
volumeMounts:
- name: config-volume
mountPath: /etc/config
volumes:
- name: config-volume
configMap:
name: my-app-config
restartPolicy: NeverSecrets: ข้อมูลละเอียดอ่อน
Secrets คล้ายกับ ConfigMaps แต่ได้รับการออกแบบมาสำหรับข้อมูลละเอียดอ่อน เช่น รหัสผ่าน คีย์ API หรือใบรับรอง TLS โดย Kubernetes ช่วยให้คุณจัดการและแจกจ่ายข้อมูลเหล่านี้ได้อย่างปลอดภัย
ขณะที่ ConfigMaps จัดเก็บข้อมูลเป็นข้อความธรรมดา Secrets จะถูก เข้ารหัสด้วย base64 วิธีนี้ไม่ใช่การเข้ารหัส แต่ช่วยป้องกันการเปิดเผยข้อมูลโดยไม่ได้ตั้งใจ
กำหนด Secret
เมื่อสร้าง Secret ค่าเหล่านั้นต้องเข้ารหัสด้วย base64 คุณสามารถใช้ echo -n 'my-password' | base64 เพื่อเข้ารหัสได้
นี่คือตัวอย่างสำหรับรหัสผ่านฐานข้อมูล
apiVersion: v1
kind: Secret
metadata:
name: db-credentials
type: Opaque
data:
username: YWRtaW4= # base64 of 'admin'
password: c3VwZXJzZWNyZXRwYXNz # base64 of 'supersecretpass'การใช้ Secrets ใน Pods
Pods ใช้ Secrets ในลักษณะเดียวกับ ConfigMaps โดยใช้เป็นตัวแปรสภาพแวดล้อมหรือไฟล์ที่เมานต์ Kubernetes จะถอดรหัสข้อมูลเหล่านี้โดยอัตโนมัติก่อนส่งให้คอนเทนเนอร์
โดยทั่วไป การใช้เป็นไฟล์ที่เมานต์ถือว่าปลอดภัยกว่า เนื่องจากตัวแปรสภาพแวดล้อมอาจถูกบันทึกหรือตรวจสอบได้ง่ายกว่า
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: my-app-container
image: busybox
command: ["sh", "-c", "echo DB User: $DB_USERNAME; echo DB Pass: $DB_PASSWORD"]
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-credentials
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-credentials
key: password
restartPolicy: Neverแนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัย
โปรดจำไว้ว่า การเข้ารหัสด้วย base64 ไม่ใช่การเข้ารหัสเพื่อความปลอดภัย หากต้องการเข้ารหัสข้อมูลขณะจัดเก็บอย่างแท้จริง คุณอาจต้องใช้แบ็กเอนด์สำหรับ Kubernetes Secrets เช่น Vault หรือใช้บริการ KMS ของผู้ให้บริการคลาวด์
- RBAC: ควบคุมว่าใครสามารถเข้าถึง Secrets ได้
- สิทธิ์น้อยที่สุด: อนุญาตให้ Pods เข้าถึงเฉพาะ Secrets ที่จำเป็น
- ไฟล์ที่เมานต์: ควรเมานต์ Secrets เป็นไฟล์แทนการใช้ตัวแปรสภาพแวดล้อม
ตรวจสอบความเข้าใจเรื่องการกำหนดค่า
คุณต้องจัดเก็บคีย์ API (ข้อมูลละเอียดอ่อน) และการตั้งค่าระดับการบันทึกข้อมูล (ไม่ละเอียดอ่อน) สำหรับแอปพลิเคชันใน Kubernetes
คุณควรใช้ออบเจ็กต์ Kubernetes ใดสำหรับแต่ละรายการตามลำดับ
ทบทวน: ConfigMaps และ Secrets
ทำได้ดีมากครับ คุณได้เรียนรู้วิธีจัดการการกำหนดค่าแอปพลิเคชันและข้อมูลละเอียดอ่อนใน Kubernetes
- ConfigMaps: จัดเก็บคู่คีย์-ค่าที่ไม่ละเอียดอ่อน
- Secrets: จัดเก็บข้อมูลละเอียดอ่อน (เข้ารหัสด้วย base64)
- ทั้งสองอย่างสามารถใช้เป็นตัวแปรสภาพแวดล้อมหรือไฟล์ที่เมานต์โดย Pods ได้
- ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยเสมอเมื่อจัดการข้อมูลละเอียดอ่อน
ถัดไป สำรวจหัวข้อความปลอดภัยขั้นสูง เช่น RBAC และโซลูชันจัดการ Secrets ภายนอก
คำถามที่พบบ่อย
บทเรียน “ConfigMaps และ Secrets” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ConfigMaps และ Secrets” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ConfigMaps และ Secrets”
จัดการข้อมูลการกำหนดค่าและข้อมูลละเอียดอ่อนอย่างปลอดภัยภายในการนำ Kubernetes ไปใช้งาน โดยใช้ ConfigMaps และ Secrets คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ConfigMaps และ Secrets” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม
ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Deployment สำหรับแอปแบบไร้สถานะ
- Service สำหรับการเข้าถึงเครือข่าย
- ConfigMaps และ Secrets
- Ingress และการกำหนดเส้นทางภายนอก