0Pricing
Docker & DevOps Fundamentals · บทเรียน

ConfigMaps และ Secrets

จัดการข้อมูลการกำหนดค่าและข้อมูลละเอียดอ่อนอย่างปลอดภัยภายในการนำ Kubernetes ไปใช้งาน โดยใช้ ConfigMaps และ Secrets

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

บทนำสู่ ConfigMaps และ Secrets

ยินดีต้อนรับครับ ในบทเรียนนี้ เราจะเรียนรู้วิธีจัดการข้อมูลการกำหนดค่าและข้อมูลละเอียดอ่อนใน Kubernetes เราจะสำรวจ ConfigMaps และ Secrets ซึ่งเป็นเครื่องมือสำคัญสองอย่างสำหรับการนำแอปพลิเคชันไปใช้งานอย่างยืดหยุ่นและปลอดภัย

ConfigMaps และ Secrets — ภาพประกอบ 1

เหตุใดจึงควรแยกการกำหนดค่าออกมา

ลองนึกภาพว่าคุณฝังข้อมูลรับรองฐานข้อมูลหรือคีย์ 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: Never

ConfigMap ในรูปไฟล์ที่เมานต์

อีกทางเลือกหนึ่งคือเมานต์ข้อมูลจาก 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: Never

Secrets: ข้อมูลละเอียดอ่อน

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) และปลดล็อคส่วนที่เหลือของคอร์ส Docker & DevOps Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Docker & DevOps Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ConfigMaps และ Secrets”

จัดการข้อมูลการกำหนดค่าและข้อมูลละเอียดอ่อนอย่างปลอดภัยภายในการนำ Kubernetes ไปใช้งาน โดยใช้ ConfigMaps และ Secrets คุณปฏิบัติ Docker & DevOps Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Docker & DevOps Fundamentals หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Docker & DevOps Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “ConfigMaps และ Secrets” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Docker & DevOps Fundamentals นี้ได้ไหม

ได้ บทเรียน Docker & DevOps Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Deployment สำหรับแอปแบบไร้สถานะ
  2. Service สำหรับการเข้าถึงเครือข่าย
  3. ConfigMaps และ Secrets
  4. Ingress และการกำหนดเส้นทางภายนอก
← กลับไปที่ Docker & DevOps Fundamentals