10
10-Day Kubernetes Track • Level 1 Finale

วันที่ 10: Headlamp Authentication & ServiceAccount Tokens

คู่มือปฏิบัติการ • 20–30 นาทีต่อวัน • วันสุดท้ายของ Level 1

ยินดีต้อนรับสู่ วันที่ 10: Headlamp Authentication & ServiceAccount Tokens!

วันนี้เป็นวันสุดท้ายของ Level 1 เราจะมาเรียนรู้กลไกความปลอดภัยในการเข้าใช้งาน Headlamp แบบ In-Cluster โดยใช้ ServiceAccount และ Bearer Token เพื่อยืนยันตัวตน (Authentication) และควบคุมสิทธิ์การจัดการทรัพยากรตามระบบ RBAC (Role-Based Access Control) ของ Kubernetes ครับ

5-10m

ช่วงที่ 1: สรุปแนวคิดสถาปัตยกรรม

เข้าใจเหตุผลด้านความปลอดภัยในการยืนยันตัวตน, บทบาทของ ServiceAccount & Bearer Token และการสะท้อนสิทธิ์ของ RBAC บน Headlamp UI

15-20m

ช่วงที่ 2: การลงมือปฏิบัติจริง (5 ขั้นตอน)

สร้าง ServiceAccount ผู้ดูแล, ผูกสิทธิ์ cluster-admin, เจนเนอเรต Bearer Token 24 ชม., ล็อกอินเข้า Web UI และทดสอบสิทธิ์ข้ามทุก Namespace

1

สรุปแนวคิดและสถาปัตยกรรม (5–10 นาที)

ทำไมต้องยืนยันตัวตนเข้า UI?

เมื่อเราปรับใช้ Headlamp แบบ In-Cluster ตัว UI จะเป็นตัวกลางติดต่อกับ Kubernetes API Server โดยตรง เพื่อความปลอดภัยในสภาพแวดล้อมจริง Headlamp จึงไม่อนุญาตให้บุคคลภายนอกเข้าถึงข้อมูลคลัสเตอร์ได้จนกว่าจะส่ง Token ที่ถูกต้องเพื่อยืนยันตัวตน

• ป้องกันการเข้าถึง API Server โดยไม่ได้รับอนุญาต

ServiceAccount & Bearer Token

• ServiceAccount: บัญชีดิจิทัล (Identity) ประจำคลัสเตอร์สำหรับกำหนดสิทธิ์ให้คนหรือแอปพลิเคชัน

• Bearer Token: โทเคนชั่วคราวที่ผูกกับ ServiceAccount สำหรับใช้เป็นหลักฐานแสดงสิทธิ์เมื่อส่งคำขอ HTTP API

• Headlamp ใช้ Token นี้ยิงคำสั่งแทนเรา 100%

การทำงานของ RBAC ใน Headlamp

สิทธิ์และเมนูที่ปรากฏบน Headlamp UI (เช่น การดู Pods, การลบ Workloads, หรือการสลับ Namespace) จะแปรผันตาม ClusterRoleBinding หรือ RoleBinding ของ ServiceAccount ตัวนั้น หากมีสิทธิ์จำกัด หน้าต่าง UI จะซ่อนปุ่มสั่งงานที่ไม่ได้รับอนุญาตให้อัตโนมัติ

• สอดคล้องกับมาตรฐานความปลอดภัยระดับ Production
2

ขั้นตอนลงมือปฏิบัติจริง (15–20 นาที)

ติ๊กถูกเมื่อทำแต่ละขั้นตอนเสร็จ
Step 1 of 5

เปิด Terminal แล้วสร้าง ServiceAccount ชื่อ headlamp-admin ภายใต้เนมสเปซระบบ kube-system:

Terminal Bash • Create ServiceAccount
kubectl create serviceaccount headlamp-admin -n kube-system
✓ ผลลัพธ์ที่คาดหวัง: Terminal จะแสดงข้อความ serviceaccount/headlamp-admin created แสดงว่าตัวตนสำหรับแอดมินถูกเตรียมไว้เรียบร้อยแล้ว
Step 2 of 5

ผูกบทบาทสิทธิพิเศษระดับสูงสุดของระบบ (cluster-admin) เข้ากับ ServiceAccount ที่เพิ่งสร้างขึ้น:

Terminal Bash • Bind ClusterRole
kubectl create clusterrolebinding headlamp-admin-binding \
  --clusterrole=cluster-admin \
  --serviceaccount=kube-system:headlamp-admin
✓ ผลลัพธ์ที่คาดหวัง: Terminal จะแสดงข้อความ clusterrolebinding.rbac.authorization.k8s.io/headlamp-admin-binding created
Step 3 of 5

สร้าง Bearer Token อายุใช้งาน 24 ชั่วโมง โดยใช้คำสั่ง kubectl create token (มาตรฐานสำหรับ Kubernetes v1.24+):

Terminal Bash • Generate Bearer Token
kubectl create token headlamp-admin -n kube-system --duration=24h
ข้อควรระวัง: Terminal จะพ่นข้อความสตริง Token ยาวๆ ออกมา (เช่น eyJhbGciOiJSUzI1NiIs...) ให้คุณลากคลุมแล้วคัดลอก (Copy) ทั้งหมดเก็บไว้ในคลิปบอร์ดเพื่อนำไปล็อกอินในขั้นตอนถัดไป
Step 4 of 5

เข้าสู่หน้าจอ Headlamp ผ่านเบราว์เซอร์แล้วยืนยันตัวตนด้วยโทเคน:

หากยังไม่ได้เปิด Port-forward ให้รันคำสั่งนี้ค้างไว้:
  1. เปิดเว็บเบราว์เซอร์ไปที่ http://localhost:8080
  2. คุณจะพบกับหน้าต่าง Authentication / Cluster Login ของ Headlamp ที่มีช่องรับค่าโทเคน
  3. นำ Bearer Token ที่คัดลอกมาจากขั้นตอนที่ 3 วาง (Paste) ลงในกล่องข้อความ ID Token / Bearer Token
  4. คลิกปุ่ม Authenticate (หรือ Sign In) เพื่อเข้าสู่คลัสเตอร์
✓ ผลลัพธ์ที่คาดหวัง: ระบบจะนำคุณเข้าสู่หน้าจอ Dashboard หลักของ Headlamp ทันทีโดยไม่มีหน้าต่างแจ้งเตือนข้อผิดพลาด Unauthorized
Step 5 of 5

สำรวจดูว่าสิทธิ์ของผู้ดูแลระบบ (cluster-admin) ทำงานได้อย่างสมบูรณ์ทั่วทั้งคลัสเตอร์หรือไม่:

  1. สังเกตแถบมุมบนขวาของหน้าต่าง Headlamp UI จะแสดงไอคอนผู้ใช้และการเชื่อมต่อในบริบทของ ServiceAccount headlamp-admin
  2. ทดลองคลิกสลับดูเมนูต่างๆ ทางด้านซ้าย:
    • Cluster > Nodes: ตรวจสอบสเปกและปริมาณ CPU/Memory ของคลัสเตอร์
    • Workloads > Pods & Deployments: ดูเวิร์กโหลดข้ามทุก Namespace (All Namespaces)
    • Network > Services & Ingresses: ดูรายการพอร์ตเครือข่าย
    • Storage > PersistentVolumeClaims: ดูพื้นที่จัดเก็บข้อมูลจากวันที่ 9
  3. สังเกตว่าปุ่มคำสั่งสำคัญ เช่น + Create, Scale, หรือ Edit YAML จะเปิดให้ใช้งานได้ครบถ้วน ยืนยันว่าได้รับสิทธิ์ระดับสูงสุดเรียบร้อยแล้ว
หากในอนาคตต้องการสร้างผู้ใช้ที่ดูได้เฉพาะบาง Namespace หรืออ่านได้อย่างเดียว (Read-only) ก็สามารถทำได้โดยเปลี่ยน RoleBinding ให้ผูกกับ Role อื่นแทน
ระดับความสำเร็จ • Level 1 Graduation Recap

🎓 สรุปจบ Level 1: Kubernetes Core Concepts & Headlamp Local Setup!

ยินดีด้วยครับ! คุณได้ผ่านการฝึกฝนแบบ Hands-on ครบทั้ง 10 วันใน Level 1 เรียบร้อยแล้ว ซึ่งครอบคลุมทักษะพื้นฐานสำคัญทั้งหมดสำหรับวิศวกร Kubernetes:

Days 1–2: Cluster Setup & Deployment Modes

การสร้าง Local Cluster (Minikube/Kind), การรัน Headlamp Desktop และติดตั้งแบบ In-Cluster ผ่าน Web Browser

Days 3–5: Isolation, YAML & Diagnostics

การจัดกลุ่มด้วย Namespaces, จัดการ Declarative YAML ผ่าน Inline Editor, วงจรชีวิต Pod Lifecycle และการตรวจ Logs/Events เพื่อแก้ปัญหา

Days 6–8: Rollouts, Networking & ConfigMaps

การทำ Zero-downtime Rolling Update & Rollback, ระบบเครือข่าย Services (ClusterIP vs NodePort) และการแยกคอนฟิกด้วย ConfigMaps

Days 9–10: Persistent Storage & RBAC Auth

การจัดการ Persistent Storage (PV, PVC, StorageClass) และระบบความมั่นคงปลอดภัยผ่าน ServiceAccount Bearer Token

ภารกิจสิ้นสุด Level 1 (Level 1 Milestone)

ลองสร้าง ServiceAccount เจน Token และล็อกอินเข้า Headlamp UI ดูนะครับ เมื่อยืนยันระดับสิทธิ์เรียบร้อยแล้ว แสดงว่าคุณผ่าน Level 1 อย่างเป็นทางการแล้วครับ!

ขั้นตอนถัดไปที่คุณเลือกได้:
1. ทำ แบบทดสอบทบทวน (Level 1 Checkpoint Quiz & Graduation Exam) เพื่อประเมินตนเอง
2. ลุยต่อใน Level 2: Cluster Management, Workloads & Headlamp UI Navigation ได้ทันทีครับ
ข้อความแจ้งเตือน